definitions = ''' namespace nsA { struct C { int a; }; } namespace nsB { struct C { int b; }; } template class CustomAllocator: public std::allocator { }; // Naming conflict will only work if OI deletes the allocator field for vector struct Foo { std::vector> v1; std::vector> v2; }; ''' includes = ["vector"] [cases] [cases.a] oil_skip = "oil gets the exclusive size of vector subfields wrong" # https://github.com/facebookexperimental/object-introspection/issues/301 param_types = ["const Foo&"] setup = ''' Foo foo; foo.v1.resize(1); foo.v2.resize(2); return {foo}; ''' expect_json = '''[{ "staticSize":48, "dynamicSize":12, "members":[ {"name":"v1", "staticSize":24, "dynamicSize":4, "length":1, "capacity":1, "elementStaticSize":4, "members":[ {"name":"", "typeName": "C", "staticSize":4, "dynamicSize":0, "members":[ {"name":"a", "typeName": "int", "staticSize":4, "dynamicSize":0} ]} ]}, {"name":"v2", "staticSize":24, "dynamicSize":8, "length":2, "capacity":2, "elementStaticSize":4, "members":[ {"name":"", "typeName": "C", "staticSize":4, "dynamicSize":0, "members":[ {"name":"b", "typeName": "int", "staticSize":4, "dynamicSize":0} ]}, {"name":"", "typeName": "C", "staticSize":4, "dynamicSize":0, "members":[ {"name":"b", "typeName": "int", "staticSize":4, "dynamicSize":0} ]} ]} ]}]''' expect_json_v2 = '''[{ "staticSize":48, "exclusiveSize":0, "members":[ {"name":"v1", "staticSize":24, "exclusiveSize":24, "length":1, "capacity":1, "members":[ {"name":"[]", "staticSize":4, "exclusiveSize":0, "members":[ {"name":"a", "staticSize":4, "exclusiveSize":4, "members":[]} ]} ]}, {"name":"v2", "staticSize":24, "exclusiveSize":24, "length":2, "capacity":2, "members":[ {"name":"[]", "staticSize":4, "exclusiveSize":0, "members":[ {"name":"b", "staticSize":4, "exclusiveSize":4, "members":[]} ]}, {"name":"[]", "staticSize":4, "exclusiveSize":0, "members":[ {"name":"b", "staticSize":4, "exclusiveSize":4, "members":[]} ]} ]} ] }]'''