From e908e775edb479e1cc1c063a52f84df6388bbd42 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Thu, 23 Oct 2025 21:48:48 +0800 Subject: [PATCH] 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 --- wfassoc/src/extra/windows.rs | 2 +- wfassoc/tests/extra_windows.rs | 107 ++++++++++++++++++++------------- 2 files changed, 66 insertions(+), 43 deletions(-) diff --git a/wfassoc/src/extra/windows.rs b/wfassoc/src/extra/windows.rs index 0de5b6b..c02d0e4 100644 --- a/wfassoc/src/extra/windows.rs +++ b/wfassoc/src/extra/windows.rs @@ -205,7 +205,7 @@ impl Drop for Icon { // region: Windows Commandline -// region Cmd Lexer +// region: Cmd Lexer /// The lexer for Windows commandline argument split. /// diff --git a/wfassoc/tests/extra_windows.rs b/wfassoc/tests/extra_windows.rs index 50acf2e..27d8af4 100644 --- a/wfassoc/tests/extra_windows.rs +++ b/wfassoc/tests/extra_windows.rs @@ -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"#, + ); +}