Skip to main content

gen_expected/
gen_expected.rs

1use sevenmark_parser::core::parse_document;
2use std::fs;
3use std::path::Path;
4
5fn main() {
6    let categories = [
7        "brace", "comment", "complex", "escape", "fold", "if", "macro", "markdown",
8    ];
9
10    for category in categories {
11        let input_dir = format!("tc/{}/input", category);
12        let expected_dir = format!("tc/{}/expected", category);
13
14        // Create expected directory if it doesn't exist
15        if !Path::new(&expected_dir).exists() {
16            fs::create_dir_all(&expected_dir).expect("Failed to create expected directory");
17        }
18
19        // Process each input file
20        if let Ok(entries) = fs::read_dir(&input_dir) {
21            for entry in entries.flatten() {
22                let path = entry.path();
23                if path.extension().is_some_and(|ext| ext == "txt") {
24                    let file_stem = path.file_stem().unwrap().to_str().unwrap();
25                    // Normalize CRLF to LF for consistent byte offsets across platforms
26                    let input_content = fs::read_to_string(&path)
27                        .expect("Failed to read input file")
28                        .replace("\r\n", "\n");
29
30                    let result = parse_document(&input_content);
31                    let json_output = serde_json::to_string_pretty(&result).unwrap();
32
33                    let expected_path = format!("{}/{}.json", expected_dir, file_stem);
34                    fs::write(&expected_path, &json_output).expect("Failed to write expected file");
35
36                    println!("Generated: {}", expected_path);
37                }
38            }
39        }
40    }
41}