Skip to content

Commit

Permalink
Fix incomplete help text for encrypted & unencrypted subcommands
Browse files Browse the repository at this point in the history
Subcommands of the encrypted and unencrypted commands were found to have
a wrong help text displayed. The reason for that behavior was that the
subargs were are constructing as part of the argument parsing process
were missing the command being requested and instead containing only the
subcommand.
This change fixes this deficiency. It also adds a test ensuring that the
"Usage" string displayed in the help text of each command and subcommand
contains the proper arguments.
  • Loading branch information
d-e-s-o committed Aug 22, 2019
1 parent b766d58 commit 560152b
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 11 deletions.
7 changes: 5 additions & 2 deletions nitrocli/src/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,10 @@ fn unencrypted(ctx: &mut ExecCtx<'_>, args: Vec<String>) -> Result<()> {
parser.stop_on_first_argument(true);
parse(ctx, parser, args)?;

subargs.insert(0, format!("nitrocli {}", subcommand));
subargs.insert(
0,
format!("nitrocli {} {}", Command::Unencrypted, subcommand),
);
subcommand.execute(ctx, subargs)
}

Expand Down Expand Up @@ -331,7 +334,7 @@ fn encrypted(ctx: &mut ExecCtx<'_>, args: Vec<String>) -> Result<()> {
parser.stop_on_first_argument(true);
parse(ctx, parser, args)?;

subargs.insert(0, format!("nitrocli {}", subcommand));
subargs.insert(0, format!("nitrocli {} {}", Command::Encrypted, subcommand));
subcommand.execute(ctx, subargs)
}

Expand Down
6 changes: 3 additions & 3 deletions nitrocli/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ impl Nitrocli {
}
}

fn do_run<F, R>(&mut self, args: &[&'static str], f: F) -> (R, Vec<u8>, Vec<u8>)
fn do_run<F, R>(&mut self, args: &[&str], f: F) -> (R, Vec<u8>, Vec<u8>)
where
F: FnOnce(&mut crate::RunCtx<'_>, Vec<String>) -> R,
{
Expand Down Expand Up @@ -166,12 +166,12 @@ impl Nitrocli {
}

/// Run `nitrocli`'s `run` function.
pub fn run(&mut self, args: &[&'static str]) -> (i32, Vec<u8>, Vec<u8>) {
pub fn run(&mut self, args: &[&str]) -> (i32, Vec<u8>, Vec<u8>) {
self.do_run(args, |c, a| crate::run(c, a))
}

/// Run `nitrocli`'s `handle_arguments` function.
pub fn handle(&mut self, args: &[&'static str]) -> crate::Result<String> {
pub fn handle(&mut self, args: &[&str]) -> crate::Result<String> {
let (res, out, _) = self.do_run(args, |c, a| crate::args::handle_arguments(c, a));
res.map(|_| String::from_utf8_lossy(&out).into_owned())
}
Expand Down
49 changes: 43 additions & 6 deletions nitrocli/src/tests/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,56 @@ fn no_command_or_option() {
}

#[test]
fn help_option() {
fn test(opt: &'static str) {
let (rc, out, err) = Nitrocli::new().run(&[opt]);
fn help_options() {
fn test_run(args: &[&str], help: &str) {
let mut all = args.to_vec();
all.push(help);

let (rc, out, err) = Nitrocli::new().run(&all);

assert_eq!(rc, 0);
assert_eq!(err, b"");

let s = String::from_utf8_lossy(&out).into_owned();
assert!(s.starts_with("Usage:\n"), s);
let expected = format!("Usage:\n nitrocli {}", args.join(" "));
assert!(s.starts_with(&expected), s);
}

fn test(args: &[&str]) {
test_run(args, "--help");
test_run(args, "-h");
}

test("--help");
test("-h")
test(&[]);
test(&["config"]);
test(&["config", "get"]);
test(&["config", "set"]);
test(&["encrypted"]);
test(&["encrypted", "open"]);
test(&["encrypted", "close"]);
test(&["hidden"]);
test(&["hidden", "close"]);
test(&["hidden", "create"]);
test(&["hidden", "open"]);
test(&["lock"]);
test(&["otp"]);
test(&["otp", "clear"]);
test(&["otp", "get"]);
test(&["otp", "set"]);
test(&["otp", "status"]);
test(&["pin"]);
test(&["pin", "clear"]);
test(&["pin", "set"]);
test(&["pin", "unblock"]);
test(&["pws"]);
test(&["pws", "clear"]);
test(&["pws", "get"]);
test(&["pws", "set"]);
test(&["pws", "status"]);
test(&["reset"]);
test(&["status"]);
test(&["unencrypted"]);
test(&["unencrypted", "set"]);
}

#[test]
Expand Down

0 comments on commit 560152b

Please sign in to comment.