diff options
Diffstat (limited to 'mingling_pathf/test/src/lib.rs')
| -rw-r--r-- | mingling_pathf/test/src/lib.rs | 164 |
1 files changed, 73 insertions, 91 deletions
diff --git a/mingling_pathf/test/src/lib.rs b/mingling_pathf/test/src/lib.rs index 95d7410..22e1cc2 100644 --- a/mingling_pathf/test/src/lib.rs +++ b/mingling_pathf/test/src/lib.rs @@ -174,33 +174,6 @@ fn test_completion_analyze() { } #[test] -fn test_pack_analyze() { - let analyzer = mingling_pathf::pattern_analyzer::init(); - let file = current_dir().unwrap().join("src/test_files/test_pack.rs"); - - let r = analyzer.analyze_file(file).unwrap(); - let required: Vec<&str> = vec![ - "::ResultPack1", - "::ErrorPack1", - "::ErrorPack2", - "::ResultPack2", - "::ErrorPack3", - "::ErrorPack4", - "::sub::ResultPack1", - "::sub::ErrorPack1", - "::sub::ErrorPack2", - "::sub::ResultPack2", - "::sub::ErrorPack3", - "::sub::ErrorPack4", - ]; - - assert_eq!(r.len(), required.len()); - for entry in &required { - assert!(r.contains(*entry), "Result should contain: {}", entry); - } -} - -#[test] fn test_group_analyze() { let analyzer = mingling_pathf::pattern_analyzer::init(); let file = current_dir().unwrap().join("src/test_files/test_group.rs"); @@ -258,17 +231,24 @@ fn test_dispatcher_analyze() { let r = analyzer.analyze_file(file).unwrap(); let required: Vec<&str> = vec![ "::EntryGreet", - "::CMDGreet", + "::__DispatcherGreet", "::EntryRemoteAdd", - "::CMDRemoteAdd", + "::__DispatcherRemoteAdd", "::EntryDelete", - "::CMDDelete", + "::__DispatcherDelete", "::EntryRemoteRm", - "::CMDRemoteRm", + "::__DispatcherRemoteRm", "::sub::EntryGreet", - "::sub::CMDGreet", + "::sub::__DispatcherGreet", "::sub::EntryDelete", - "::sub::CMDDelete", + "::sub::__DispatcherDelete", + // Dispatchers are always collected at compile time: + "::__internal_dispatcher_greet", + "::__internal_dispatcher_remote_add", + "::__internal_dispatcher_delete", + "::__internal_dispatcher_remote_rm", + "::sub::__internal_dispatcher_greet", + "::sub::__internal_dispatcher_delete", ]; assert_eq!(r.len(), required.len()); @@ -279,36 +259,29 @@ fn test_dispatcher_analyze() { #[test] fn test_dispatcher_dispatch_tree() { - use mingling_pathf::config::PathfinderConfig; use mingling_pathf::pattern_analyzer; let file = current_dir() .unwrap() .join("src/test_files/test_dispatcher_dispatch_tree.rs"); - // Without dispatch_tree: only Entry + CMD types - let r1 = pattern_analyzer::init().analyze_file(&file).unwrap(); - // 4 root (EntryGreet, CMDGreet, EntryDelete, CMDDelete) - // + 4 sub (sub::EntryGreet, sub::CMDGreet, sub::EntryDelete, sub::CMDDelete) - // = 8 - assert_eq!(r1.len(), 8); - assert!(r1.contains("::EntryGreet")); - assert!(r1.contains("::CMDGreet")); - assert!(r1.contains("::EntryDelete")); - assert!(r1.contains("::CMDDelete")); - assert!(r1.contains("::sub::EntryGreet")); - assert!(r1.contains("::sub::CMDGreet")); - - // With dispatch_tree: Entry + CMD + __internal_dispatcher - let r2 = pattern_analyzer::init_with_config(&PathfinderConfig::with_dispatch_tree()) - .analyze_file(&file) - .unwrap(); - // 8 (from above) + 2 __internal (root) + 2 __internal (sub) = 12 - assert_eq!(r2.len(), 12); - assert!(r2.contains("::__internal_dispatcher_greet")); - assert!(r2.contains("::__internal_dispatcher_delete")); - assert!(r2.contains("::sub::__internal_dispatcher_greet")); - assert!(r2.contains("::sub::__internal_dispatcher_delete")); + // Dispatchers are always collected at compile time, so the analyzer + // always extracts the hidden dispatcher structs and statics too: + // 8 (Entry + __Dispatcher, root + sub) + 4 __internal (root + sub) = 12 + let r = pattern_analyzer::init().analyze_file(&file).unwrap(); + assert_eq!(r.len(), 12); + assert!(r.contains("::EntryGreet")); + assert!(r.contains("::__DispatcherGreet")); + assert!(r.contains("::EntryDelete")); + assert!(r.contains("::__DispatcherDelete")); + assert!(r.contains("::sub::EntryGreet")); + assert!(r.contains("::sub::__DispatcherGreet")); + assert!(r.contains("::sub::EntryDelete")); + assert!(r.contains("::sub::__DispatcherDelete")); + assert!(r.contains("::__internal_dispatcher_greet")); + assert!(r.contains("::__internal_dispatcher_delete")); + assert!(r.contains("::sub::__internal_dispatcher_greet")); + assert!(r.contains("::sub::__internal_dispatcher_delete")); } #[test] @@ -325,36 +298,44 @@ fn test_dispatcher_clap_analyze() { "::EntryClap2", "::EntryClap3", "::EntryClap4", - // Root: with CMD type + // Root: with command name only "::EntryWithCmd", - "::CMDGreet", - // Root: with CMD + error + // Root: with error "::EntryWithError", - "::CMDDelete", "::ErrorDelete", - // Root: with CMD + help + // Root: with help "::EntryWithHelp", - "::CMDHelp", - "::__internal_help_cmdhelp_help", - // Root: with CMD + error + help + "::__internal_help_helpcmd_help", + // Root: with error + help "::EntryFull", - "::CMDFull", "::ErrorFull", - "::__internal_help_cmdfull_help", + "::__internal_help_full_help", // Sub: entry types (bare dispatcher_clap) "::sub::EntryClap1", "::sub::EntryClap3", - // Sub: with CMD type + // Sub: with command name only "::sub::EntryWithCmd", - "::sub::CMDGreet", - // Sub: with CMD + error + // Sub: with error "::sub::EntryWithError", - "::sub::CMDDelete", "::sub::ErrorDelete", - // Sub: with CMD + help + // Sub: with help "::sub::EntryWithHelp", - "::sub::CMDHelp", - "::sub::__internal_help_cmdhelp_help", + "::sub::__internal_help_helpcmd_help", + // Hidden dispatcher structs + statics are always collected: + "::__DispatcherGreet", + "::__internal_dispatcher_greet", + "::__DispatcherDelete", + "::__internal_dispatcher_delete", + "::__DispatcherHelpcmd", + "::__internal_dispatcher_helpcmd", + "::__DispatcherFull", + "::__internal_dispatcher_full", + "::sub::__DispatcherGreet", + "::sub::__internal_dispatcher_greet", + "::sub::__DispatcherDelete", + "::sub::__internal_dispatcher_delete", + "::sub::__DispatcherHelpcmd", + "::sub::__internal_dispatcher_helpcmd", ]; assert_eq!(r.len(), required.len()); @@ -365,29 +346,30 @@ fn test_dispatcher_clap_analyze() { #[test] fn test_dispatcher_clap_dispatch_tree() { - use mingling_pathf::config::PathfinderConfig; use mingling_pathf::pattern_analyzer; let file = current_dir() .unwrap() .join("src/test_files/test_dispatcher_clap.rs"); - // Without dispatch_tree: 26 items (same set as test_dispatcher_clap_analyze) - let r1 = pattern_analyzer::init().analyze_file(&file).unwrap(); - assert_eq!(r1.len(), 26); - - // With dispatch_tree: 26 + 4 __internal (root) + 3 __internal (sub, no "full") = 33 - let r2 = pattern_analyzer::init_with_config(&PathfinderConfig::with_dispatch_tree()) - .analyze_file(&file) - .unwrap(); - assert_eq!(r2.len(), 33); - assert!(r2.contains("::__internal_dispatcher_greet")); - assert!(r2.contains("::__internal_dispatcher_delete")); - assert!(r2.contains("::__internal_dispatcher_helpcmd")); - assert!(r2.contains("::__internal_dispatcher_full")); - assert!(r2.contains("::sub::__internal_dispatcher_greet")); - assert!(r2.contains("::sub::__internal_dispatcher_delete")); - assert!(r2.contains("::sub::__internal_dispatcher_helpcmd")); + // Dispatchers are always collected at compile time: + // 19 (entry/error/help items) + 14 (hidden structs + statics, root + sub) = 33 + let r = pattern_analyzer::init().analyze_file(&file).unwrap(); + assert_eq!(r.len(), 33); + assert!(r.contains("::__DispatcherGreet")); + assert!(r.contains("::__internal_dispatcher_greet")); + assert!(r.contains("::__DispatcherDelete")); + assert!(r.contains("::__internal_dispatcher_delete")); + assert!(r.contains("::__DispatcherHelpcmd")); + assert!(r.contains("::__internal_dispatcher_helpcmd")); + assert!(r.contains("::__DispatcherFull")); + assert!(r.contains("::__internal_dispatcher_full")); + assert!(r.contains("::sub::__DispatcherGreet")); + assert!(r.contains("::sub::__internal_dispatcher_greet")); + assert!(r.contains("::sub::__DispatcherDelete")); + assert!(r.contains("::sub::__internal_dispatcher_delete")); + assert!(r.contains("::sub::__DispatcherHelpcmd")); + assert!(r.contains("::sub::__internal_dispatcher_helpcmd")); } #[test] |
