qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v4 08/14] tests: Add QAPI optional discriminator tes


From: Max Reitz
Subject: [Qemu-devel] [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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]