use test_tools_local::*; tests_impls! { fn dependencies_check() { let manifest_dir = std::path::PathBuf::from( env!( "CARGO_MANIFEST_DIR" ) ); let mut manifest_path = manifest_dir.clone(); manifest_path.push( "Cargo.toml" ); let read = std::fs::read_to_string( &manifest_path ).unwrap(); let manifest = read.parse::< toml_edit::Document >().unwrap(); let dependencies = &manifest[ "dependencies" ]; let root_dirs = [ "alias", "move", "rust" ]; let non_existed = root_dirs.iter().filter_map( | path | { let mut current_root = manifest_dir.clone(); current_root.push( ".." ); current_root.push( ".." ); current_root.push( path ); let current_root = current_root.canonicalize().unwrap(); let dirs = std::fs::read_dir( ¤t_root ).unwrap(); let mut missed = vec![]; for p in dirs { let entry = p.unwrap(); let file_type = entry.file_type().unwrap(); if file_type.is_dir() { let dependency_name = entry.file_name().into_string().unwrap(); let mut local_dependency_name = dependency_name.clone(); local_dependency_name.push_str( "_local" ); if !local_dependency_name.starts_with( '_' ) { if dependencies.get( &local_dependency_name ).is_none() { missed.push( ( path, dependency_name ) ); } } } } if missed.len() > 0 { return Some( missed ); } None }).collect::< Vec< _ > >(); /* */ if non_existed.len() > 0 { let header = format! ( "\nManifest of integration test at {:?} has some missed dependencies.\nPlease, insert next code to the manifest:\n```", manifest_path.to_str().unwrap() ); let mut msg = String::from( header ); for v in non_existed { for ( root, dependency ) in v { let dependencies_string = format! ( " {dep}_local = {{ version = \"*\", path = \"../../{root}/{dep}\", package = \"{dep}\" }} {dep}_published = {{ version = \"*\", package = \"{dep}\" }} ", root = root, dep = dependency ); msg.push_str( &dependencies_string ); } } msg.push_str( "```\n" ); assert!( false, "{}", &msg ); } } } tests_index! { dependencies_check, }