Fixing --output flag missing in tests

This commit is contained in:
João M. Bezerra 2021-06-02 03:31:30 -03:00
parent 38c88c1df2
commit 8eb973d470
2 changed files with 19 additions and 30 deletions

View File

@ -37,8 +37,8 @@ pub fn parse_args() -> crate::Result<ParsedArgs> {
match &mut parsed_args.command {
Command::Compress { files, .. } | Command::Decompress { files, .. } => {
*files = canonicalize_files(&files)?;
}
_ => {}
},
_ => {},
}
Ok(parsed_args)
}
@ -72,7 +72,7 @@ fn canonicalize(path: impl AsRef<Path>) -> crate::Result<PathBuf> {
} else {
Err(io_err.into())
}
}
},
}
}
@ -107,7 +107,7 @@ pub fn parse_args_from(mut args: Vec<OsString>) -> crate::Result<ParsedArgs> {
let command = Command::Compress { files, compressed_output_path };
ParsedArgs { command, flags }
}
},
// Defaults to decompression when there is no subcommand
None => {
flags_info.push(arg_flag!('o', "output"));
@ -121,16 +121,16 @@ pub fn parse_args_from(mut args: Vec<OsString>) -> crate::Result<ParsedArgs> {
}
// Parse flags
let (files, mut flags) = oof::filter_flags(args, &flags_info)?;
let (files, flags) = oof::filter_flags(args, &flags_info)?;
let files = files.into_iter().map(PathBuf::from).collect();
let output_folder = flags.take_arg("output").map(PathBuf::from);
let output_folder = flags.arg("output").map(PathBuf::from);
// TODO: ensure all files are decompressible
let command = Command::Decompress { files, output_folder };
ParsedArgs { command, flags }
}
},
_ => unreachable!("You should match each subcommand passed."),
};
@ -157,20 +157,14 @@ mod tests {
assert_eq!(test_cli("--help").unwrap().command, Command::ShowHelp);
assert_eq!(test_cli("--version").unwrap().command, Command::ShowVersion);
assert_eq!(test_cli("--version").unwrap().flags, oof::Flags::default());
assert_eq!(
test_cli("foo.zip bar.zip").unwrap().command,
Command::Decompress {
files: vec!["foo.zip".into(), "bar.zip".into()],
output_folder: None
}
);
assert_eq!(
test_cli("compress foo bar baz.zip").unwrap().command,
Command::Compress {
files: vec!["foo".into(), "bar".into()],
compressed_output_path: "baz.zip".into()
}
);
assert_eq!(test_cli("foo.zip bar.zip").unwrap().command, Command::Decompress {
files: vec!["foo.zip".into(), "bar.zip".into()],
output_folder: None
});
assert_eq!(test_cli("compress foo bar baz.zip").unwrap().command, Command::Compress {
files: vec!["foo".into(), "bar".into()],
compressed_output_path: "baz.zip".into()
});
assert_eq!(test_cli("compress").unwrap_err(), crate::Error::MissingArgumentsForCompression);
}
@ -186,12 +180,9 @@ mod tests {
// pub argument_flags: BTreeMap<&'static str, OsString>,
// }
assert_eq!(
test_cli("foo bar --output hey.zip").unwrap().flags,
oof::Flags {
boolean_flags: vec!["yes"].into_iter().collect(),
argument_flags: vec![("--output", OsString::from("hey"))].into_iter().collect(),
}
);
assert_eq!(test_cli("foo --yes bar --output folder").unwrap().flags, oof::Flags {
boolean_flags: vec!["yes"].into_iter().collect(),
argument_flags: vec![("output", OsString::from("folder"))].into_iter().collect(),
});
}
}

View File

@ -55,9 +55,7 @@ impl Flags {
pub fn new() -> Self {
Self::default()
}
}
impl Flags {
pub fn is_present(&self, flag_name: &str) -> bool {
self.boolean_flags.contains(flag_name) || self.argument_flags.contains_key(flag_name)
}