1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod red_tests_pmat_bug_002_003_004 {
use super::*;
/// RED TEST: PMAT-BUG-002 - JavaScript toolchain must return .js extensions
///
/// This test MUST FAIL before the fix and PASS after the fix.
///
/// Root cause: `get_file_extensions(Some("javascript"))` was hitting the
/// `Some(_) => vec!["rs"]` catchall case, causing JavaScript projects to
/// search for .rs files instead of .js files, resulting in 0 files found.
#[test]
fn red_test_javascript_toolchain_returns_javascript_extensions() {
let extensions = get_file_extensions(Some("javascript"));
assert!(
extensions.contains(&"js"),
"PMAT-BUG-002: JavaScript toolchain MUST return .js extension. \
Got: {:?}. This causes JavaScript projects to return 0 files.",
extensions
);
assert!(
extensions.contains(&"jsx"),
"PMAT-BUG-002: JavaScript toolchain MUST return .jsx extension. \
Got: {:?}",
extensions
);
}
/// RED TEST: PMAT-BUG-003 - C toolchain must return .c extensions
///
/// This test MUST FAIL before the fix and PASS after the fix.
///
/// Root cause: Same as PMAT-BUG-002 - `get_file_extensions(Some("c"))`
/// was hitting the catchall case and returning vec!["rs"].
#[test]
fn red_test_c_toolchain_returns_c_extensions() {
let extensions = get_file_extensions(Some("c"));
assert!(
extensions.contains(&"c"),
"PMAT-BUG-003: C toolchain MUST return .c extension. \
Got: {:?}. This causes C projects to return 0 files.",
extensions
);
assert!(
extensions.contains(&"h"),
"PMAT-BUG-003: C toolchain MUST return .h extension for headers. \
Got: {:?}",
extensions
);
}
/// RED TEST: PMAT-BUG-004 - C++ toolchain must return .cpp extensions
///
/// This test MUST FAIL before the fix and PASS after the fix.
///
/// Root cause: Same as PMAT-BUG-002 and PMAT-BUG-003.
#[test]
fn red_test_cpp_toolchain_returns_cpp_extensions() {
let extensions = get_file_extensions(Some("cpp"));
assert!(
extensions.contains(&"cpp"),
"PMAT-BUG-004: C++ toolchain MUST return .cpp extension. \
Got: {:?}. This causes C++ projects to return 0 files.",
extensions
);
// Test C++ variant name
let extensions_cxx = get_file_extensions(Some("c++"));
assert!(
extensions_cxx.contains(&"cpp"),
"PMAT-BUG-004: C++ toolchain (c++ variant) MUST return .cpp extension. \
Got: {:?}",
extensions_cxx
);
}
/// REGRESSION TEST: Existing toolchains must still work correctly
#[test]
fn regression_test_existing_toolchains_still_work() {
// TypeScript should work (it already worked before)
let ts_exts = get_file_extensions(Some("typescript"));
assert!(ts_exts.contains(&"ts"));
assert!(ts_exts.contains(&"tsx"));
// Rust should work
let rs_exts = get_file_extensions(Some("rust"));
assert!(rs_exts.contains(&"rs"));
// Python should work
let py_exts = get_file_extensions(Some("python"));
assert!(py_exts.contains(&"py"));
// None (multi-language) should include all
let all_exts = get_file_extensions(None);
assert!(all_exts.contains(&"rs"));
assert!(all_exts.contains(&"py"));
assert!(all_exts.contains(&"js"));
assert!(all_exts.contains(&"c"));
assert!(all_exts.contains(&"cpp"));
}
}