#[cfg(test)] mod window_matching_tests { /// Test that window name matching handles spaces correctly /// /// Issue: When a user requests a screenshot of "Goose Studio" but the actual /// application name is "GooseStudio" (no space), the fuzzy matching should /// still find the window. /// /// The fix normalizes both names by removing spaces before comparing. #[test] fn test_space_normalization() { let test_cases = vec![ // (user_input, actual_app_name, should_match) ("Goose Studio", "GooseStudio", true), ("GooseStudio", "Goose Studio", true), ("Visual Studio Code", "VisualStudioCode", true), ("Google Chrome", "Google Chrome", true), ("Safari", "Safari", true), ("iTerm", "iTerm2", true), // fuzzy match ("Code", "Visual Studio Code", true), // fuzzy match ]; for (user_input, app_name, should_match) in test_cases { let user_lower = user_input.to_lowercase(); let app_lower = app_name.to_lowercase(); let user_normalized = user_lower.replace(" ", ""); let app_normalized = app_lower.replace(" ", ""); let is_exact = app_lower == user_lower || app_normalized == user_normalized; let is_fuzzy = app_lower.contains(&user_lower) || user_lower.contains(&app_lower) || app_normalized.contains(&user_normalized) || user_normalized.contains(&app_normalized); let matches = is_exact || is_fuzzy; assert_eq!( matches, should_match, "Expected '{}' vs '{}' to match={}, but got match={}", user_input, app_name, should_match, matches ); } } }