+++ /dev/null
-flat-union-array-branch.json: In union 'TestUnion':
-flat-union-array-branch.json:8: 'data' member 'value1' cannot be an array
+++ /dev/null
-# we require union branches to be a struct
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'Base',
- 'data': { 'enum1': 'TestEnum' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'union': 'TestUnion',
- 'base': 'Base',
- 'discriminator': 'enum1',
- 'data': { 'value1': ['TestTypeB'],
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-bad-base.json: In union 'TestUnion':
-flat-union-bad-base.json:8: member 'string' of type 'TestTypeA' collides with base member 'string'
+++ /dev/null
-# we allow anonymous base, but enforce no duplicate keys
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'union': 'TestUnion',
- 'base': { 'enum1': 'TestEnum', 'string': 'str' },
- 'discriminator': 'enum1',
- 'data': { 'value1': 'TestTypeA',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-bad-discriminator.json: In union 'TestUnion':
-flat-union-bad-discriminator.json:11: 'discriminator' requires a string name
+++ /dev/null
-# we require the discriminator to be a string naming a base-type member
-# this tests the old syntax for anonymous unions before we added alternates
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'TestBase',
- 'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'union': 'TestUnion',
- 'base': 'TestBase',
- 'discriminator': {},
- 'data': { 'kind1': 'TestTypeA',
- 'kind2': 'TestTypeB' } }
+++ /dev/null
-flat-union-base-any.json: In union 'TestUnion':
-flat-union-base-any.json:8: 'base' requires a struct type, built-in type 'any' isn't
+++ /dev/null
-# we require the base to be an existing struct
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'union': 'TestUnion',
- 'base': 'any',
- 'discriminator': 'enum1',
- 'data': { 'value1': 'TestTypeA',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-base-union.json: In union 'TestUnion':
-flat-union-base-union.json:17: 'base' requires a struct type, union type 'UnionBase' isn't
+++ /dev/null
-# For now, we require the base to be a struct without variants
-# TODO: It would be possible to allow a union as a base, as long as all
-# permutations of QMP names exposed by base do not clash with any QMP
-# member names added by local variants.
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'enum': 'Enum', 'data': [ 'kind1', 'kind2' ] }
-{ 'union': 'UnionBase',
- 'base': { 'type': 'Enum' },
- 'discriminator': 'type',
- 'data': { 'kind1': 'TestTypeA',
- 'kind2': 'TestTypeB' } }
-{ 'union': 'TestUnion',
- 'base': 'UnionBase',
- 'discriminator': 'type',
- 'data': { 'kind1': 'TestTypeA',
- 'kind2': 'TestTypeB' } }
+++ /dev/null
-flat-union-clash-member.json: In union 'TestUnion':
-flat-union-clash-member.json:11: member 'name' of type 'Branch1' collides with member 'name' of type 'Base'
+++ /dev/null
-# We check for no duplicate keys between branch members and base
-# base's member 'name' clashes with Branch1's
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'Base',
- 'data': { 'enum1': 'TestEnum', '*name': 'str' } }
-{ 'struct': 'Branch1',
- 'data': { 'name': 'str' } }
-{ 'struct': 'Branch2',
- 'data': { 'value': 'int' } }
-{ 'union': 'TestUnion',
- 'base': 'Base',
- 'discriminator': 'enum1',
- 'data': { 'value1': 'Branch1',
- 'value2': 'Branch2' } }
+++ /dev/null
-flat-union-discriminator-bad-name.json: In union 'MyUnion':
-flat-union-discriminator-bad-name.json:6: discriminator '*switch' is not a member of 'base'
+++ /dev/null
-# discriminator '*switch' isn't a member of base, 'switch' is
-{ 'enum': 'Enum', 'data': [ 'one', 'two' ] }
-{ 'struct': 'Base',
- 'data': { '*switch': 'Enum' } }
-{ 'struct': 'Branch', 'data': { 'name': 'str' } }
-{ 'union': 'MyUnion',
- 'base': 'Base',
- 'discriminator': '*switch',
- 'data': { 'one': 'Branch',
- 'two': 'Branch' } }
+++ /dev/null
-flat-union-empty.json: In union 'Union':
-flat-union-empty.json:4: union has no branches
+++ /dev/null
-# union discriminator enum cannot be empty
-{ 'enum': 'Empty', 'data': [ ] }
-{ 'struct': 'Base', 'data': { 'type': 'Empty' } }
-{ 'union': 'Union', 'base': 'Base', 'discriminator': 'type', 'data': { } }
+++ /dev/null
-flat-union-inline-invalid-dict.json: In union 'TestUnion':
-flat-union-inline-invalid-dict.json:7: 'data' member 'value1' misses key 'type'
+++ /dev/null
-# union 'data' member with dict value is (longhand) branch
-# definition, not inline complex type
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'Base',
- 'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
-{ 'union': 'TestUnion',
- 'base': 'Base',
- 'discriminator': 'enum1',
- 'data': { 'value1': { 'string': 'str' },
- 'value2': { 'integer': 'int' } } }
+++ /dev/null
-flat-union-int-branch.json: In union 'TestUnion':
-flat-union-int-branch.json:8: branch 'value1' cannot use built-in type 'int'
+++ /dev/null
-# we require union branches to be a struct
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-{ 'struct': 'Base',
- 'data': { 'enum1': 'TestEnum' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'union': 'TestUnion',
- 'base': 'Base',
- 'discriminator': 'enum1',
- 'data': { 'value1': 'int',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-invalid-branch-key.json: In union 'TestUnion':
-flat-union-invalid-branch-key.json:13: branch 'value_wrong' is not a value of enum type 'TestEnum'
+++ /dev/null
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-
-{ 'struct': 'TestBase',
- 'data': { 'enum1': 'TestEnum' } }
-
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-
-{ 'union': 'TestUnion',
- 'base': 'TestBase',
- 'discriminator': 'enum1',
- 'data': { 'value_wrong': 'TestTypeA',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-invalid-discriminator.json: In union 'TestUnion':
-flat-union-invalid-discriminator.json:10: discriminator 'enum_wrong' is not a member of 'base'
+++ /dev/null
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-
-{ 'union': 'TestUnion',
- 'base': { 'enum1': 'TestEnum' },
- 'discriminator': 'enum_wrong',
- 'data': { 'value1': 'TestTypeA',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-invalid-if-discriminator.json: In union 'TestUnion':
-flat-union-invalid-if-discriminator.json:10: discriminator member 'enum1' of 'base' must not be conditional
+++ /dev/null
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-
-{ 'union': 'TestUnion',
- 'base': { 'enum1': { 'type': 'TestEnum', 'if': 'FOO' } },
- 'discriminator': 'enum1',
- 'data': { 'value1': 'TestTypeA',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-no-base.json: In union 'TestUnion':
-flat-union-no-base.json:8: union misses key 'base'
+++ /dev/null
-# unions require a base
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-{ 'enum': 'Enum',
- 'data': [ 'value1', 'value2' ] }
-{ 'union': 'TestUnion',
- 'discriminator': 'Enum',
- 'data': { 'value1': 'TestTypeA',
- 'value2': 'TestTypeB' } }
+++ /dev/null
-flat-union-optional-discriminator.json: In union 'MyUnion':
-flat-union-optional-discriminator.json:6: discriminator member 'switch' of base type 'Base' must not be optional
+++ /dev/null
-# we require the discriminator to be non-optional
-{ 'enum': 'Enum', 'data': [ 'one', 'two' ] }
-{ 'struct': 'Base',
- 'data': { '*switch': 'Enum' } }
-{ 'struct': 'Branch', 'data': { 'name': 'str' } }
-{ 'union': 'MyUnion',
- 'base': 'Base',
- 'discriminator': 'switch',
- 'data': { 'one': 'Branch',
- 'two': 'Branch' } }
+++ /dev/null
-flat-union-string-discriminator.json: In union 'TestUnion':
-flat-union-string-discriminator.json:13: discriminator member 'kind' of base type 'TestBase' must be of enum type
+++ /dev/null
-{ 'enum': 'TestEnum',
- 'data': [ 'value1', 'value2' ] }
-
-{ 'struct': 'TestBase',
- 'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
-
-{ 'struct': 'TestTypeA',
- 'data': { 'string': 'str' } }
-
-{ 'struct': 'TestTypeB',
- 'data': { 'integer': 'int' } }
-
-{ 'union': 'TestUnion',
- 'base': 'TestBase',
- 'discriminator': 'kind',
- 'data': { 'kind1': 'TestTypeA',
- 'kind2': 'TestTypeB' } }
'features-name-bad-type.json',
'features-no-list.json',
'features-unknown-key.json',
- 'flat-union-array-branch.json',
- 'flat-union-bad-base.json',
- 'flat-union-bad-discriminator.json',
- 'flat-union-base-any.json',
- 'flat-union-base-union.json',
- 'flat-union-clash-member.json',
- 'flat-union-discriminator-bad-name.json',
- 'flat-union-empty.json',
- 'flat-union-inline-invalid-dict.json',
- 'flat-union-int-branch.json',
- 'flat-union-invalid-branch-key.json',
- 'flat-union-invalid-discriminator.json',
- 'flat-union-invalid-if-discriminator.json',
- 'flat-union-no-base.json',
- 'flat-union-optional-discriminator.json',
- 'flat-union-string-discriminator.json',
'funny-char.json',
'funny-word.json',
'ident-with-escape.json',
'unclosed-list.json',
'unclosed-object.json',
'unclosed-string.json',
+ 'union-array-branch.json',
+ 'union-bad-base.json',
+ 'union-bad-discriminator.json',
+ 'union-base-any.json',
'union-base-empty.json',
'union-base-no-discriminator.json',
+ 'union-base-union.json',
'union-branch-if-invalid.json',
'union-branch-invalid-dict.json',
+ 'union-clash-member.json',
+ 'union-discriminator-bad-name.json',
+ 'union-empty.json',
+ 'union-inline-invalid-dict.json',
+ 'union-int-branch.json',
'union-invalid-base.json',
+ 'union-invalid-branch-key.json',
'union-invalid-data.json',
+ 'union-invalid-discriminator.json',
+ 'union-invalid-if-discriminator.json',
+ 'union-no-base.json',
+ 'union-optional-discriminator.json',
+ 'union-string-discriminator.json',
'union-unknown.json',
'unknown-escape.json',
'unknown-expr-key.json',
--- /dev/null
+union-array-branch.json: In union 'TestUnion':
+union-array-branch.json:8: 'data' member 'value1' cannot be an array
--- /dev/null
+# we require union branches to be a struct
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'Base',
+ 'data': { 'enum1': 'TestEnum' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'union': 'TestUnion',
+ 'base': 'Base',
+ 'discriminator': 'enum1',
+ 'data': { 'value1': ['TestTypeB'],
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-bad-base.json: In union 'TestUnion':
+union-bad-base.json:8: member 'string' of type 'TestTypeA' collides with base member 'string'
--- /dev/null
+# we allow anonymous base, but enforce no duplicate keys
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'union': 'TestUnion',
+ 'base': { 'enum1': 'TestEnum', 'string': 'str' },
+ 'discriminator': 'enum1',
+ 'data': { 'value1': 'TestTypeA',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-bad-discriminator.json: In union 'TestUnion':
+union-bad-discriminator.json:11: 'discriminator' requires a string name
--- /dev/null
+# we require the discriminator to be a string naming a base-type member
+# this tests the old syntax for anonymous unions before we added alternates
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'TestBase',
+ 'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'union': 'TestUnion',
+ 'base': 'TestBase',
+ 'discriminator': {},
+ 'data': { 'kind1': 'TestTypeA',
+ 'kind2': 'TestTypeB' } }
--- /dev/null
+union-base-any.json: In union 'TestUnion':
+union-base-any.json:8: 'base' requires a struct type, built-in type 'any' isn't
--- /dev/null
+# we require the base to be an existing struct
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'union': 'TestUnion',
+ 'base': 'any',
+ 'discriminator': 'enum1',
+ 'data': { 'value1': 'TestTypeA',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-base-union.json: In union 'TestUnion':
+union-base-union.json:17: 'base' requires a struct type, union type 'UnionBase' isn't
--- /dev/null
+# For now, we require the base to be a struct without variants
+# TODO: It would be possible to allow a union as a base, as long as all
+# permutations of QMP names exposed by base do not clash with any QMP
+# member names added by local variants.
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'enum': 'Enum', 'data': [ 'kind1', 'kind2' ] }
+{ 'union': 'UnionBase',
+ 'base': { 'type': 'Enum' },
+ 'discriminator': 'type',
+ 'data': { 'kind1': 'TestTypeA',
+ 'kind2': 'TestTypeB' } }
+{ 'union': 'TestUnion',
+ 'base': 'UnionBase',
+ 'discriminator': 'type',
+ 'data': { 'kind1': 'TestTypeA',
+ 'kind2': 'TestTypeB' } }
--- /dev/null
+union-clash-member.json: In union 'TestUnion':
+union-clash-member.json:11: member 'name' of type 'Branch1' collides with member 'name' of type 'Base'
--- /dev/null
+# We check for no duplicate keys between branch members and base
+# base's member 'name' clashes with Branch1's
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'Base',
+ 'data': { 'enum1': 'TestEnum', '*name': 'str' } }
+{ 'struct': 'Branch1',
+ 'data': { 'name': 'str' } }
+{ 'struct': 'Branch2',
+ 'data': { 'value': 'int' } }
+{ 'union': 'TestUnion',
+ 'base': 'Base',
+ 'discriminator': 'enum1',
+ 'data': { 'value1': 'Branch1',
+ 'value2': 'Branch2' } }
--- /dev/null
+union-discriminator-bad-name.json: In union 'MyUnion':
+union-discriminator-bad-name.json:6: discriminator '*switch' is not a member of 'base'
--- /dev/null
+# discriminator '*switch' isn't a member of base, 'switch' is
+{ 'enum': 'Enum', 'data': [ 'one', 'two' ] }
+{ 'struct': 'Base',
+ 'data': { '*switch': 'Enum' } }
+{ 'struct': 'Branch', 'data': { 'name': 'str' } }
+{ 'union': 'MyUnion',
+ 'base': 'Base',
+ 'discriminator': '*switch',
+ 'data': { 'one': 'Branch',
+ 'two': 'Branch' } }
--- /dev/null
+union-empty.json: In union 'Union':
+union-empty.json:4: union has no branches
--- /dev/null
+# union discriminator enum cannot be empty
+{ 'enum': 'Empty', 'data': [ ] }
+{ 'struct': 'Base', 'data': { 'type': 'Empty' } }
+{ 'union': 'Union', 'base': 'Base', 'discriminator': 'type', 'data': { } }
--- /dev/null
+union-inline-invalid-dict.json: In union 'TestUnion':
+union-inline-invalid-dict.json:7: 'data' member 'value1' misses key 'type'
--- /dev/null
+# union 'data' member with dict value is (longhand) branch
+# definition, not inline complex type
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'Base',
+ 'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
+{ 'union': 'TestUnion',
+ 'base': 'Base',
+ 'discriminator': 'enum1',
+ 'data': { 'value1': { 'string': 'str' },
+ 'value2': { 'integer': 'int' } } }
--- /dev/null
+union-int-branch.json: In union 'TestUnion':
+union-int-branch.json:8: branch 'value1' cannot use built-in type 'int'
--- /dev/null
+# we require union branches to be a struct
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'struct': 'Base',
+ 'data': { 'enum1': 'TestEnum' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'union': 'TestUnion',
+ 'base': 'Base',
+ 'discriminator': 'enum1',
+ 'data': { 'value1': 'int',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-invalid-branch-key.json: In union 'TestUnion':
+union-invalid-branch-key.json:13: branch 'value_wrong' is not a value of enum type 'TestEnum'
--- /dev/null
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+
+{ 'struct': 'TestBase',
+ 'data': { 'enum1': 'TestEnum' } }
+
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+
+{ 'union': 'TestUnion',
+ 'base': 'TestBase',
+ 'discriminator': 'enum1',
+ 'data': { 'value_wrong': 'TestTypeA',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-invalid-discriminator.json: In union 'TestUnion':
+union-invalid-discriminator.json:10: discriminator 'enum_wrong' is not a member of 'base'
--- /dev/null
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+
+{ 'union': 'TestUnion',
+ 'base': { 'enum1': 'TestEnum' },
+ 'discriminator': 'enum_wrong',
+ 'data': { 'value1': 'TestTypeA',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-invalid-if-discriminator.json: In union 'TestUnion':
+union-invalid-if-discriminator.json:10: discriminator member 'enum1' of 'base' must not be conditional
--- /dev/null
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+
+{ 'union': 'TestUnion',
+ 'base': { 'enum1': { 'type': 'TestEnum', 'if': 'FOO' } },
+ 'discriminator': 'enum1',
+ 'data': { 'value1': 'TestTypeA',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-no-base.json: In union 'TestUnion':
+union-no-base.json:8: union misses key 'base'
--- /dev/null
+# unions require a base
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+{ 'enum': 'Enum',
+ 'data': [ 'value1', 'value2' ] }
+{ 'union': 'TestUnion',
+ 'discriminator': 'Enum',
+ 'data': { 'value1': 'TestTypeA',
+ 'value2': 'TestTypeB' } }
--- /dev/null
+union-optional-discriminator.json: In union 'MyUnion':
+union-optional-discriminator.json:6: discriminator member 'switch' of base type 'Base' must not be optional
--- /dev/null
+# we require the discriminator to be non-optional
+{ 'enum': 'Enum', 'data': [ 'one', 'two' ] }
+{ 'struct': 'Base',
+ 'data': { '*switch': 'Enum' } }
+{ 'struct': 'Branch', 'data': { 'name': 'str' } }
+{ 'union': 'MyUnion',
+ 'base': 'Base',
+ 'discriminator': 'switch',
+ 'data': { 'one': 'Branch',
+ 'two': 'Branch' } }
--- /dev/null
+union-string-discriminator.json: In union 'TestUnion':
+union-string-discriminator.json:13: discriminator member 'kind' of base type 'TestBase' must be of enum type
--- /dev/null
+{ 'enum': 'TestEnum',
+ 'data': [ 'value1', 'value2' ] }
+
+{ 'struct': 'TestBase',
+ 'data': { 'enum1': 'TestEnum', 'kind': 'str' } }
+
+{ 'struct': 'TestTypeA',
+ 'data': { 'string': 'str' } }
+
+{ 'struct': 'TestTypeB',
+ 'data': { 'integer': 'int' } }
+
+{ 'union': 'TestUnion',
+ 'base': 'TestBase',
+ 'discriminator': 'kind',
+ 'data': { 'kind1': 'TestTypeA',
+ 'kind2': 'TestTypeB' } }