[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v4 08/14] tests: Add QAPI optional discriminator tes
From: |
Max Reitz |
Subject: |
[Qemu-block] [PATCH v4 08/14] tests: Add QAPI optional discriminator tests |
Date: |
Mon, 24 Jun 2019 19:39:28 +0200 |
There already is an optional discriminator test, although it also noted
the discriminator name itself as optional. This already gives us one
error test case, to which this patch adds one other, namely whether that
using an optional discriminator requires the respective field to have a
default value.
Furthermore, a passing test case is added to qapi-schema-test.
Signed-off-by: Max Reitz <address@hidden>
---
tests/Makefile.include | 3 ++-
...-optional-discriminator-invalid-specification.json | 11 +++++++++++
...flat-union-optional-discriminator-no-default.json} | 5 +++--
tests/qapi-schema/qapi-schema-test.json | 10 ++++++++++
...n-optional-discriminator-invalid-specification.err | 1 +
...optional-discriminator-invalid-specification.exit} | 0
...-optional-discriminator-invalid-specification.out} | 0
.../flat-union-optional-discriminator-no-default.err | 1 +
.../flat-union-optional-discriminator-no-default.exit | 1 +
.../flat-union-optional-discriminator-no-default.out | 0
.../qapi-schema/flat-union-optional-discriminator.err | 1 -
tests/qapi-schema/qapi-schema-test.out | 9 +++++++++
12 files changed, 38 insertions(+), 4 deletions(-)
create mode 100644
tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.json
rename tests/qapi-schema/{flat-union-optional-discriminator.json =>
flat-union-optional-discriminator-no-default.json} (68%)
create mode 100644
tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.err
rename tests/qapi-schema/{flat-union-optional-discriminator.exit =>
flat-union-optional-discriminator-invalid-specification.exit} (100%)
rename tests/qapi-schema/{flat-union-optional-discriminator.out =>
flat-union-optional-discriminator-invalid-specification.out} (100%)
create mode 100644
tests/qapi-schema/flat-union-optional-discriminator-no-default.err
create mode 100644
tests/qapi-schema/flat-union-optional-discriminator-no-default.exit
create mode 100644
tests/qapi-schema/flat-union-optional-discriminator-no-default.out
delete mode 100644 tests/qapi-schema/flat-union-optional-discriminator.err
diff --git a/tests/Makefile.include b/tests/Makefile.include
index 76dc581096..3202ddab10 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -398,7 +398,8 @@ qapi-schema += flat-union-invalid-branch-key.json
qapi-schema += flat-union-invalid-discriminator.json
qapi-schema += flat-union-invalid-if-discriminator.json
qapi-schema += flat-union-no-base.json
-qapi-schema += flat-union-optional-discriminator.json
+qapi-schema += flat-union-optional-discriminator-invalid-specification.json
+qapi-schema += flat-union-optional-discriminator-no-default.json
qapi-schema += flat-union-string-discriminator.json
qapi-schema += funny-char.json
qapi-schema += ident-with-escape.json
diff --git
a/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.json
b/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.json
new file mode 100644
index 0000000000..d20a2cd295
--- /dev/null
+++
b/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.json
@@ -0,0 +1,11 @@
+# For using optional discriminators, only the field in the base struct
+# must be marked optional, not the discriminator name itself
+{ 'enum': 'Enum', 'data': [ 'one', 'two' ] }
+{ 'struct': 'Base',
+ 'data': { '*switch': { 'type': 'Enum', 'default': 'one' } } }
+{ '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.json
b/tests/qapi-schema/flat-union-optional-discriminator-no-default.json
similarity index 68%
rename from tests/qapi-schema/flat-union-optional-discriminator.json
rename to tests/qapi-schema/flat-union-optional-discriminator-no-default.json
index 08a8f7ef8b..31ebb85afb 100644
--- a/tests/qapi-schema/flat-union-optional-discriminator.json
+++ b/tests/qapi-schema/flat-union-optional-discriminator-no-default.json
@@ -1,10 +1,11 @@
-# we require the discriminator to be non-optional
+# Using an optional discriminator requires the respective field to
+# have a default
{ 'enum': 'Enum', 'data': [ 'one', 'two' ] }
{ 'struct': 'Base',
'data': { '*switch': 'Enum' } }
{ 'struct': 'Branch', 'data': { 'name': 'str' } }
{ 'union': 'MyUnion',
'base': 'Base',
- 'discriminator': '*switch',
+ 'discriminator': 'switch',
'data': { 'one': 'Branch',
'two': 'Branch' } }
diff --git a/tests/qapi-schema/qapi-schema-test.json
b/tests/qapi-schema/qapi-schema-test.json
index 12ae387d46..0f4b123a82 100644
--- a/tests/qapi-schema/qapi-schema-test.json
+++ b/tests/qapi-schema/qapi-schema-test.json
@@ -104,6 +104,16 @@
{ 'struct': 'UserDefC',
'data': { 'string1': 'str', 'string2': 'str' } }
+# for testing unions with an optional discriminator
+{ 'union': 'UserDefFlatUnion3',
+ 'base': { '*enum1': { 'type': 'EnumOne', 'default': 'value1' } },
+ 'discriminator': 'enum1',
+ 'data': { 'value1' : 'UserDefA',
+ 'value2' : 'UserDefB',
+ 'value3' : 'UserDefB'
+ # 'value4' defaults to empty
+ } }
+
# for testing use of 'number' within alternates
{ 'alternate': 'AltEnumBool', 'data': { 'e': 'EnumOne', 'b': 'bool' } }
{ 'alternate': 'AltEnumNum', 'data': { 'e': 'EnumOne', 'n': 'number' } }
diff --git
a/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.err
b/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.err
new file mode 100644
index 0000000000..cbf154e726
--- /dev/null
+++
b/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.err
@@ -0,0 +1 @@
+tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.json:7:
Discriminator of flat union 'MyUnion' does not allow optional name '*switch'
diff --git a/tests/qapi-schema/flat-union-optional-discriminator.exit
b/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.exit
similarity index 100%
rename from tests/qapi-schema/flat-union-optional-discriminator.exit
rename to
tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.exit
diff --git a/tests/qapi-schema/flat-union-optional-discriminator.out
b/tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.out
similarity index 100%
rename from tests/qapi-schema/flat-union-optional-discriminator.out
rename to
tests/qapi-schema/flat-union-optional-discriminator-invalid-specification.out
diff --git a/tests/qapi-schema/flat-union-optional-discriminator-no-default.err
b/tests/qapi-schema/flat-union-optional-discriminator-no-default.err
new file mode 100644
index 0000000000..5a022a0bc7
--- /dev/null
+++ b/tests/qapi-schema/flat-union-optional-discriminator-no-default.err
@@ -0,0 +1 @@
+tests/qapi-schema/flat-union-optional-discriminator-no-default.json:7:
Optional discriminator 'switch' has no default value
diff --git
a/tests/qapi-schema/flat-union-optional-discriminator-no-default.exit
b/tests/qapi-schema/flat-union-optional-discriminator-no-default.exit
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/tests/qapi-schema/flat-union-optional-discriminator-no-default.exit
@@ -0,0 +1 @@
+1
diff --git a/tests/qapi-schema/flat-union-optional-discriminator-no-default.out
b/tests/qapi-schema/flat-union-optional-discriminator-no-default.out
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/qapi-schema/flat-union-optional-discriminator.err
b/tests/qapi-schema/flat-union-optional-discriminator.err
deleted file mode 100644
index aaabedb3bd..0000000000
--- a/tests/qapi-schema/flat-union-optional-discriminator.err
+++ /dev/null
@@ -1 +0,0 @@
-tests/qapi-schema/flat-union-optional-discriminator.json:6: Discriminator of
flat union 'MyUnion' does not allow optional name '*switch'
diff --git a/tests/qapi-schema/qapi-schema-test.out
b/tests/qapi-schema/qapi-schema-test.out
index 724276f5de..3729736747 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -96,6 +96,15 @@ alternate UserDefAlternate
object UserDefC
member string1: str optional=False
member string2: str optional=False
+object q_obj_UserDefFlatUnion3-base
+ member enum1: EnumOne optional=True default=value1
+object UserDefFlatUnion3
+ base q_obj_UserDefFlatUnion3-base
+ tag enum1
+ case value1: UserDefA
+ case value2: UserDefB
+ case value3: UserDefB
+ case value4: q_empty
alternate AltEnumBool
tag type
case e: EnumOne
--
2.21.0
- [Qemu-block] [PATCH v4 00/14] block: Try to create well-typed json:{} filenames, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 01/14] qapi: Parse numeric values, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 02/14] qapi: Move to_c_string() to common.py, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 04/14] qapi: Allow optional discriminators, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 05/14] qapi: Document default values for struct members, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 03/14] qapi: Introduce default values for struct members, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 06/14] test-qapi: Print struct members' default values, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 10/14] qapi: Formalize qcow encryption probing, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 09/14] qapi: Formalize qcow2 encryption probing, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 08/14] tests: Add QAPI optional discriminator tests,
Max Reitz <=
- [Qemu-block] [PATCH v4 13/14] iotests: qcow2's encrypt.format is now optional, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 07/14] tests: Test QAPI default values for struct members, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 11/14] block: Try to create well typed json:{} filenames, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 12/14] iotests: Test internal option typing, Max Reitz, 2019/06/24
- [Qemu-block] [PATCH v4 14/14] block: Make use of QAPI defaults, Max Reitz, 2019/06/24
- Re: [Qemu-block] [Qemu-devel] [PATCH v4 00/14] block: Try to create well-typed json:{} filenames, no-reply, 2019/06/24
- Re: [Qemu-block] [Qemu-devel] [PATCH v4 00/14] block: Try to create well-typed json:{} filenames, no-reply, 2019/06/24