Test creating torrents from .
and ..
Test that torrent gets actual name of directory, and is created in the correct location. type: testing
This commit is contained in:
parent
fa6d4e6ad0
commit
2b19a62134
11
src/env.rs
11
src/env.rs
|
@ -2,7 +2,7 @@ use crate::common::*;
|
|||
|
||||
pub(crate) struct Env {
|
||||
args: Vec<OsString>,
|
||||
dir: Box<dyn AsRef<Path>>,
|
||||
dir: PathBuf,
|
||||
pub(crate) err: Box<dyn Write>,
|
||||
pub(crate) out: Box<dyn Write>,
|
||||
err_style: Style,
|
||||
|
@ -63,8 +63,8 @@ impl Env {
|
|||
args.run(self)
|
||||
}
|
||||
|
||||
pub(crate) fn new<D, O, E, S, I>(
|
||||
dir: D,
|
||||
pub(crate) fn new<O, E, S, I>(
|
||||
dir: PathBuf,
|
||||
out: O,
|
||||
out_style: Style,
|
||||
out_is_term: bool,
|
||||
|
@ -73,7 +73,6 @@ impl Env {
|
|||
args: I,
|
||||
) -> Self
|
||||
where
|
||||
D: AsRef<Path> + 'static,
|
||||
O: Write + 'static,
|
||||
E: Write + 'static,
|
||||
S: Into<OsString>,
|
||||
|
@ -81,9 +80,9 @@ impl Env {
|
|||
{
|
||||
Self {
|
||||
args: args.into_iter().map(Into::into).collect(),
|
||||
dir: Box::new(dir),
|
||||
err: Box::new(err),
|
||||
out: Box::new(out),
|
||||
dir,
|
||||
out_style,
|
||||
out_is_term,
|
||||
err_style,
|
||||
|
@ -133,7 +132,7 @@ impl Env {
|
|||
}
|
||||
|
||||
pub(crate) fn dir(&self) -> &Path {
|
||||
self.dir.as_ref().as_ref()
|
||||
&self.dir
|
||||
}
|
||||
|
||||
pub(crate) fn resolve(&self, path: impl AsRef<Path>) -> PathBuf {
|
||||
|
|
|
@ -381,6 +381,56 @@ mod tests {
|
|||
assert!(matches!(value, Value::Dict(_)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn input_dot() {
|
||||
let mut env = test_env! {
|
||||
args: [
|
||||
"torrent",
|
||||
"create",
|
||||
"--input",
|
||||
".",
|
||||
"--announce",
|
||||
"https://bar",
|
||||
],
|
||||
cwd: "dir",
|
||||
tree: {
|
||||
dir: {
|
||||
foo: "",
|
||||
},
|
||||
}
|
||||
};
|
||||
env.run().unwrap();
|
||||
let metainfo = env.load_metainfo("../dir.torrent");
|
||||
assert_eq!(metainfo.info.name, "dir");
|
||||
assert_matches!(metainfo.info.mode, Mode::Multiple{files} if files.len() == 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn input_dot_dot() {
|
||||
let mut env = test_env! {
|
||||
args: [
|
||||
"torrent",
|
||||
"create",
|
||||
"--input",
|
||||
"..",
|
||||
"--announce",
|
||||
"https://bar",
|
||||
],
|
||||
cwd: "a/b",
|
||||
tree: {
|
||||
a: {
|
||||
b: {
|
||||
foo: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
};
|
||||
env.run().unwrap();
|
||||
let metainfo = env.load_metainfo("../../a.torrent");
|
||||
assert_eq!(metainfo.info.name, "a");
|
||||
assert_matches!(metainfo.info.mode, Mode::Multiple{files} if files.len() == 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn privacy_defaults_to_false() {
|
||||
let mut env = test_env! {
|
||||
|
|
|
@ -3,6 +3,7 @@ use crate::common::*;
|
|||
macro_rules! test_env {
|
||||
{
|
||||
args: [$($arg:expr),* $(,)?],
|
||||
$(cwd: $cwd:expr,)?
|
||||
tree: {
|
||||
$($tree:tt)*
|
||||
} $(,)?
|
||||
|
@ -11,6 +12,7 @@ macro_rules! test_env {
|
|||
let tempdir = temptree! { $($tree)* };
|
||||
|
||||
TestEnvBuilder::new()
|
||||
$(.current_dir(tempdir.path().join($cwd)))?
|
||||
.tempdir(tempdir)
|
||||
.arg("imdl")
|
||||
$(.arg($arg))*
|
||||
|
@ -21,13 +23,20 @@ macro_rules! test_env {
|
|||
|
||||
pub(crate) struct TestEnv {
|
||||
env: Env,
|
||||
#[allow(unused)]
|
||||
tempdir: TempDir,
|
||||
err: Capture,
|
||||
out: Capture,
|
||||
}
|
||||
|
||||
impl TestEnv {
|
||||
pub(crate) fn new(env: Env, err: Capture, out: Capture) -> TestEnv {
|
||||
Self { err, env, out }
|
||||
pub(crate) fn new(tempdir: TempDir, env: Env, err: Capture, out: Capture) -> TestEnv {
|
||||
Self {
|
||||
tempdir,
|
||||
err,
|
||||
env,
|
||||
out,
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn err(&self) -> String {
|
||||
|
|
|
@ -2,18 +2,20 @@ use crate::common::*;
|
|||
|
||||
pub(crate) struct TestEnvBuilder {
|
||||
args: Vec<OsString>,
|
||||
current_dir: Option<PathBuf>,
|
||||
out_is_term: bool,
|
||||
use_color: bool,
|
||||
tempdir: Option<TempDir>,
|
||||
use_color: bool,
|
||||
}
|
||||
|
||||
impl TestEnvBuilder {
|
||||
pub(crate) fn new() -> TestEnvBuilder {
|
||||
TestEnvBuilder {
|
||||
args: Vec::new(),
|
||||
current_dir: None,
|
||||
out_is_term: false,
|
||||
use_color: false,
|
||||
tempdir: None,
|
||||
use_color: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,6 +29,11 @@ impl TestEnvBuilder {
|
|||
self
|
||||
}
|
||||
|
||||
pub(crate) fn current_dir(mut self, path: PathBuf) -> Self {
|
||||
self.current_dir = Some(path);
|
||||
self
|
||||
}
|
||||
|
||||
pub(crate) fn arg_slice(mut self, args: &[&str]) -> Self {
|
||||
for arg in args.iter().cloned() {
|
||||
self.args.push(arg.into());
|
||||
|
@ -43,8 +50,16 @@ impl TestEnvBuilder {
|
|||
let err = Capture::new();
|
||||
let out = Capture::new();
|
||||
|
||||
let tempdir = self.tempdir.unwrap_or_else(|| tempfile::tempdir().unwrap());
|
||||
|
||||
let current_dir = if let Some(current_dir) = self.current_dir {
|
||||
tempdir.path().join(current_dir)
|
||||
} else {
|
||||
tempdir.path().to_owned()
|
||||
};
|
||||
|
||||
let env = Env::new(
|
||||
self.tempdir.unwrap_or_else(|| tempfile::tempdir().unwrap()),
|
||||
current_dir,
|
||||
out.clone(),
|
||||
if self.use_color && self.out_is_term {
|
||||
Style::active()
|
||||
|
@ -57,6 +72,6 @@ impl TestEnvBuilder {
|
|||
self.args,
|
||||
);
|
||||
|
||||
TestEnv::new(env, err, out)
|
||||
TestEnv::new(tempdir, env, err, out)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user