From 0c26a0eee50413f16ed260534dee5f6e27fc0508 Mon Sep 17 00:00:00 2001 From: Jasmine Tai Date: Tue, 26 Nov 2019 17:08:02 -0800 Subject: [PATCH] Add more tests --- src/lib.rs | 87 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index a8bc4f1..f0a3ba7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -653,16 +653,6 @@ mod tests { assert_eq!(opts.arg_str(), None); } - #[test] - #[should_panic] - fn multiple_values() { - let args = ["-a", "ay", "ay2", "bar"]; - let opts = Options::new(&args); - assert_eq!(opts.next(), Some(Ok(Opt::Short('a')))); - assert_eq!(opts.value_str(), Ok("ay")); - let _ = opts.value_str(); // cannot get 2 values - } - #[test] fn no_positional() { let args = ["-a", "ay"]; @@ -790,4 +780,81 @@ mod tests { })) ); } + + #[test] + fn subcommand() { + let args = ["-a", "cmd", "-b", "arg"]; + let opts = Options::new(&args); + assert_eq!(opts.next(), Some(Ok(Opt::Short('a')))); + assert_eq!(opts.next(), None); + assert_eq!(opts.arg_str(), Some(&"cmd")); + assert_eq!(opts.next(), Some(Ok(Opt::Short('b')))); + assert_eq!(opts.next(), None); + assert_eq!(opts.arg_str(), Some(&"arg")); + } + + // Things you shouldn't need too often + + #[test] + fn keep_retrieving_options() { + let args = ["-a", "ay", "ay2", "bar"]; + let opts = Options::new(&args); + assert_eq!(opts.next(), Some(Ok(Opt::Short('a')))); + assert_eq!(opts.next(), None); + assert_eq!(opts.next(), None); + assert_eq!(opts.next(), None); + assert_eq!(opts.next(), None); + } + + #[test] + fn keep_retrieving_options_2() { + let args = ["-a", "--", "-b", "--see"]; + let opts = Options::new(&args); + assert_eq!(opts.next(), Some(Ok(Opt::Short('a')))); + assert_eq!(opts.next(), None); + assert_eq!(opts.next(), Some(Ok(Opt::Short('b')))); + assert_eq!(opts.next(), Some(Ok(Opt::Long("see")))); + assert_eq!(opts.next(), None); + } + + // Things you definitely shouldn't do + + #[test] + #[should_panic] + fn keep_taking_values() { + let args = ["-a", "ay", "ay2", "bar"]; + let opts = Options::new(&args); + let _ = opts.next(); // -a + let _ = opts.value_str(); // ay + let _ = opts.value_str(); // panic: cannot get 2 values + } + + #[test] + fn keep_taking_args() { + let args = ["-a", "ay"]; + let opts = Options::new(&args); + assert_eq!(opts.arg_str(), Some(&"-a")); + assert_eq!(opts.arg_str(), Some(&"ay")); + assert_eq!(opts.arg_str(), None); + assert_eq!(opts.arg_str(), None); + assert_eq!(opts.arg_str(), None); + assert_eq!(opts.arg_str(), None); + } + + #[test] + #[should_panic] + fn value_without_option() { + let args = ["-a", "ay"]; + let opts = Options::new(&args); + let _ = opts.value_str(); // no option retrieved yet + } + + #[test] + #[should_panic] + fn value_after_arg() { + let args = ["ay", "bee"]; + let opts = Options::new(&args); + let _ = opts.arg_str(); // ay + let _ = opts.value_str(); // no option retrieved yet + } }