]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
tests/qapi-schema: Rename flat-union-* test cases to union-*
authorMarkus Armbruster <armbru@redhat.com>
Fri, 17 Sep 2021 14:31:33 +0000 (16:31 +0200)
committerMarkus Armbruster <armbru@redhat.com>
Mon, 27 Sep 2021 06:23:25 +0000 (08:23 +0200)
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20210917143134.412106-23-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com
97 files changed:
tests/qapi-schema/flat-union-array-branch.err [deleted file]
tests/qapi-schema/flat-union-array-branch.json [deleted file]
tests/qapi-schema/flat-union-array-branch.out [deleted file]
tests/qapi-schema/flat-union-bad-base.err [deleted file]
tests/qapi-schema/flat-union-bad-base.json [deleted file]
tests/qapi-schema/flat-union-bad-base.out [deleted file]
tests/qapi-schema/flat-union-bad-discriminator.err [deleted file]
tests/qapi-schema/flat-union-bad-discriminator.json [deleted file]
tests/qapi-schema/flat-union-bad-discriminator.out [deleted file]
tests/qapi-schema/flat-union-base-any.err [deleted file]
tests/qapi-schema/flat-union-base-any.json [deleted file]
tests/qapi-schema/flat-union-base-any.out [deleted file]
tests/qapi-schema/flat-union-base-union.err [deleted file]
tests/qapi-schema/flat-union-base-union.json [deleted file]
tests/qapi-schema/flat-union-base-union.out [deleted file]
tests/qapi-schema/flat-union-clash-member.err [deleted file]
tests/qapi-schema/flat-union-clash-member.json [deleted file]
tests/qapi-schema/flat-union-clash-member.out [deleted file]
tests/qapi-schema/flat-union-discriminator-bad-name.err [deleted file]
tests/qapi-schema/flat-union-discriminator-bad-name.json [deleted file]
tests/qapi-schema/flat-union-discriminator-bad-name.out [deleted file]
tests/qapi-schema/flat-union-empty.err [deleted file]
tests/qapi-schema/flat-union-empty.json [deleted file]
tests/qapi-schema/flat-union-empty.out [deleted file]
tests/qapi-schema/flat-union-inline-invalid-dict.err [deleted file]
tests/qapi-schema/flat-union-inline-invalid-dict.json [deleted file]
tests/qapi-schema/flat-union-inline-invalid-dict.out [deleted file]
tests/qapi-schema/flat-union-int-branch.err [deleted file]
tests/qapi-schema/flat-union-int-branch.json [deleted file]
tests/qapi-schema/flat-union-int-branch.out [deleted file]
tests/qapi-schema/flat-union-invalid-branch-key.err [deleted file]
tests/qapi-schema/flat-union-invalid-branch-key.json [deleted file]
tests/qapi-schema/flat-union-invalid-branch-key.out [deleted file]
tests/qapi-schema/flat-union-invalid-discriminator.err [deleted file]
tests/qapi-schema/flat-union-invalid-discriminator.json [deleted file]
tests/qapi-schema/flat-union-invalid-discriminator.out [deleted file]
tests/qapi-schema/flat-union-invalid-if-discriminator.err [deleted file]
tests/qapi-schema/flat-union-invalid-if-discriminator.json [deleted file]
tests/qapi-schema/flat-union-invalid-if-discriminator.out [deleted file]
tests/qapi-schema/flat-union-no-base.err [deleted file]
tests/qapi-schema/flat-union-no-base.json [deleted file]
tests/qapi-schema/flat-union-no-base.out [deleted file]
tests/qapi-schema/flat-union-optional-discriminator.err [deleted file]
tests/qapi-schema/flat-union-optional-discriminator.json [deleted file]
tests/qapi-schema/flat-union-optional-discriminator.out [deleted file]
tests/qapi-schema/flat-union-string-discriminator.err [deleted file]
tests/qapi-schema/flat-union-string-discriminator.json [deleted file]
tests/qapi-schema/flat-union-string-discriminator.out [deleted file]
tests/qapi-schema/meson.build
tests/qapi-schema/union-array-branch.err [new file with mode: 0644]
tests/qapi-schema/union-array-branch.json [new file with mode: 0644]
tests/qapi-schema/union-array-branch.out [new file with mode: 0644]
tests/qapi-schema/union-bad-base.err [new file with mode: 0644]
tests/qapi-schema/union-bad-base.json [new file with mode: 0644]
tests/qapi-schema/union-bad-base.out [new file with mode: 0644]
tests/qapi-schema/union-bad-discriminator.err [new file with mode: 0644]
tests/qapi-schema/union-bad-discriminator.json [new file with mode: 0644]
tests/qapi-schema/union-bad-discriminator.out [new file with mode: 0644]
tests/qapi-schema/union-base-any.err [new file with mode: 0644]
tests/qapi-schema/union-base-any.json [new file with mode: 0644]
tests/qapi-schema/union-base-any.out [new file with mode: 0644]
tests/qapi-schema/union-base-union.err [new file with mode: 0644]
tests/qapi-schema/union-base-union.json [new file with mode: 0644]
tests/qapi-schema/union-base-union.out [new file with mode: 0644]
tests/qapi-schema/union-clash-member.err [new file with mode: 0644]
tests/qapi-schema/union-clash-member.json [new file with mode: 0644]
tests/qapi-schema/union-clash-member.out [new file with mode: 0644]
tests/qapi-schema/union-discriminator-bad-name.err [new file with mode: 0644]
tests/qapi-schema/union-discriminator-bad-name.json [new file with mode: 0644]
tests/qapi-schema/union-discriminator-bad-name.out [new file with mode: 0644]
tests/qapi-schema/union-empty.err [new file with mode: 0644]
tests/qapi-schema/union-empty.json [new file with mode: 0644]
tests/qapi-schema/union-empty.out [new file with mode: 0644]
tests/qapi-schema/union-inline-invalid-dict.err [new file with mode: 0644]
tests/qapi-schema/union-inline-invalid-dict.json [new file with mode: 0644]
tests/qapi-schema/union-inline-invalid-dict.out [new file with mode: 0644]
tests/qapi-schema/union-int-branch.err [new file with mode: 0644]
tests/qapi-schema/union-int-branch.json [new file with mode: 0644]
tests/qapi-schema/union-int-branch.out [new file with mode: 0644]
tests/qapi-schema/union-invalid-branch-key.err [new file with mode: 0644]
tests/qapi-schema/union-invalid-branch-key.json [new file with mode: 0644]
tests/qapi-schema/union-invalid-branch-key.out [new file with mode: 0644]
tests/qapi-schema/union-invalid-discriminator.err [new file with mode: 0644]
tests/qapi-schema/union-invalid-discriminator.json [new file with mode: 0644]
tests/qapi-schema/union-invalid-discriminator.out [new file with mode: 0644]
tests/qapi-schema/union-invalid-if-discriminator.err [new file with mode: 0644]
tests/qapi-schema/union-invalid-if-discriminator.json [new file with mode: 0644]
tests/qapi-schema/union-invalid-if-discriminator.out [new file with mode: 0644]
tests/qapi-schema/union-no-base.err [new file with mode: 0644]
tests/qapi-schema/union-no-base.json [new file with mode: 0644]
tests/qapi-schema/union-no-base.out [new file with mode: 0644]
tests/qapi-schema/union-optional-discriminator.err [new file with mode: 0644]
tests/qapi-schema/union-optional-discriminator.json [new file with mode: 0644]
tests/qapi-schema/union-optional-discriminator.out [new file with mode: 0644]
tests/qapi-schema/union-string-discriminator.err [new file with mode: 0644]
tests/qapi-schema/union-string-discriminator.json [new file with mode: 0644]
tests/qapi-schema/union-string-discriminator.out [new file with mode: 0644]

