@@ -48,3 +48,81 @@ impl<'a> NamespaceEntries<'a> {
48
48
root
49
49
}
50
50
}
51
+
52
+ #[ cfg( test) ]
53
+ mod tests {
54
+ use super :: NamespaceEntries ;
55
+ use crate :: syntax:: namespace:: Namespace ;
56
+ use crate :: syntax:: { Api , Doc , ExternType , Pair } ;
57
+ use proc_macro2:: { Ident , Span } ;
58
+ use syn:: Token ;
59
+
60
+ #[ test]
61
+ fn test_ns_entries_sort ( ) {
62
+ let entries = vec ! [
63
+ make_api( None , "C" ) ,
64
+ make_api( None , "A" ) ,
65
+ make_api( Some ( "G" ) , "E" ) ,
66
+ make_api( Some ( "D" ) , "F" ) ,
67
+ make_api( Some ( "G" ) , "H" ) ,
68
+ make_api( Some ( "D::K" ) , "L" ) ,
69
+ make_api( Some ( "D::K" ) , "M" ) ,
70
+ make_api( None , "B" ) ,
71
+ make_api( Some ( "D" ) , "I" ) ,
72
+ make_api( Some ( "D" ) , "J" ) ,
73
+ ] ;
74
+ let ns = NamespaceEntries :: new ( & entries) ;
75
+ let root_entries = ns. entries ( ) ;
76
+ assert_eq ! ( root_entries. len( ) , 3 ) ;
77
+ assert_ident ( root_entries[ 0 ] , "C" ) ;
78
+ assert_ident ( root_entries[ 1 ] , "A" ) ;
79
+ assert_ident ( root_entries[ 2 ] , "B" ) ;
80
+ let mut kids = ns. children ( ) ;
81
+ let ( d_id, d_nse) = kids. next ( ) . unwrap ( ) ;
82
+ assert_eq ! ( d_id. to_string( ) , "D" ) ;
83
+ let ( g_id, g_nse) = kids. next ( ) . unwrap ( ) ;
84
+ assert_eq ! ( g_id. to_string( ) , "G" ) ;
85
+ assert ! ( kids. next( ) . is_none( ) ) ;
86
+ let d_nse_entries = d_nse. entries ( ) ;
87
+ assert_eq ! ( d_nse_entries. len( ) , 3 ) ;
88
+ assert_ident ( d_nse_entries[ 0 ] , "F" ) ;
89
+ assert_ident ( d_nse_entries[ 1 ] , "I" ) ;
90
+ assert_ident ( d_nse_entries[ 2 ] , "J" ) ;
91
+ let g_nse_entries = g_nse. entries ( ) ;
92
+ assert_eq ! ( g_nse_entries. len( ) , 2 ) ;
93
+ assert_ident ( g_nse_entries[ 0 ] , "E" ) ;
94
+ assert_ident ( g_nse_entries[ 1 ] , "H" ) ;
95
+ let mut g_kids = g_nse. children ( ) ;
96
+ assert ! ( g_kids. next( ) . is_none( ) ) ;
97
+ let mut d_kids = d_nse. children ( ) ;
98
+ let ( k_id, k_nse) = d_kids. next ( ) . unwrap ( ) ;
99
+ assert_eq ! ( k_id. to_string( ) , "K" ) ;
100
+ let k_nse_entries = k_nse. entries ( ) ;
101
+ assert_eq ! ( k_nse_entries. len( ) , 2 ) ;
102
+ assert_ident ( k_nse_entries[ 0 ] , "L" ) ;
103
+ assert_ident ( k_nse_entries[ 1 ] , "M" ) ;
104
+ }
105
+
106
+ fn assert_ident ( api : & Api , expected : & str ) {
107
+ if let Api :: CxxType ( cxx_type) = api {
108
+ assert_eq ! ( cxx_type. ident. cxx. ident. to_string( ) , expected) ;
109
+ } else {
110
+ unreachable ! ( )
111
+ }
112
+ }
113
+
114
+ fn make_api ( ns : Option < & str > , ident : & str ) -> Api {
115
+ let ns = match ns {
116
+ Some ( st) => Namespace :: from_str ( st) ,
117
+ None => Namespace :: none ( ) ,
118
+ } ;
119
+ let ident = Pair :: new ( ns, Ident :: new ( ident, Span :: call_site ( ) ) ) ;
120
+ Api :: CxxType ( ExternType {
121
+ doc : Doc :: new ( ) ,
122
+ type_token : Token ! [ type ] ( Span :: call_site ( ) ) ,
123
+ ident,
124
+ semi_token : Token ! [ ; ] ( Span :: call_site ( ) ) ,
125
+ trusted : true ,
126
+ } )
127
+ }
128
+ }
0 commit comments