use std::{ fs, path::PathBuf };
#[ test ]
fn examples_readme_accuracy()
{
let manifest_dir = PathBuf::from( env!( "CARGO_MANIFEST_DIR" ) );
let examples_dir = manifest_dir.join( "examples" );
let readme_path = examples_dir.join( "readme.md" );
let readme_content = fs::read_to_string( &readme_path )
.expect( "Failed to read examples/readme.md" );
let mut example_files = Vec::new();
for entry in fs::read_dir( &examples_dir ).expect( "Failed to read examples directory" )
{
let entry = entry.expect( "Failed to read directory entry" );
let path = entry.path();
if path.extension().and_then( | s | s.to_str() ) == Some( "rs" )
{
if let Some( filename ) = path.file_name().and_then( | s | s.to_str() )
{
example_files.push( filename.to_string() );
}
}
}
example_files.sort();
let missing_from_readme : Vec< String > = example_files
.iter()
.filter( | example | !readme_content.contains( example.as_str() ) )
.cloned()
.collect();
assert!(
missing_from_readme.is_empty(),
"Examples missing from readme.md documentation:\n{}\n\
Add these examples to examples/readme.md",
missing_from_readme.join( "\n" )
);
let documented_examples =
[
"component_model_trivial.rs",
"000_basic_assignment.rs",
"001_fluent_builder.rs",
"002_multiple_components.rs",
"003_component_from.rs",
"004_working_example.rs",
"boolean_assignment_error.rs",
"debug_macro_output.rs",
];
let phantom_examples : Vec< &str > = documented_examples
.iter()
.filter( | doc_example | !example_files.contains( &doc_example.to_string() ) )
.copied()
.collect();
assert!(
phantom_examples.is_empty(),
"Examples documented but don't exist:\n{}\n\
Either create these examples or remove them from examples/readme.md",
phantom_examples.join( "\n" )
);
println!( "✅ All {} examples properly documented", example_files.len() );
}