object-introspection/test/integration/inheritance_polymorphic_non_dynamic_base.toml
Thierry Treyer d232a5d2fb Add namespaces to integration tests' "typeName"
Some integration tests have not been updated since drgn started
reporting type names with all their namespaces, and were failing.
2024-01-11 14:13:51 +01:00

197 lines
6.0 KiB
TOML

includes = ["vector"]
definitions = '''
class A {
public:
int int_a;
};
class B : public A {
public:
virtual ~B() = default;
virtual void myfunc() {}
std::vector<int> vec_b;
};
class C : public B {
public:
virtual ~C() = default;
virtual void myfunc() override {}
int int_c;
};
'''
[cases]
[cases.a_as_a]
oil_skip = "Polymorphic inheritance disabled in OIL"
cli_options = ["-fpolymorphic-inheritance"]
param_types = ["const A&"]
arg_types = ["A"]
setup = "return {};"
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::A",
"staticSize":4,
"dynamicSize":0,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0}
]}]'''
[cases.a_no_polymorphic]
param_types = ["const A&"]
arg_types = ["A"]
setup = 'return {};'
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::A",
"staticSize":4,
"dynamicSize":0,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0}
]}]'''
expect_json_v2 = '''[{
"typeNames":["ns_inheritance_polymorphic_non_dynamic_base::A"],
"staticSize":4,
"dynamicSize":0,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0}
]}]'''
[cases.b_as_a]
oil_skip = "Polymorphic inheritance disabled in OIL"
cli_options = ["-fpolymorphic-inheritance"]
param_types = ["const A&"]
arg_types = ["B"]
setup = '''
B b;
b.vec_b = {1,2,3};
return b;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::A",
"staticSize":4,
"dynamicSize":0,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0}
]}]'''
[cases.b_as_b]
oil_skip = "Polymorphic inheritance disabled in OIL"
cli_options = ["-fpolymorphic-inheritance"]
param_types = ["const B&"]
arg_types = ["B"]
setup = '''
B b;
b.vec_b = {1,2,3};
return b;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::B",
"staticSize":40,
"dynamicSize":12,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0},
{"staticSize":8, "dynamicSize":0},
{"name":"vec_b", "staticSize":24, "dynamicSize":12, "length":3, "capacity":3, "elementStaticSize":4}
]}]'''
[cases.b_no_polymorphic]
oil_skip = "vptr included in output when it should probably be hidden" # https://github.com/facebookexperimental/object-introspection/issues/291
param_types = ["const B&"]
arg_types = ["B"]
setup = '''
B b;
b.vec_b = {1,2,3};
return b;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::B",
"staticSize":40,
"dynamicSize":12,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0},
{"staticSize":8, "dynamicSize":0},
{"name":"vec_b", "staticSize":24, "dynamicSize":12, "length":3, "capacity":3, "elementStaticSize":4}
]}]'''
[cases.c_as_a]
oil_skip = "Polymorphic inheritance disabled in OIL"
cli_options = ["-fpolymorphic-inheritance"]
param_types = ["const A&"]
arg_types = ["C"]
setup = '''
C c;
c.vec_b = {1,2,3};
return c;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::A",
"staticSize":4,
"dynamicSize":0,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0}
]}]'''
[cases.c_as_b]
oil_skip = "Polymorphic inheritance disabled in OIL"
cli_options = ["-fpolymorphic-inheritance"]
param_types = ["const B&"]
arg_types = ["C"]
setup = '''
C c;
c.vec_b = {1,2,3};
return c;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::C",
"staticSize":48,
"dynamicSize":12,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0},
{"staticSize":8, "dynamicSize":0},
{"name":"vec_b", "staticSize":24, "dynamicSize":12, "length":3, "capacity":3, "elementStaticSize":4},
{"name":"int_c", "staticSize":4, "dynamicSize":0}
]}]'''
[cases.c_as_c]
oil_skip = "Polymorphic inheritance disabled in OIL"
cli_options = ["-fpolymorphic-inheritance"]
param_types = ["const C&"]
arg_types = ["C"]
setup = '''
C c;
c.vec_b = {1,2,3};
return c;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::C",
"staticSize":48,
"dynamicSize":12,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0},
{"staticSize":8, "dynamicSize":0},
{"name":"vec_b", "staticSize":24, "dynamicSize":12, "length":3, "capacity":3, "elementStaticSize":4},
{"name":"int_c", "staticSize":4, "dynamicSize":0}
]}]'''
[cases.c_no_polymorphic]
oil_skip = 'vptrs are included int he json output' # https://github.com/facebookexperimental/object-introspection/issues/291
param_types = ["const C&"]
arg_types = ["C"]
setup = '''
C c;
c.vec_b = {1,2,3};
return c;
'''
expect_json = '''[{
"typeName":"ns_inheritance_polymorphic_non_dynamic_base::C",
"staticSize":48,
"dynamicSize":12,
"members":[
{"name":"int_a", "staticSize":4, "dynamicSize":0},
{"staticSize":8, "dynamicSize":0},
{"name":"vec_b", "staticSize":24, "dynamicSize":12, "length":3, "capacity":3, "elementStaticSize":4},
{"name":"int_c", "staticSize":4, "dynamicSize":0}
]}]'''
expect_json_v2 = '''[{
"typeNames": ["ns_inheritance_polymorphic_non_dynamic_base::C"],
"staticSize": 48,
"exclusiveSize": 8,
"members": [
{"name":"int_a", "staticSize":4, "exclusiveSize":4},
{"staticSize":8, "exclusiveSize":8},
{"name":"vec_b", "staticSize":24, "exclusiveSize":24, "length":3, "capacity":3},
{"name":"int_c", "staticSize":4, "exclusiveSize":4}
]
}]'''