@@ -72,3 +72,44 @@ fn array() {
7272
7373 assert_eq ! ( field. ty( ) , Type :: ArrayFixed ( Box :: new( Type :: U8 ) , 512 ) ) ;
7474}
75+
76+ #[ test]
77+ fn nested ( ) {
78+ let index =
79+ reader:: TypeIndex :: read ( "../../../libs/bindgen/default/Windows.Win32.winmd" ) . unwrap ( ) ;
80+
81+ let def = index
82+ . types ( )
83+ . find ( |def| def. name ( ) == "D3D10_BUFFER_RTV" )
84+ . unwrap ( ) ;
85+
86+ let fields: Vec < reader:: Field > = def. fields ( ) . collect ( ) ;
87+ assert_eq ! ( fields. len( ) , 2 ) ;
88+
89+ assert_eq ! ( fields[ 0 ] . name( ) , "Anonymous1" ) ;
90+ assert_eq ! ( fields[ 1 ] . name( ) , "Anonymous2" ) ;
91+
92+ assert_eq ! ( fields[ 0 ] . ty( ) , Type :: named( "" , "_Anonymous1_e__Union" ) ) ;
93+ assert_eq ! ( fields[ 1 ] . ty( ) , Type :: named( "" , "_Anonymous2_e__Union" ) ) ;
94+
95+ let types: Vec < reader:: TypeDef > = index. nested ( def) . collect ( ) ;
96+ assert_eq ! ( types. len( ) , 2 ) ;
97+
98+ assert_eq ! ( types[ 0 ] . namespace( ) , "" ) ;
99+ assert_eq ! ( types[ 1 ] . namespace( ) , "" ) ;
100+
101+ assert_eq ! ( types[ 0 ] . name( ) , "_Anonymous1_e__Union" ) ;
102+ assert_eq ! ( types[ 1 ] . name( ) , "_Anonymous2_e__Union" ) ;
103+
104+ let fields: Vec < reader:: Field > = types[ 0 ] . fields ( ) . collect ( ) ;
105+ assert_eq ! ( fields. len( ) , 2 ) ;
106+
107+ assert_eq ! ( fields[ 0 ] . name( ) , "FirstElement" ) ;
108+ assert_eq ! ( fields[ 1 ] . name( ) , "ElementOffset" ) ;
109+
110+ let fields: Vec < reader:: Field > = types[ 1 ] . fields ( ) . collect ( ) ;
111+ assert_eq ! ( fields. len( ) , 2 ) ;
112+
113+ assert_eq ! ( fields[ 0 ] . name( ) , "NumElements" ) ;
114+ assert_eq ! ( fields[ 1 ] . name( ) , "ElementWidth" ) ;
115+ }
0 commit comments