diff --git a/tests/qapi-schema/flat-union-array-branch.err b/tests/qapi-schema/flat-union-array-branch.err
deleted file mode 100644 (file)
index 20a8ef1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-array-branch.json: In union 'TestUnion':
-flat-union-array-branch.json:8: 'data' member 'value1' cannot be an array
diff --git a/tests/qapi-schema/flat-union-array-branch.json b/tests/qapi-schema/flat-union-array-branch.json
deleted file mode 100644 (file)
index 6dda7ec..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-array-branch.out b/tests/qapi-schema/flat-union-array-branch.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-bad-base.err b/tests/qapi-schema/flat-union-bad-base.err
deleted file mode 100644 (file)
index e0a205a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-bad-base.json: In union 'TestUnion':
-flat-union-bad-base.json:8: member 'string' of type 'TestTypeA' collides with base member 'string'
diff --git a/tests/qapi-schema/flat-union-bad-base.json b/tests/qapi-schema/flat-union-bad-base.json
deleted file mode 100644 (file)
index 74dd421..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-bad-base.out b/tests/qapi-schema/flat-union-bad-base.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-bad-discriminator.err b/tests/qapi-schema/flat-union-bad-discriminator.err
deleted file mode 100644 (file)
index b705439..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-bad-discriminator.json: In union 'TestUnion':
-flat-union-bad-discriminator.json:11: 'discriminator' requires a string name
diff --git a/tests/qapi-schema/flat-union-bad-discriminator.json b/tests/qapi-schema/flat-union-bad-discriminator.json
deleted file mode 100644 (file)
index cd10b9d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-bad-discriminator.out b/tests/qapi-schema/flat-union-bad-discriminator.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-base-any.err b/tests/qapi-schema/flat-union-base-any.err
deleted file mode 100644 (file)
index c2d4de6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-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
diff --git a/tests/qapi-schema/flat-union-base-any.json b/tests/qapi-schema/flat-union-base-any.json
deleted file mode 100644 (file)
index fe66b71..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-base-any.out b/tests/qapi-schema/flat-union-base-any.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-base-union.err b/tests/qapi-schema/flat-union-base-union.err
deleted file mode 100644 (file)
index 3563e87..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-base-union.json: In union 'TestUnion':
-flat-union-base-union.json:17: 'base' requires a struct type, union type 'UnionBase' isn't
diff --git a/tests/qapi-schema/flat-union-base-union.json b/tests/qapi-schema/flat-union-base-union.json
deleted file mode 100644 (file)
index 82d4c96..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-base-union.out b/tests/qapi-schema/flat-union-base-union.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-clash-member.err b/tests/qapi-schema/flat-union-clash-member.err
deleted file mode 100644 (file)
index 07551e6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-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'
diff --git a/tests/qapi-schema/flat-union-clash-member.json b/tests/qapi-schema/flat-union-clash-member.json
deleted file mode 100644 (file)
index 9efc771..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-clash-member.out b/tests/qapi-schema/flat-union-clash-member.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-discriminator-bad-name.err b/tests/qapi-schema/flat-union-discriminator-bad-name.err
deleted file mode 100644 (file)
index 28be49c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-discriminator-bad-name.json: In union 'MyUnion':
-flat-union-discriminator-bad-name.json:6: discriminator '*switch' is not a member of 'base'
diff --git a/tests/qapi-schema/flat-union-discriminator-bad-name.json b/tests/qapi-schema/flat-union-discriminator-bad-name.json
deleted file mode 100644 (file)
index 3ae8c06..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-discriminator-bad-name.out b/tests/qapi-schema/flat-union-discriminator-bad-name.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-empty.err b/tests/qapi-schema/flat-union-empty.err
deleted file mode 100644 (file)
index 89b0f25..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-empty.json: In union 'Union':
-flat-union-empty.json:4: union has no branches
diff --git a/tests/qapi-schema/flat-union-empty.json b/tests/qapi-schema/flat-union-empty.json
deleted file mode 100644 (file)
index 584ed60..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# union discriminator enum cannot be empty
-{ 'enum': 'Empty', 'data': [ ] }
-{ 'struct': 'Base', 'data': { 'type': 'Empty' } }
-{ 'union': 'Union', 'base': 'Base', 'discriminator': 'type', 'data': { } }
diff --git a/tests/qapi-schema/flat-union-empty.out b/tests/qapi-schema/flat-union-empty.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-inline-invalid-dict.err b/tests/qapi-schema/flat-union-inline-invalid-dict.err
deleted file mode 100644 (file)
index 53e5416..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-inline-invalid-dict.json: In union 'TestUnion':
-flat-union-inline-invalid-dict.json:7: 'data' member 'value1' misses key 'type'
diff --git a/tests/qapi-schema/flat-union-inline-invalid-dict.json b/tests/qapi-schema/flat-union-inline-invalid-dict.json
deleted file mode 100644 (file)
index 1779712..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# 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' } } }
diff --git a/tests/qapi-schema/flat-union-inline-invalid-dict.out b/tests/qapi-schema/flat-union-inline-invalid-dict.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-int-branch.err b/tests/qapi-schema/flat-union-int-branch.err
deleted file mode 100644 (file)
index ae7f800..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-int-branch.json: In union 'TestUnion':
-flat-union-int-branch.json:8: branch 'value1' cannot use built-in type 'int'
diff --git a/tests/qapi-schema/flat-union-int-branch.json b/tests/qapi-schema/flat-union-int-branch.json
deleted file mode 100644 (file)
index 567043d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-int-branch.out b/tests/qapi-schema/flat-union-int-branch.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-invalid-branch-key.err b/tests/qapi-schema/flat-union-invalid-branch-key.err
deleted file mode 100644 (file)
index 5576a25..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-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'
diff --git a/tests/qapi-schema/flat-union-invalid-branch-key.json b/tests/qapi-schema/flat-union-invalid-branch-key.json
deleted file mode 100644 (file)
index 95ff774..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-{ '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' } }
diff --git a/tests/qapi-schema/flat-union-invalid-branch-key.out b/tests/qapi-schema/flat-union-invalid-branch-key.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-invalid-discriminator.err b/tests/qapi-schema/flat-union-invalid-discriminator.err
deleted file mode 100644 (file)
index 99bca2d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-invalid-discriminator.json: In union 'TestUnion':
-flat-union-invalid-discriminator.json:10: discriminator 'enum_wrong' is not a member of 'base'
diff --git a/tests/qapi-schema/flat-union-invalid-discriminator.json b/tests/qapi-schema/flat-union-invalid-discriminator.json
deleted file mode 100644 (file)
index c4fce97..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-{ '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' } }
diff --git a/tests/qapi-schema/flat-union-invalid-discriminator.out b/tests/qapi-schema/flat-union-invalid-discriminator.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-invalid-if-discriminator.err b/tests/qapi-schema/flat-union-invalid-if-discriminator.err
deleted file mode 100644 (file)
index 350f28d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-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
diff --git a/tests/qapi-schema/flat-union-invalid-if-discriminator.json b/tests/qapi-schema/flat-union-invalid-if-discriminator.json
deleted file mode 100644 (file)
index e49992b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-{ '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' } }
diff --git a/tests/qapi-schema/flat-union-invalid-if-discriminator.out b/tests/qapi-schema/flat-union-invalid-if-discriminator.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-no-base.err b/tests/qapi-schema/flat-union-no-base.err
deleted file mode 100644 (file)
index c60482f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-flat-union-no-base.json: In union 'TestUnion':
-flat-union-no-base.json:8: union misses key 'base'
diff --git a/tests/qapi-schema/flat-union-no-base.json b/tests/qapi-schema/flat-union-no-base.json
deleted file mode 100644 (file)
index f6fe12d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-no-base.out b/tests/qapi-schema/flat-union-no-base.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-optional-discriminator.err b/tests/qapi-schema/flat-union-optional-discriminator.err
deleted file mode 100644 (file)
index 3d60a1b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-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
diff --git a/tests/qapi-schema/flat-union-optional-discriminator.json b/tests/qapi-schema/flat-union-optional-discriminator.json
deleted file mode 100644 (file)
index 2e7f766..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# 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' } }
diff --git a/tests/qapi-schema/flat-union-optional-discriminator.out b/tests/qapi-schema/flat-union-optional-discriminator.out
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/qapi-schema/flat-union-string-discriminator.err b/tests/qapi-schema/flat-union-string-discriminator.err
deleted file mode 100644 (file)
index ff42c97..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-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
diff --git a/tests/qapi-schema/flat-union-string-discriminator.json b/tests/qapi-schema/flat-union-string-discriminator.json
deleted file mode 100644 (file)
index 8af6033..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-{ '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' } }
diff --git a/tests/qapi-schema/flat-union-string-discriminator.out b/tests/qapi-schema/flat-union-string-discriminator.out
deleted file mode 100644 (file)
index e69de29..0000000
index 85d3de148162bda382fad0ac46e5c6501454fa23..6187efbd58f60353de5098f424930c8a52188d20 100644 (file)
@@ -107,22 +107,6 @@ schemas = [
   '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',
@@ -190,12 +174,28 @@ schemas = [
   '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',
diff --git a/tests/qapi-schema/union-array-branch.err b/tests/qapi-schema/union-array-branch.err
new file mode 100644 (file)
index 0000000..5db9c17
--- /dev/null
@@ -0,0 +1,2 @@
+union-array-branch.json: In union 'TestUnion':
+union-array-branch.json:8: 'data' member 'value1' cannot be an array
diff --git a/tests/qapi-schema/union-array-branch.json b/tests/qapi-schema/union-array-branch.json
new file mode 100644 (file)
index 0000000..6dda7ec
--- /dev/null
@@ -0,0 +1,12 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-array-branch.out b/tests/qapi-schema/union-array-branch.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-bad-base.err b/tests/qapi-schema/union-bad-base.err
new file mode 100644 (file)
index 0000000..42b2ed1
--- /dev/null
@@ -0,0 +1,2 @@
+union-bad-base.json: In union 'TestUnion':
+union-bad-base.json:8: member 'string' of type 'TestTypeA' collides with base member 'string'
diff --git a/tests/qapi-schema/union-bad-base.json b/tests/qapi-schema/union-bad-base.json
new file mode 100644 (file)
index 0000000..74dd421
--- /dev/null
@@ -0,0 +1,12 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-bad-base.out b/tests/qapi-schema/union-bad-base.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-bad-discriminator.err b/tests/qapi-schema/union-bad-discriminator.err
new file mode 100644 (file)
index 0000000..7cfd470
--- /dev/null
@@ -0,0 +1,2 @@
+union-bad-discriminator.json: In union 'TestUnion':
+union-bad-discriminator.json:11: 'discriminator' requires a string name
diff --git a/tests/qapi-schema/union-bad-discriminator.json b/tests/qapi-schema/union-bad-discriminator.json
new file mode 100644 (file)
index 0000000..cd10b9d
--- /dev/null
@@ -0,0 +1,15 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-bad-discriminator.out b/tests/qapi-schema/union-bad-discriminator.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-base-any.err b/tests/qapi-schema/union-base-any.err
new file mode 100644 (file)
index 0000000..82b48bc
--- /dev/null
@@ -0,0 +1,2 @@
+union-base-any.json: In union 'TestUnion':
+union-base-any.json:8: 'base' requires a struct type, built-in type 'any' isn't
diff --git a/tests/qapi-schema/union-base-any.json b/tests/qapi-schema/union-base-any.json
new file mode 100644 (file)
index 0000000..fe66b71
--- /dev/null
@@ -0,0 +1,12 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-base-any.out b/tests/qapi-schema/union-base-any.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-base-union.err b/tests/qapi-schema/union-base-union.err
new file mode 100644 (file)
index 0000000..2bddaf6
--- /dev/null
@@ -0,0 +1,2 @@
+union-base-union.json: In union 'TestUnion':
+union-base-union.json:17: 'base' requires a struct type, union type 'UnionBase' isn't
diff --git a/tests/qapi-schema/union-base-union.json b/tests/qapi-schema/union-base-union.json
new file mode 100644 (file)
index 0000000..82d4c96
--- /dev/null
@@ -0,0 +1,21 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-base-union.out b/tests/qapi-schema/union-base-union.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-clash-member.err b/tests/qapi-schema/union-clash-member.err
new file mode 100644 (file)
index 0000000..c1f3a02
--- /dev/null
@@ -0,0 +1,2 @@
+union-clash-member.json: In union 'TestUnion':
+union-clash-member.json:11: member 'name' of type 'Branch1' collides with member 'name' of type 'Base'
diff --git a/tests/qapi-schema/union-clash-member.json b/tests/qapi-schema/union-clash-member.json
new file mode 100644 (file)
index 0000000..9efc771
--- /dev/null
@@ -0,0 +1,15 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-clash-member.out b/tests/qapi-schema/union-clash-member.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-discriminator-bad-name.err b/tests/qapi-schema/union-discriminator-bad-name.err
new file mode 100644 (file)
index 0000000..5793e9a
--- /dev/null
@@ -0,0 +1,2 @@
+union-discriminator-bad-name.json: In union 'MyUnion':
+union-discriminator-bad-name.json:6: discriminator '*switch' is not a member of 'base'
diff --git a/tests/qapi-schema/union-discriminator-bad-name.json b/tests/qapi-schema/union-discriminator-bad-name.json
new file mode 100644 (file)
index 0000000..3ae8c06
--- /dev/null
@@ -0,0 +1,10 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-discriminator-bad-name.out b/tests/qapi-schema/union-discriminator-bad-name.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-empty.err b/tests/qapi-schema/union-empty.err
new file mode 100644 (file)
index 0000000..d428439
--- /dev/null
@@ -0,0 +1,2 @@
+union-empty.json: In union 'Union':
+union-empty.json:4: union has no branches
diff --git a/tests/qapi-schema/union-empty.json b/tests/qapi-schema/union-empty.json
new file mode 100644 (file)
index 0000000..584ed60
--- /dev/null
@@ -0,0 +1,4 @@
+# union discriminator enum cannot be empty
+{ 'enum': 'Empty', 'data': [ ] }
+{ 'struct': 'Base', 'data': { 'type': 'Empty' } }
+{ 'union': 'Union', 'base': 'Base', 'discriminator': 'type', 'data': { } }
diff --git a/tests/qapi-schema/union-empty.out b/tests/qapi-schema/union-empty.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-inline-invalid-dict.err b/tests/qapi-schema/union-inline-invalid-dict.err
new file mode 100644 (file)
index 0000000..25ddf7c
--- /dev/null
@@ -0,0 +1,2 @@
+union-inline-invalid-dict.json: In union 'TestUnion':
+union-inline-invalid-dict.json:7: 'data' member 'value1' misses key 'type'
diff --git a/tests/qapi-schema/union-inline-invalid-dict.json b/tests/qapi-schema/union-inline-invalid-dict.json
new file mode 100644 (file)
index 0000000..1779712
--- /dev/null
@@ -0,0 +1,11 @@
+# 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' } } }
diff --git a/tests/qapi-schema/union-inline-invalid-dict.out b/tests/qapi-schema/union-inline-invalid-dict.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-int-branch.err b/tests/qapi-schema/union-int-branch.err
new file mode 100644 (file)
index 0000000..8fdc81e
--- /dev/null
@@ -0,0 +1,2 @@
+union-int-branch.json: In union 'TestUnion':
+union-int-branch.json:8: branch 'value1' cannot use built-in type 'int'
diff --git a/tests/qapi-schema/union-int-branch.json b/tests/qapi-schema/union-int-branch.json
new file mode 100644 (file)
index 0000000..567043d
--- /dev/null
@@ -0,0 +1,12 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-int-branch.out b/tests/qapi-schema/union-int-branch.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-invalid-branch-key.err b/tests/qapi-schema/union-invalid-branch-key.err
new file mode 100644 (file)
index 0000000..bf58800
--- /dev/null
@@ -0,0 +1,2 @@
+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'
diff --git a/tests/qapi-schema/union-invalid-branch-key.json b/tests/qapi-schema/union-invalid-branch-key.json
new file mode 100644 (file)
index 0000000..95ff774
--- /dev/null
@@ -0,0 +1,17 @@
+{ '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' } }
diff --git a/tests/qapi-schema/union-invalid-branch-key.out b/tests/qapi-schema/union-invalid-branch-key.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-invalid-discriminator.err b/tests/qapi-schema/union-invalid-discriminator.err
new file mode 100644 (file)
index 0000000..38efb24
--- /dev/null
@@ -0,0 +1,2 @@
+union-invalid-discriminator.json: In union 'TestUnion':
+union-invalid-discriminator.json:10: discriminator 'enum_wrong' is not a member of 'base'
diff --git a/tests/qapi-schema/union-invalid-discriminator.json b/tests/qapi-schema/union-invalid-discriminator.json
new file mode 100644 (file)
index 0000000..c4fce97
--- /dev/null
@@ -0,0 +1,14 @@
+{ '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' } }
diff --git a/tests/qapi-schema/union-invalid-discriminator.out b/tests/qapi-schema/union-invalid-discriminator.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-invalid-if-discriminator.err b/tests/qapi-schema/union-invalid-if-discriminator.err
new file mode 100644 (file)
index 0000000..3f41d03
--- /dev/null
@@ -0,0 +1,2 @@
+union-invalid-if-discriminator.json: In union 'TestUnion':
+union-invalid-if-discriminator.json:10: discriminator member 'enum1' of 'base' must not be conditional
diff --git a/tests/qapi-schema/union-invalid-if-discriminator.json b/tests/qapi-schema/union-invalid-if-discriminator.json
new file mode 100644 (file)
index 0000000..e49992b
--- /dev/null
@@ -0,0 +1,14 @@
+{ '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' } }
diff --git a/tests/qapi-schema/union-invalid-if-discriminator.out b/tests/qapi-schema/union-invalid-if-discriminator.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-no-base.err b/tests/qapi-schema/union-no-base.err
new file mode 100644 (file)
index 0000000..cbf12ac
--- /dev/null
@@ -0,0 +1,2 @@
+union-no-base.json: In union 'TestUnion':
+union-no-base.json:8: union misses key 'base'
diff --git a/tests/qapi-schema/union-no-base.json b/tests/qapi-schema/union-no-base.json
new file mode 100644 (file)
index 0000000..f6fe12d
--- /dev/null
@@ -0,0 +1,11 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-no-base.out b/tests/qapi-schema/union-no-base.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-optional-discriminator.err b/tests/qapi-schema/union-optional-discriminator.err
new file mode 100644 (file)
index 0000000..8d980bd
--- /dev/null
@@ -0,0 +1,2 @@
+union-optional-discriminator.json: In union 'MyUnion':
+union-optional-discriminator.json:6: discriminator member 'switch' of base type 'Base' must not be optional
diff --git a/tests/qapi-schema/union-optional-discriminator.json b/tests/qapi-schema/union-optional-discriminator.json
new file mode 100644 (file)
index 0000000..2e7f766
--- /dev/null
@@ -0,0 +1,10 @@
+# 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' } }
diff --git a/tests/qapi-schema/union-optional-discriminator.out b/tests/qapi-schema/union-optional-discriminator.out
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qapi-schema/union-string-discriminator.err b/tests/qapi-schema/union-string-discriminator.err
new file mode 100644 (file)
index 0000000..eccbe68
--- /dev/null
@@ -0,0 +1,2 @@
+union-string-discriminator.json: In union 'TestUnion':
+union-string-discriminator.json:13: discriminator member 'kind' of base type 'TestBase' must be of enum type
diff --git a/tests/qapi-schema/union-string-discriminator.json b/tests/qapi-schema/union-string-discriminator.json
new file mode 100644 (file)
index 0000000..8af6033
--- /dev/null
@@ -0,0 +1,17 @@
+{ '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' } }
diff --git a/tests/qapi-schema/union-string-discriminator.out b/tests/qapi-schema/union-string-discriminator.out
new file mode 100644 (file)
index 0000000..e69de29