65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| extern crate walkdir;
 | |
| 
 | |
| use self::walkdir::WalkDir;
 | |
| 
 | |
| use std::env;
 | |
| use std::path::Path;
 | |
| use std::collections::HashMap;
 | |
| 
 | |
| fn main() {
 | |
|     let args: Vec<_> = env::args().collect();
 | |
| 
 | |
|     let path = args.get(1).expect("usage: genfixture [PATH]");
 | |
|     let path = Path::new(path);
 | |
| 
 | |
|     let mut tests = HashMap::new();
 | |
| 
 | |
|     for entry in WalkDir::new(path) {
 | |
|         let entry = entry.unwrap();
 | |
|         let path = entry.path().to_str().unwrap();
 | |
| 
 | |
|         if !path.ends_with(".json") {
 | |
|             continue;
 | |
|         }
 | |
| 
 | |
|         if path.contains("raw-data") {
 | |
|             continue;
 | |
|         }
 | |
| 
 | |
|         // Get the relevant part
 | |
|         let fixture_path = path.split("fixtures/hpack/").last().unwrap();
 | |
| 
 | |
|         // Now, split that into the group and the name
 | |
|         let module = fixture_path.split("/").next().unwrap();
 | |
| 
 | |
|         tests.entry(module.to_string()).or_insert(vec![])
 | |
|             .push(fixture_path.to_string());
 | |
|     }
 | |
| 
 | |
|     let mut one = false;
 | |
| 
 | |
|     for (module, tests) in tests {
 | |
|         let module = module.replace("-", "_");
 | |
| 
 | |
|         if one {
 | |
|             println!("");
 | |
|         }
 | |
| 
 | |
|         one = true;
 | |
| 
 | |
|         println!("fixture_mod!(");
 | |
|         println!("    {} => {{", module);
 | |
| 
 | |
|         for test in tests {
 | |
|             let ident = test
 | |
|                 .split("/").nth(1).unwrap()
 | |
|                 .split(".").next().unwrap();
 | |
| 
 | |
|             println!("        ({}, {:?});", ident, test);
 | |
|         }
 | |
| 
 | |
|         println!("    }}");
 | |
|         println!(");");
 | |
|     }
 | |
| }
 |