@@ -17,20 +17,26 @@ impl ParseCallbacks for ItemDiscovery {
17
17
self . 0 . borrow_mut ( ) . insert ( _id, _item) ;
18
18
}
19
19
}
20
- # [ test ]
21
- pub fn test_item_discovery_callback ( ) {
20
+
21
+ fn test_item_discovery_callback ( header : & str , expected : HashMap < DiscoveredItemId , DiscoveredItem > ) {
22
22
let discovery = ItemDiscovery :: default ( ) ;
23
23
let info = Rc :: clone ( & discovery. 0 ) ;
24
24
25
+ let mut header_path = env ! ( "CARGO_MANIFEST_DIR" ) . to_string ( ) ;
26
+ header_path. push_str ( header) ;
27
+
25
28
Builder :: default ( )
26
- . header ( concat ! (
27
- env!( "CARGO_MANIFEST_DIR" ) ,
28
- "/tests/parse_callbacks/item_discovery_callback/header_item_discovery.h"
29
- ) )
29
+ . header ( header_path)
30
30
. parse_callbacks ( Box :: new ( discovery) )
31
31
. generate ( )
32
32
. expect ( "TODO: panic message" ) ;
33
33
34
+
35
+ compare_item_caches ( & info. borrow ( ) , & expected) ;
36
+ }
37
+
38
+ #[ test]
39
+ fn test_item_discovery_callback_c ( ) {
34
40
let expected = ItemCache :: from ( [
35
41
(
36
42
DiscoveredItemId :: new ( 10 ) ,
@@ -87,9 +93,38 @@ pub fn test_item_discovery_callback() {
87
93
final_name : "_bindgen_ty_*" . to_string ( ) ,
88
94
} ,
89
95
) ,
96
+ (
97
+ DiscoveredItemId :: new ( 41 ) ,
98
+ DiscoveredItem :: Function {
99
+ final_name : "named_function" . to_string ( ) ,
100
+ } ,
101
+ ) ,
90
102
] ) ;
103
+ test_item_discovery_callback (
104
+ "/tests/parse_callbacks/item_discovery_callback/header_item_discovery.h" , expected) ;
105
+ }
91
106
92
- compare_item_caches ( & info. borrow ( ) , & expected) ;
107
+
108
+ #[ test]
109
+ fn test_item_discovery_callback_cpp ( ) {
110
+ let expected = ItemCache :: from ( [
111
+ (
112
+ DiscoveredItemId :: new ( 1 ) ,
113
+ DiscoveredItem :: Struct {
114
+ original_name : Some ( "SomeClass" . to_string ( ) ) ,
115
+ final_name : "SomeClass" . to_string ( ) ,
116
+ } ,
117
+ ) ,
118
+ (
119
+ DiscoveredItemId :: new ( 2 ) ,
120
+ DiscoveredItem :: Method {
121
+ final_name : "named_method" . to_string ( ) ,
122
+ parent : DiscoveredItemId :: new ( 1 ) ,
123
+ } ,
124
+ ) ,
125
+ ] ) ;
126
+ test_item_discovery_callback (
127
+ "/tests/parse_callbacks/item_discovery_callback/header_item_discovery.hpp" , expected) ;
93
128
}
94
129
95
130
pub fn compare_item_caches ( generated : & ItemCache , expected : & ItemCache ) {
@@ -142,6 +177,12 @@ fn compare_item_info(
142
177
DiscoveredItem :: Enum { .. } => {
143
178
compare_enum_info ( expected_item, generated_item)
144
179
}
180
+ DiscoveredItem :: Function { .. } => {
181
+ compare_function_info ( expected_item, generated_item)
182
+ }
183
+ DiscoveredItem :: Method { .. } => {
184
+ compare_method_info ( expected_item, generated_item)
185
+ }
145
186
}
146
187
}
147
188
@@ -279,3 +320,57 @@ pub fn compare_alias_info(
279
320
280
321
compare_item_info ( expected_aliased, generated_aliased, expected, generated)
281
322
}
323
+
324
+ pub fn compare_function_info (
325
+ expected_item : & DiscoveredItem ,
326
+ generated_item : & DiscoveredItem ,
327
+ ) -> bool {
328
+ let DiscoveredItem :: Function {
329
+ final_name : expected_final_name,
330
+ } = expected_item
331
+ else {
332
+ unreachable ! ( )
333
+ } ;
334
+
335
+ let DiscoveredItem :: Function {
336
+ final_name : generated_final_name,
337
+ } = generated_item
338
+ else {
339
+ unreachable ! ( )
340
+ } ;
341
+
342
+ if !compare_names ( expected_final_name, generated_final_name) {
343
+ return false ;
344
+ }
345
+ true
346
+ }
347
+
348
+ pub fn compare_method_info (
349
+ expected_item : & DiscoveredItem ,
350
+ generated_item : & DiscoveredItem ,
351
+ ) -> bool {
352
+ let DiscoveredItem :: Method {
353
+ final_name : expected_final_name,
354
+ parent : expected_parent,
355
+ } = expected_item
356
+ else {
357
+ unreachable ! ( )
358
+ } ;
359
+
360
+ let DiscoveredItem :: Method {
361
+ final_name : generated_final_name,
362
+ parent : generated_parent,
363
+ } = generated_item
364
+ else {
365
+ unreachable ! ( )
366
+ } ;
367
+
368
+ if expected_parent != generated_parent {
369
+ return false ;
370
+ }
371
+
372
+ if !compare_names ( expected_final_name, generated_final_name) {
373
+ return false ;
374
+ }
375
+ true
376
+ }
0 commit comments