|
| 1 | +//! Luau 六类别真实工具验收 |
| 2 | +//! 验收标准:正例通过 + 负例检出 + 格式≠注释合规 |
| 3 | +
|
| 4 | +use std::process::Command; |
| 5 | + |
| 6 | +fn ensure_clean_dir(name: &str) -> std::path::PathBuf { |
| 7 | + let tmp = std::env::temp_dir().join(name); |
| 8 | + let _ = std::fs::remove_dir_all(&tmp); |
| 9 | + std::fs::create_dir_all(&tmp).unwrap(); |
| 10 | + tmp |
| 11 | +} |
| 12 | + |
| 13 | +fn luau_bin() -> String { |
| 14 | + std::env::var("CODEGUARD_LUAU_ANALYZE_BIN").unwrap_or_else(|_| "luau-analyze".to_string()) |
| 15 | +} |
| 16 | + |
| 17 | +/// 正例通过 |
| 18 | +#[test] |
| 19 | +fn valid_luau_samples_pass_analyze() { |
| 20 | + let tmp = ensure_clean_dir("luau-valid-test"); |
| 21 | + std::fs::write(tmp.join("main.luau"), "-- Adds two numbers.\nlocal function add(a, b)\n return a + b\nend\n\nprint(add(1, 2))\n").unwrap(); |
| 22 | + |
| 23 | + let output = Command::new(luau_bin()) |
| 24 | + .args(["main.luau"]) |
| 25 | + .current_dir(&tmp) |
| 26 | + .output() |
| 27 | + .expect("luau 不可用"); |
| 28 | + |
| 29 | + assert!(output.status.success(), "有效 Luau 代码应通过分析: {:?}", output); |
| 30 | + std::fs::remove_dir_all(&tmp).unwrap(); |
| 31 | +} |
| 32 | + |
| 33 | +/// 负例检出 |
| 34 | +#[test] |
| 35 | +fn invalid_luau_samples_are_detected() { |
| 36 | + let tmp = ensure_clean_dir("luau-invalid-test"); |
| 37 | + std::fs::write(tmp.join("main.luau"), "local function broken(a, b)\n return a + b + notDefinedAnywhere\nend\n\nprint(broken(1, 2))\n").unwrap(); |
| 38 | + |
| 39 | + let output = Command::new(luau_bin()) |
| 40 | + .args(["main.luau"]) |
| 41 | + .current_dir(&tmp) |
| 42 | + .output() |
| 43 | + .expect("luau 不可用"); |
| 44 | + |
| 45 | + assert!(!output.status.success(), "未定义变量应被检出"); |
| 46 | + std::fs::remove_dir_all(&tmp).unwrap(); |
| 47 | +} |
| 48 | + |
| 49 | +/// 格式≠注释合规 |
| 50 | +#[test] |
| 51 | +fn formatting_cannot_impersonate_comment_checking() { |
| 52 | + let tmp = ensure_clean_dir("luau-comment-test"); |
| 53 | + // 格式正确但缺少注释 |
| 54 | + std::fs::write(tmp.join("main.luau"), "local function undocumented(a)\n return a * 2\nend\n\n-- Has docs.\nlocal function documented(a)\n return a + 1\nend\n\nprint(undocumented(5) + documented(3))\n").unwrap(); |
| 55 | + |
| 56 | + let output = Command::new(luau_bin()) |
| 57 | + .args(["main.luau"]) |
| 58 | + .current_dir(&tmp) |
| 59 | + .output() |
| 60 | + .expect("luau 不可用"); |
| 61 | + |
| 62 | + assert!(output.status.success(), "Luau 应通过(语法正确),但注释合规需另查: {:?}", output); |
| 63 | + std::fs::remove_dir_all(&tmp).unwrap(); |
| 64 | +} |
0 commit comments