summaryrefslogtreecommitdiffstats
path: root/vendor/xflags-macros/tests/it/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/xflags-macros/tests/it/main.rs')
-rw-r--r--vendor/xflags-macros/tests/it/main.rs198
1 files changed, 198 insertions, 0 deletions
diff --git a/vendor/xflags-macros/tests/it/main.rs b/vendor/xflags-macros/tests/it/main.rs
new file mode 100644
index 000000000..1ce058814
--- /dev/null
+++ b/vendor/xflags-macros/tests/it/main.rs
@@ -0,0 +1,198 @@
+mod repeated_pos;
+mod smoke;
+mod subcommands;
+mod help;
+
+use std::{ffi::OsString, fmt};
+
+use expect_test::{expect, Expect};
+
+fn check<F, A>(f: F, args: &str, expect: Expect)
+where
+ F: FnOnce(Vec<OsString>) -> xflags::Result<A>,
+ A: fmt::Debug,
+{
+ let args = args.split_ascii_whitespace().map(OsString::from).collect::<Vec<_>>();
+ let res = f(args);
+ match res {
+ Ok(args) => {
+ expect.assert_debug_eq(&args);
+ }
+ Err(err) => {
+ expect.assert_eq(&err.to_string());
+ }
+ }
+}
+
+#[test]
+fn smoke() {
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n 92 .",
+ expect![[r#"
+ RustAnalyzer {
+ workspace: ".",
+ jobs: None,
+ log_file: None,
+ verbose: 0,
+ number: 92,
+ data: [],
+ emoji: false,
+ }
+ "#]],
+ );
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n 92 -v --verbose -v --data 0xDEAD --log-file /tmp/log.txt --data 0xBEEF .",
+ expect![[r#"
+ RustAnalyzer {
+ workspace: ".",
+ jobs: None,
+ log_file: Some(
+ "/tmp/log.txt",
+ ),
+ verbose: 3,
+ number: 92,
+ data: [
+ "0xDEAD",
+ "0xBEEF",
+ ],
+ emoji: false,
+ }
+ "#]],
+ );
+
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n 92 --werbose",
+ expect![[r#"unexpected flag: `--werbose`"#]],
+ );
+ check(smoke::RustAnalyzer::from_vec, "", expect![[r#"flag is required: `workspace`"#]]);
+ check(smoke::RustAnalyzer::from_vec, ".", expect![[r#"flag is required: `--number`"#]]);
+ check(smoke::RustAnalyzer::from_vec, "-n", expect![[r#"expected a value for `-n`"#]]);
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n lol",
+ expect![[r#"can't parse `-n`, invalid digit found in string"#]],
+ );
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n 1 -n 2 .",
+ expect![[r#"flag specified more than once: `--number`"#]],
+ );
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n 1 . 92 lol",
+ expect![[r#"unexpected argument: "lol""#]],
+ );
+ check(
+ smoke::RustAnalyzer::from_vec,
+ "-n 1 . --emoji --emoji",
+ expect![[r#"flag specified more than once: `--emoji`"#]],
+ );
+}
+
+#[test]
+fn repeated_argument() {
+ check(
+ repeated_pos::RepeatedPos::from_vec,
+ "a 11 c d e f",
+ expect![[r#"
+ RepeatedPos {
+ a: "a",
+ b: Some(
+ 11,
+ ),
+ c: Some(
+ "c",
+ ),
+ rest: [
+ "d",
+ "e",
+ "f",
+ ],
+ }
+ "#]],
+ );
+}
+
+#[test]
+fn subcommands() {
+ check(
+ subcommands::RustAnalyzer::from_vec,
+ "server",
+ expect![[r#"
+ RustAnalyzer {
+ verbose: 0,
+ subcommand: Server(
+ Server {
+ dir: None,
+ subcommand: Launch(
+ Launch {
+ log: false,
+ },
+ ),
+ },
+ ),
+ }
+ "#]],
+ );
+
+ check(
+ subcommands::RustAnalyzer::from_vec,
+ "server --dir . --log",
+ expect![[r#"
+ RustAnalyzer {
+ verbose: 0,
+ subcommand: Server(
+ Server {
+ dir: Some(
+ ".",
+ ),
+ subcommand: Launch(
+ Launch {
+ log: true,
+ },
+ ),
+ },
+ ),
+ }
+ "#]],
+ );
+
+ check(
+ subcommands::RustAnalyzer::from_vec,
+ "server watch",
+ expect![[r#"
+ RustAnalyzer {
+ verbose: 0,
+ subcommand: Server(
+ Server {
+ dir: None,
+ subcommand: Watch(
+ Watch,
+ ),
+ },
+ ),
+ }
+ "#]],
+ );
+
+ check(
+ subcommands::RustAnalyzer::from_vec,
+ "-v analysis-stats . --parallel",
+ expect![[r#"
+ RustAnalyzer {
+ verbose: 1,
+ subcommand: AnalysisStats(
+ AnalysisStats {
+ path: ".",
+ parallel: true,
+ },
+ ),
+ }
+ "#]],
+ );
+
+ check(subcommands::RustAnalyzer::from_vec, "", expect![[r#"subcommand is required"#]]);
+}