use super::*;
#[ test ]
fn glob_module_accessible()
{
use the_module::glob;
let glob_fn: fn( &str ) -> Result< glob::Paths, glob::PatternError > = glob::glob;
assert!( glob_fn( "*.nonexistent_extension_xyz" ).is_ok() );
}
#[ test ]
fn glob_types_accessible()
{
use the_module::glob::{ Pattern, MatchOptions, GlobError, PatternError };
let pattern_result: Result< Pattern, PatternError > = Pattern::new( "*.rs" );
assert!( pattern_result.is_ok() );
let options = MatchOptions
{
case_sensitive : true,
require_literal_separator : false,
require_literal_leading_dot : false,
};
assert!( options.case_sensitive );
let _: Option< GlobError > = None;
}
#[ test ]
fn glob_traversal_works()
{
use the_module::glob::glob;
let pattern = concat!( env!( "CARGO_MANIFEST_DIR" ), "/Cargo.toml" );
let results: Vec< _ > = glob( pattern )
.expect( "valid pattern" )
.filter_map( Result::ok )
.collect();
assert_eq!( results.len(), 1 );
assert!( results[ 0 ].ends_with( "Cargo.toml" ) );
}
#[ test ]
fn glob_with_options_works()
{
use the_module::glob::{ glob_with, MatchOptions };
let options = MatchOptions
{
case_sensitive : true,
require_literal_separator : false,
require_literal_leading_dot : false,
};
let pattern = concat!( env!( "CARGO_MANIFEST_DIR" ), "/Cargo.toml" );
let results: Vec< _ > = glob_with( pattern, options )
.expect( "valid pattern" )
.filter_map( Result::ok )
.collect();
assert_eq!( results.len(), 1, "glob_with should find Cargo.toml" );
}
#[ test ]
fn pattern_matching_works()
{
use the_module::glob::Pattern;
let pattern = Pattern::new( "*.rs" ).expect( "valid pattern" );
assert!( pattern.matches( "lib.rs" ) );
assert!( pattern.matches( "test.rs" ) );
assert!( !pattern.matches( "Cargo.toml" ) );
assert!( pattern.matches( "src/lib.rs" ) );
}
#[ test ]
fn pattern_with_options_works()
{
use the_module::glob::{ Pattern, MatchOptions };
let pattern = Pattern::new( "*.RS" ).expect( "valid pattern" );
let case_sensitive = MatchOptions
{
case_sensitive : true,
require_literal_separator : false,
require_literal_leading_dot : false,
};
let case_insensitive = MatchOptions
{
case_sensitive : false,
require_literal_separator : false,
require_literal_leading_dot : false,
};
assert!( !pattern.matches_with( "lib.rs", case_sensitive ) );
assert!( pattern.matches_with( "lib.rs", case_insensitive ) );
}
#[ test ]
fn pattern_escape_works()
{
use the_module::glob::Pattern;
let escaped = Pattern::escape( "test[1].rs" );
let pattern = Pattern::new( &escaped ).expect( "valid pattern" );
assert!( pattern.matches( "test[1].rs" ) );
assert!( !pattern.matches( "test1.rs" ) );
}
#[ test ]
fn recursive_glob_pattern_works()
{
use the_module::glob::glob;
let pattern = concat!( env!( "CARGO_MANIFEST_DIR" ), "/src/**/*.rs" );
let results: Vec< _ > = glob( pattern )
.expect( "valid pattern" )
.filter_map( Result::ok )
.collect();
assert!( results.len() >= 2, "Should find at least 2 .rs files in src/" );
for path in &results
{
assert!(
path.extension().is_some_and( | ext | ext == "rs" ),
"All matched files should have .rs extension: {path:?}"
);
}
}
#[ test ]
fn dependency_namespace_accessible()
{
use the_module::dependency::glob;
let glob_fn: fn( &str ) -> Result< glob::Paths, glob::PatternError > = glob::glob;
assert!( glob_fn( "*.nonexistent_extension_xyz" ).is_ok() );
}