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