# TODO: The dynamic union tests should be updated when tagged union support is in: # https://github.com/facebookexperimental/object-introspection/issues/234 thrift_definitions = ''' union StaticUnion { 1: i32 a; 2: i32 b; 3: i32 c; } union DynamicUnion { 1: i32 n; 2: list vec; } ''' raw_definitions = ''' namespace cpp2 { void StaticUnion::__fbthrift_clear() {} void DynamicUnion::__fbthrift_clear() {} DynamicUnion::~DynamicUnion() {} } ''' [cases] [cases.static] param_types = ["const cpp2::StaticUnion&"] setup = ''' cpp2::StaticUnion ret; return ret; ''' expect_json = '''[{ "staticSize":8, "dynamicSize":0, "members":[ {"typeName":"cpp2::StaticUnion::storage_type", "name":"value_", "staticSize":4}, {"typeName":"underlying_type_t", "name":"type_", "staticSize":4} ]}]''' expect_json_v2 = '''[{ "staticSize":8, "exclusiveSize":0, "size":8, "members":[ {"typeNames":["cpp2::StaticUnion::storage_type"], "name":"value_", "staticSize":4, "exclusiveSize":4, "size":4}, {"typeNames":["underlying_type_t", "type", "int32_t"], "name":"type_", "staticSize":4, "exclusiveSize":4, "size":4} ]}]''' [cases.dynamic_int] param_types = ["const cpp2::DynamicUnion&"] setup = ''' cpp2::DynamicUnion ret; ret.set_n(123); return ret; ''' expect_json = '''[{ "staticSize":32, "dynamicSize":0, "members":[ {"typeName":"cpp2::DynamicUnion::storage_type", "name":"value_", "staticSize":24}, {"typeName":"underlying_type_t", "name":"type_", "staticSize":4} ]}]''' expect_json_v2 = '''[{ "staticSize":32, "exclusiveSize":4, "size":32, "members":[ {"typeNames":["cpp2::DynamicUnion::storage_type"], "name":"value_", "staticSize":24, "exclusiveSize":24, "size":24}, {"typeNames":["underlying_type_t", "type", "int32_t"], "name":"type_", "staticSize":4, "exclusiveSize":4, "size":4} ]}]''' [cases.dynamic_vec] param_types = ["const cpp2::DynamicUnion&"] setup = ''' cpp2::DynamicUnion ret; ret.set_vec({1,2,3}); return ret; ''' expect_json = '''[{ "staticSize":32, "dynamicSize":0, "members":[ {"typeName":"cpp2::DynamicUnion::storage_type", "name":"value_", "staticSize":24}, {"typeName":"underlying_type_t", "name":"type_", "staticSize":4} ]}]''' expect_json_v2 = '''[{ "staticSize":32, "exclusiveSize":4, "size":32, "members":[ {"typeNames":["cpp2::DynamicUnion::storage_type"], "name":"value_", "staticSize":24, "exclusiveSize":24, "size":24}, {"typeNames":["underlying_type_t", "type", "int32_t"], "name":"type_", "staticSize":4, "exclusiveSize":4, "size":4} ]}]'''