#[ test ]
fn test_all_examples_documented_in_readme()
{
let examples_dir = std::path::Path::new( env!( "CARGO_MANIFEST_DIR" ) )
.join( "examples" );
let readme_path = examples_dir.join( "readme.md" );
let entries = std::fs::read_dir( &examples_dir )
.expect( "Failed to read examples directory" );
let mut example_files = Vec::new();
for entry in entries
{
let entry = entry.expect( "Failed to read directory entry" );
let filename = entry.file_name();
let filename_str = filename.to_string_lossy().to_string();
if std::path::Path::new( &filename_str )
.extension()
.is_some_and( | ext | ext.eq_ignore_ascii_case( "rs" ) )
{
example_files.push( filename_str );
}
}
let readme_content = std::fs::read_to_string( &readme_path )
.expect( "Failed to read examples/readme.md" );
let mut undocumented = Vec::new();
for example_file in &example_files
{
if !readme_content.contains( example_file )
{
undocumented.push( example_file.clone() );
}
}
assert!
(
undocumented.is_empty(),
"Found {} example(s) not documented in examples/readme.md:\n{}\n\n\
Please add these examples to the readme with appropriate descriptions.",
undocumented.len(),
undocumented.join( "\n" )
);
}
#[ test ]
fn test_readme_links_point_to_existing_files()
{
let examples_dir = std::path::Path::new( env!( "CARGO_MANIFEST_DIR" ) )
.join( "examples" );
let readme_path = examples_dir.join( "readme.md" );
let readme_content = std::fs::read_to_string( &readme_path )
.expect( "Failed to read examples/readme.md" );
let mut broken_links = Vec::new();
for line in readme_content.lines()
{
if let Some( start_idx ) = line.find( "](./" )
{
let after_link = &line[ start_idx + 4.. ]; if let Some( end_idx ) = after_link.find( ')' )
{
let filename = &after_link[ ..end_idx ];
if std::path::Path::new( filename )
.extension()
.is_some_and( | ext | ext.eq_ignore_ascii_case( "rs" ) )
{
let file_path = examples_dir.join( filename );
if !file_path.exists()
{
broken_links.push( filename.to_string() );
}
}
}
}
}
assert!
(
broken_links.is_empty(),
"Found {} broken link(s) in examples/readme.md:\n{}\n\n\
These files are referenced but don't exist.",
broken_links.len(),
broken_links.join( "\n" )
);
}