diff --git a/wfassoc/tests/extra/windows.rs b/wfassoc/tests/extra/windows.rs new file mode 100644 index 0000000..e69de29 diff --git a/wfassoc/tests/extra_windows.rs b/wfassoc/tests/extra_windows.rs new file mode 100644 index 0000000..50acf2e --- /dev/null +++ b/wfassoc/tests/extra_windows.rs @@ -0,0 +1,67 @@ +use wfassoc::extra::windows::*; + +fn test_cmd_args_ex(s: &str, probe: &[&'static str]) { + let rv = CmdArgs::new(s); + let inner = rv.get_inner(); + assert_eq!(inner.len(), probe.len()); + + let n = inner.len(); + for i in 0..n { + assert_eq!(inner[i].get_inner(), probe[i]); + } +} + +#[test] +fn test_cmd_args() { + // Normal cases + test_cmd_args_ex( + "MyApp.exe --config ppic.toml", + &["MyApp.exe", "--config", "ppic.toml"], + ); + test_cmd_args_ex( + r#""C:\Program Files\MyApp\MyApp.exe" --config ppic.toml"#, + &[ + r#"C:\Program Files\MyApp\MyApp.exe"#, + "--config", + "ppic.toml", + ], + ); + + // Microsoft shitty cases. + test_cmd_args_ex(r#""abc" d e"#, &[r#"abc"#, r#"d"#, r#"e"#]); + test_cmd_args_ex(r#"a\\b d"e f"g h"#, &[r#"a\\b"#, r#"de fg"#, r#"h"#]); + test_cmd_args_ex(r#"a\\\"b c d"#, &[r#"a\"b"#, r#"c"#, r#"d"#]); + test_cmd_args_ex(r#"a\\\\"b c" d e"#, &[r#"a\\b c"#, r#"d"#, r#"e"#]); + test_cmd_args_ex(r#"a"b"" c d"#, &[r#"ab" c d"#]); +} + +#[test] +fn test_cmd_arg() { + let rv = CmdArg::new(r#""C:\Program Files\MyApp\MyApp.exe""#); + assert!(rv.is_ok()); + assert_eq!(rv.unwrap().get_inner(), r#"C:\Program Files\MyApp\MyApp.exe"#); + + let rv = CmdArg::new("MyApp.exe --config ppic.toml"); + assert!(rv.is_err()); + + let rv = CmdArg::new(""); + assert!(rv.is_err()); +} + +#[test] +fn test_quote_cmd_arg() { + let rv = CmdArg::with_inner(r#"C:\Program Files\MyApp\MyApp.exe"#).to_quoted_string(true); + assert_eq!(rv, r#""C:\Program Files\MyApp\MyApp.exe""#) +} + +#[test] +fn test_quote_cmd_args() { + let args = [ + r#"C:\Program Files\MyApp\MyApp.exe"#, + "--config", + "ppic.toml", + ]; + let rv = CmdArgs::with_inner(args.iter().map(|s| CmdArg::with_inner(s))).to_quoted_string(); + assert_eq!(rv, r#""C:\Program Files\MyApp\MyApp.exe" --config ppic.toml"#); +} +