refactor(tests): restructure windows commandline tests for better readability
- Extract test helpers into nested functions to reduce duplication - Rename test functions to be more descriptive - Group related test cases together
This commit is contained in:
@ -205,7 +205,7 @@ impl Drop for Icon {
|
||||
|
||||
// region: Windows Commandline
|
||||
|
||||
// region Cmd Lexer
|
||||
// region: Cmd Lexer
|
||||
|
||||
/// The lexer for Windows commandline argument split.
|
||||
///
|
||||
|
||||
@ -1,24 +1,25 @@
|
||||
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() {
|
||||
// Declare tester
|
||||
fn tester(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]);
|
||||
}
|
||||
}
|
||||
|
||||
// Normal cases
|
||||
test_cmd_args_ex(
|
||||
tester(
|
||||
"MyApp.exe --config ppic.toml",
|
||||
&["MyApp.exe", "--config", "ppic.toml"],
|
||||
);
|
||||
test_cmd_args_ex(
|
||||
tester(
|
||||
r#""C:\Program Files\MyApp\MyApp.exe" --config ppic.toml"#,
|
||||
&[
|
||||
r#"C:\Program Files\MyApp\MyApp.exe"#,
|
||||
@ -28,40 +29,62 @@ fn test_cmd_args() {
|
||||
);
|
||||
|
||||
// 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"#]);
|
||||
tester(r#""abc" d e"#, &[r#"abc"#, r#"d"#, r#"e"#]);
|
||||
tester(r#"a\\b d"e f"g h"#, &[r#"a\\b"#, r#"de fg"#, r#"h"#]);
|
||||
tester(r#"a\\\"b c d"#, &[r#"a\"b"#, r#"c"#, r#"d"#]);
|
||||
tester(r#"a\\\\"b c" d e"#, &[r#"a\\b c"#, r#"d"#, r#"e"#]);
|
||||
tester(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"#);
|
||||
// Declare tester
|
||||
fn ok_tester(s: &str, probe: &str) {
|
||||
let rv = CmdArg::new(s);
|
||||
assert!(rv.is_ok());
|
||||
let rv = rv.unwrap();
|
||||
assert_eq!(rv.get_inner(), probe);
|
||||
}
|
||||
fn err_tester(s: &str) {
|
||||
let rv = CmdArg::new(s);
|
||||
assert!(rv.is_err());
|
||||
}
|
||||
|
||||
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 = [
|
||||
// Normal test
|
||||
ok_tester(
|
||||
r#""C:\Program Files\MyApp\MyApp.exe""#,
|
||||
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"#);
|
||||
);
|
||||
err_tester("MyApp.exe --config ppic.toml");
|
||||
err_tester("");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cmd_arg_quoted_string() {
|
||||
fn tester(s: &str, probe: &str) {
|
||||
let rv = CmdArg::with_inner(s);
|
||||
assert_eq!(rv.to_quoted_string(true), probe);
|
||||
}
|
||||
|
||||
tester(
|
||||
r#"C:\Program Files\MyApp\MyApp.exe"#,
|
||||
r#""C:\Program Files\MyApp\MyApp.exe""#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cmd_args_quoted_string() {
|
||||
fn tester(args: &[&str], probe: &str) {
|
||||
let rv = CmdArgs::with_inner(args.iter().map(|s| CmdArg::with_inner(s)));
|
||||
assert_eq!(rv.to_quoted_string(), probe);
|
||||
}
|
||||
|
||||
tester(
|
||||
&[
|
||||
r#"C:\Program Files\MyApp\MyApp.exe"#,
|
||||
"--config",
|
||||
"ppic.toml",
|
||||
],
|
||||
r#""C:\Program Files\MyApp\MyApp.exe" --config ppic.toml"#,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user