qemu/tests/qapi-schema
Markus Armbruster c0644771eb qapi: Reject alternates that can't work with keyval_parse()
Alternates are sum types like unions, but use the JSON type on the
wire / QType in QObject instead of an explicit tag.  That's why we
require alternate members to have distinct QTypes.

The recently introduced keyval_parse() (commit d454dbe) can only
produce string scalars.  The qobject_input_visitor_new_keyval() input
visitor mostly hides the difference, so code using a QObject input
visitor doesn't have to care whether its input was parsed from JSON or
KEY=VALUE,...  The difference leaks for alternates, as noted in commit
0ee9ae7: a non-string, non-enum scalar alternate value can't currently
be expressed.

In part, this is just our insufficiently sophisticated implementation.
Consider alternate type 'GuestFileWhence'.  It has an integer member
and a 'QGASeek' member.  The latter is an enumeration with values
'set', 'cur', 'end'.  The meaning of b=set, b=cur, b=end, b=0, b=1 and
so forth is perfectly obvious.  However, our current implementation
falls apart at run time for b=0, b=1, and so forth.  Fixable, but not
today; add a test case and a TODO comment.

Now consider an alternate type with a string and an integer member.
What's the meaning of a=42?  Is it the string "42" or the integer 42?
Whichever meaning you pick makes the other inexpressible.  This isn't
just an implementation problem, it's fundamental.  Our current
implementation will pick string.

So far, we haven't needed such alternates.  To make sure we stop and
think before we add one that cannot sanely work with keyval_parse(),
let's require alternate members to have sufficiently distinct
representation in KEY=VALUE,... syntax:

* A string member clashes with any other scalar member

* An enumeration member clashes with bool members when it has value
  'on' or 'off'.

* An enumeration member clashes with numeric members when it has a
  value that starts with '-', '+', or a decimal digit.  This is a
  rather lazy approximation of the actual number syntax accepted by
  the visitor.

  Note that enumeration values starting with '-' and '+' are rejected
  elsewhere already, but better safe than sorry.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1495471335-23707-5-git-send-email-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2017-05-31 16:04:09 +02:00
..
include
alternate-any.err
alternate-any.exit
alternate-any.json
alternate-any.out
alternate-array.err
alternate-array.exit
alternate-array.json
alternate-array.out
alternate-base.err
alternate-base.exit
alternate-base.json
alternate-base.out
alternate-clash.err
alternate-clash.exit
alternate-clash.json tests/qapi-schema: Avoid 'str' in alternate test cases 2017-05-31 16:04:05 +02:00
alternate-clash.out
alternate-conflict-dict.err
alternate-conflict-dict.exit
alternate-conflict-dict.json qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-dict.out
alternate-conflict-enum-bool.err qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-bool.exit qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-bool.json qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-bool.out qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-int.err qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-int.exit qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-int.json qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-enum-int.out qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-string.err qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-string.exit
alternate-conflict-string.json qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
alternate-conflict-string.out
alternate-empty.err
alternate-empty.exit
alternate-empty.json
alternate-empty.out
alternate-nested.err
alternate-nested.exit
alternate-nested.json tests/qapi-schema: Avoid 'str' in alternate test cases 2017-05-31 16:04:05 +02:00
alternate-nested.out
alternate-unknown.err
alternate-unknown.exit
alternate-unknown.json
alternate-unknown.out
args-alternate.err
args-alternate.exit
args-alternate.json tests/qapi-schema: Avoid 'str' in alternate test cases 2017-05-31 16:04:05 +02:00
args-alternate.out
args-any.err
args-any.exit
args-any.json
args-any.out
args-array-empty.err
args-array-empty.exit
args-array-empty.json
args-array-empty.out
args-array-unknown.err
args-array-unknown.exit
args-array-unknown.json
args-array-unknown.out
args-bad-boxed.err
args-bad-boxed.exit
args-bad-boxed.json
args-bad-boxed.out
args-boxed-anon.err
args-boxed-anon.exit
args-boxed-anon.json
args-boxed-anon.out
args-boxed-empty.err
args-boxed-empty.exit
args-boxed-empty.json
args-boxed-empty.out
args-boxed-string.err
args-boxed-string.exit
args-boxed-string.json
args-boxed-string.out
args-int.err
args-int.exit
args-int.json
args-int.out
args-invalid.err
args-invalid.exit
args-invalid.json
args-invalid.out
args-member-array-bad.err
args-member-array-bad.exit
args-member-array-bad.json
args-member-array-bad.out
args-member-case.err
args-member-case.exit
args-member-case.json
args-member-case.out
args-member-unknown.err
args-member-unknown.exit
args-member-unknown.json
args-member-unknown.out
args-name-clash.err
args-name-clash.exit
args-name-clash.json
args-name-clash.out
args-union.err
args-union.exit
args-union.json
args-union.out
args-unknown.err
args-unknown.exit
args-unknown.json
args-unknown.out
bad-base.err
bad-base.exit
bad-base.json
bad-base.out
bad-data.err
bad-data.exit
bad-data.json
bad-data.out
bad-ident.err
bad-ident.exit
bad-ident.json
bad-ident.out
bad-type-bool.err
bad-type-bool.exit
bad-type-bool.json
bad-type-bool.out
bad-type-dict.err
bad-type-dict.exit
bad-type-dict.json
bad-type-dict.out
bad-type-int.err
bad-type-int.exit
bad-type-int.json
bad-type-int.out
base-cycle-direct.err
base-cycle-direct.exit
base-cycle-direct.json
base-cycle-direct.out
base-cycle-indirect.err
base-cycle-indirect.exit
base-cycle-indirect.json
base-cycle-indirect.out
command-int.err
command-int.exit
command-int.json
command-int.out
comments.err
comments.exit
comments.json
comments.out
doc-bad-alternate-member.err tests/qapi-schema: Improve coverage of bogus member docs 2017-03-16 07:13:03 +01:00
doc-bad-alternate-member.exit tests/qapi-schema: Improve coverage of bogus member docs 2017-03-16 07:13:03 +01:00
doc-bad-alternate-member.json tests/qapi-schema: Avoid 'str' in alternate test cases 2017-05-31 16:04:05 +02:00
doc-bad-alternate-member.out tests/qapi-schema: Improve coverage of bogus member docs 2017-03-16 07:13:03 +01:00
doc-bad-command-arg.err tests/qapi-schema: Rename doc-bad-args to doc-bad-command-arg 2017-03-16 07:13:03 +01:00
doc-bad-command-arg.exit tests/qapi-schema: Rename doc-bad-args to doc-bad-command-arg 2017-03-16 07:13:03 +01:00
doc-bad-command-arg.json tests/qapi-schema: Rename doc-bad-args to doc-bad-command-arg 2017-03-16 07:13:03 +01:00
doc-bad-command-arg.out tests/qapi-schema: Rename doc-bad-args to doc-bad-command-arg 2017-03-16 07:13:03 +01:00
doc-bad-symbol.err qapi: Move detection of doc / expression name mismatch 2017-03-16 07:13:03 +01:00
doc-bad-symbol.exit
doc-bad-symbol.json
doc-bad-symbol.out
doc-bad-union-member.err qapi: Fix detection of bogus member documentation 2017-03-16 07:13:04 +01:00
doc-bad-union-member.exit qapi: Fix detection of bogus member documentation 2017-03-16 07:13:04 +01:00
doc-bad-union-member.json tests/qapi-schema: Improve coverage of bogus member docs 2017-03-16 07:13:03 +01:00
doc-bad-union-member.out qapi: Fix detection of bogus member documentation 2017-03-16 07:13:04 +01:00
doc-before-include.err qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-include.exit qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-include.json qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-include.out qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-pragma.err qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-pragma.exit qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-pragma.json qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-before-pragma.out qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-duplicated-arg.err
doc-duplicated-arg.exit
doc-duplicated-arg.json
doc-duplicated-arg.out
doc-duplicated-return.err
doc-duplicated-return.exit
doc-duplicated-return.json
doc-duplicated-return.out
doc-duplicated-since.err
doc-duplicated-since.exit
doc-duplicated-since.json
doc-duplicated-since.out
doc-empty-arg.err
doc-empty-arg.exit
doc-empty-arg.json
doc-empty-arg.out
doc-empty-section.err qapi: Move empty doc section checking to doc parser 2017-03-16 07:13:03 +01:00
doc-empty-section.exit
doc-empty-section.json
doc-empty-section.out
doc-empty-symbol.err
doc-empty-symbol.exit
doc-empty-symbol.json
doc-empty-symbol.out
doc-good.err tests/qapi-schema: Systematic positive doc comment tests 2017-03-21 10:42:55 +01:00
doc-good.exit tests/qapi-schema: Systematic positive doc comment tests 2017-03-21 10:42:55 +01:00
doc-good.json tests/qapi-schema: Systematic positive doc comment tests 2017-03-21 10:42:55 +01:00
doc-good.out tests/qapi-schema: Systematic positive doc comment tests 2017-03-21 10:42:55 +01:00
doc-good.texi qapi2texi: Fix translation of *strong* and _emphasized_ 2017-03-21 10:42:58 +01:00
doc-interleaved-section.err
doc-interleaved-section.exit
doc-interleaved-section.json
doc-interleaved-section.out
doc-invalid-end.err
doc-invalid-end.exit
doc-invalid-end.json
doc-invalid-end.out
doc-invalid-end2.err
doc-invalid-end2.exit
doc-invalid-end2.json
doc-invalid-end2.out
doc-invalid-return.err
doc-invalid-return.exit
doc-invalid-return.json
doc-invalid-return.out
doc-invalid-section.err qapi: Improve error message on @NAME: in free-form doc 2017-03-16 07:13:03 +01:00
doc-invalid-section.exit
doc-invalid-section.json
doc-invalid-section.out
doc-invalid-start.err
doc-invalid-start.exit
doc-invalid-start.json
doc-invalid-start.out
doc-missing-colon.err
doc-missing-colon.exit
doc-missing-colon.json
doc-missing-colon.out
doc-missing-expr.err qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-missing-expr.exit
doc-missing-expr.json
doc-missing-expr.out
doc-missing-space.err
doc-missing-space.exit
doc-missing-space.json
doc-missing-space.out
doc-missing.err
doc-missing.exit
doc-missing.json
doc-missing.out
doc-no-symbol.err qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-no-symbol.exit tests/qapi-schema: Improve doc / expression mismatch coverage 2017-03-16 07:13:03 +01:00
doc-no-symbol.json qapi: Fix detection of doc / expression mismatch 2017-03-16 07:13:03 +01:00
doc-no-symbol.out tests/qapi-schema: Improve doc / expression mismatch coverage 2017-03-16 07:13:03 +01:00
double-data.err
double-data.exit
double-data.json
double-data.out
double-type.err
double-type.exit
double-type.json
double-type.out
duplicate-key.err
duplicate-key.exit
duplicate-key.json
duplicate-key.out
empty.err
empty.exit
empty.json
empty.out
enum-bad-name.err
enum-bad-name.exit
enum-bad-name.json
enum-bad-name.out
enum-bad-prefix.err
enum-bad-prefix.exit
enum-bad-prefix.json
enum-bad-prefix.out
enum-clash-member.err
enum-clash-member.exit
enum-clash-member.json
enum-clash-member.out
enum-dict-member.err
enum-dict-member.exit
enum-dict-member.json
enum-dict-member.out
enum-int-member.err
enum-int-member.exit
enum-int-member.json
enum-int-member.out
enum-member-case.err qapi: Have each QAPI schema declare its name rule violations 2017-03-16 07:13:02 +01:00
enum-member-case.exit
enum-member-case.json qapi: Have each QAPI schema declare its name rule violations 2017-03-16 07:13:02 +01:00
enum-member-case.out
enum-missing-data.err
enum-missing-data.exit
enum-missing-data.json
enum-missing-data.out
enum-wrong-data.err
enum-wrong-data.exit
enum-wrong-data.json
enum-wrong-data.out
escape-outside-string.err
escape-outside-string.exit
escape-outside-string.json
escape-outside-string.out
escape-too-big.err
escape-too-big.exit
escape-too-big.json
escape-too-big.out
escape-too-short.err
escape-too-short.exit
escape-too-short.json
escape-too-short.out
event-boxed-empty.err
event-boxed-empty.exit
event-boxed-empty.json
event-boxed-empty.out
event-case.err
event-case.exit
event-case.json
event-case.out
event-nest-struct.err
event-nest-struct.exit
event-nest-struct.json
event-nest-struct.out
flat-union-array-branch.err
flat-union-array-branch.exit
flat-union-array-branch.json
flat-union-array-branch.out
flat-union-bad-base.err
flat-union-bad-base.exit
flat-union-bad-base.json
flat-union-bad-base.out
flat-union-bad-discriminator.err
flat-union-bad-discriminator.exit
flat-union-bad-discriminator.json
flat-union-bad-discriminator.out
flat-union-base-any.err
flat-union-base-any.exit
flat-union-base-any.json
flat-union-base-any.out
flat-union-base-union.err
flat-union-base-union.exit
flat-union-base-union.json
flat-union-base-union.out
flat-union-clash-member.err
flat-union-clash-member.exit
flat-union-clash-member.json
flat-union-clash-member.out
flat-union-empty.err
flat-union-empty.exit
flat-union-empty.json
flat-union-empty.out
flat-union-incomplete-branch.err
flat-union-incomplete-branch.exit
flat-union-incomplete-branch.json
flat-union-incomplete-branch.out
flat-union-inline.err
flat-union-inline.exit
flat-union-inline.json
flat-union-inline.out
flat-union-int-branch.err
flat-union-int-branch.exit
flat-union-int-branch.json
flat-union-int-branch.out
flat-union-invalid-branch-key.err
flat-union-invalid-branch-key.exit
flat-union-invalid-branch-key.json
flat-union-invalid-branch-key.out
flat-union-invalid-discriminator.err
flat-union-invalid-discriminator.exit
flat-union-invalid-discriminator.json
flat-union-invalid-discriminator.out
flat-union-no-base.err
flat-union-no-base.exit
flat-union-no-base.json
flat-union-no-base.out
flat-union-optional-discriminator.err
flat-union-optional-discriminator.exit
flat-union-optional-discriminator.json
flat-union-optional-discriminator.out
flat-union-string-discriminator.err
flat-union-string-discriminator.exit
flat-union-string-discriminator.json
flat-union-string-discriminator.out
funny-char.err
funny-char.exit
funny-char.json
funny-char.out
ident-with-escape.err
ident-with-escape.exit
ident-with-escape.json
ident-with-escape.out
include-before-err.err
include-before-err.exit
include-before-err.json
include-before-err.out
include-cycle-b.json
include-cycle-c.json
include-cycle.err
include-cycle.exit
include-cycle.json
include-cycle.out
include-extra-junk.err
include-extra-junk.exit
include-extra-junk.json
include-extra-junk.out
include-format-err.err
include-format-err.exit
include-format-err.json
include-format-err.out
include-nested-err.err
include-nested-err.exit
include-nested-err.json
include-nested-err.out
include-no-file.err
include-no-file.exit
include-no-file.json
include-no-file.out
include-non-file.err
include-non-file.exit
include-non-file.json
include-non-file.out
include-relpath-sub.json
include-relpath.err
include-relpath.exit
include-relpath.json
include-relpath.out
include-repetition-sub.json
include-repetition.err
include-repetition.exit
include-repetition.json
include-repetition.out
include-self-cycle.err
include-self-cycle.exit
include-self-cycle.json
include-self-cycle.out
include-simple-sub.json
include-simple.err
include-simple.exit
include-simple.json
include-simple.out
indented-expr.err
indented-expr.exit
indented-expr.json
indented-expr.out
leading-comma-list.err
leading-comma-list.exit
leading-comma-list.json
leading-comma-list.out
leading-comma-object.err
leading-comma-object.exit
leading-comma-object.json
leading-comma-object.out
missing-colon.err
missing-colon.exit
missing-colon.json
missing-colon.out
missing-comma-list.err
missing-comma-list.exit
missing-comma-list.json
missing-comma-list.out
missing-comma-object.err
missing-comma-object.exit
missing-comma-object.json
missing-comma-object.out
missing-type.err
missing-type.exit
missing-type.json
missing-type.out
nested-struct-data.err
nested-struct-data.exit
nested-struct-data.json
nested-struct-data.out
non-objects.err
non-objects.exit
non-objects.json
non-objects.out
pragma-doc-required-crap.err
pragma-doc-required-crap.exit
pragma-doc-required-crap.json
pragma-doc-required-crap.out
pragma-extra-junk.err
pragma-extra-junk.exit
pragma-extra-junk.json
pragma-extra-junk.out
pragma-name-case-whitelist-crap.err qapi: Have each QAPI schema declare its name rule violations 2017-03-16 07:13:02 +01:00
pragma-name-case-whitelist-crap.exit qapi: Have each QAPI schema declare its name rule violations 2017-03-16 07:13:02 +01:00
pragma-name-case-whitelist-crap.json qapi: Have each QAPI schema declare its name rule violations 2017-03-16 07:13:02 +01:00
pragma-name-case-whitelist-crap.out qapi: Have each QAPI schema declare its name rule violations 2017-03-16 07:13:02 +01:00
pragma-non-dict.err
pragma-non-dict.exit
pragma-non-dict.json
pragma-non-dict.out
pragma-returns-whitelist-crap.err qapi: Have each QAPI schema declare its returns white-list 2017-03-16 07:13:02 +01:00
pragma-returns-whitelist-crap.exit qapi: Have each QAPI schema declare its returns white-list 2017-03-16 07:13:02 +01:00
pragma-returns-whitelist-crap.json qapi: Have each QAPI schema declare its returns white-list 2017-03-16 07:13:02 +01:00
pragma-returns-whitelist-crap.out qapi: Have each QAPI schema declare its returns white-list 2017-03-16 07:13:02 +01:00
qapi-schema-test.err
qapi-schema-test.exit
qapi-schema-test.json qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
qapi-schema-test.out qapi: Reject alternates that can't work with keyval_parse() 2017-05-31 16:04:09 +02:00
quoted-structural-chars.err
quoted-structural-chars.exit
quoted-structural-chars.json
quoted-structural-chars.out
redefined-builtin.err
redefined-builtin.exit
redefined-builtin.json
redefined-builtin.out
redefined-command.err
redefined-command.exit
redefined-command.json
redefined-command.out
redefined-event.err
redefined-event.exit
redefined-event.json
redefined-event.out
redefined-type.err
redefined-type.exit
redefined-type.json
redefined-type.out
reserved-command-q.err
reserved-command-q.exit
reserved-command-q.json
reserved-command-q.out
reserved-enum-q.err
reserved-enum-q.exit
reserved-enum-q.json
reserved-enum-q.out
reserved-member-has.err
reserved-member-has.exit
reserved-member-has.json
reserved-member-has.out
reserved-member-q.err
reserved-member-q.exit
reserved-member-q.json
reserved-member-q.out
reserved-member-u.err
reserved-member-u.exit
reserved-member-u.json
reserved-member-u.out
reserved-member-underscore.err
reserved-member-underscore.exit
reserved-member-underscore.json
reserved-member-underscore.out
reserved-type-kind.err
reserved-type-kind.exit
reserved-type-kind.json
reserved-type-kind.out
reserved-type-list.err
reserved-type-list.exit
reserved-type-list.json
reserved-type-list.out
returns-alternate.err
returns-alternate.exit
returns-alternate.json tests/qapi-schema: Avoid 'str' in alternate test cases 2017-05-31 16:04:05 +02:00
returns-alternate.out
returns-array-bad.err
returns-array-bad.exit
returns-array-bad.json
returns-array-bad.out
returns-dict.err
returns-dict.exit
returns-dict.json
returns-dict.out
returns-unknown.err
returns-unknown.exit
returns-unknown.json
returns-unknown.out
returns-whitelist.err qapi: Have each QAPI schema declare its returns white-list 2017-03-16 07:13:02 +01:00
returns-whitelist.exit
returns-whitelist.json qapi: Have each QAPI schema declare its returns white-list 2017-03-16 07:13:02 +01:00
returns-whitelist.out
struct-base-clash-deep.err
struct-base-clash-deep.exit
struct-base-clash-deep.json
struct-base-clash-deep.out
struct-base-clash.err
struct-base-clash.exit
struct-base-clash.json
struct-base-clash.out
struct-data-invalid.err
struct-data-invalid.exit
struct-data-invalid.json
struct-data-invalid.out
struct-member-invalid.err
struct-member-invalid.exit
struct-member-invalid.json
struct-member-invalid.out
test-qapi.py tests/qapi-schema: Make test-qapi.py print docs again 2017-03-21 10:42:52 +01:00
trailing-comma-list.err qapi: Fix a misleading parser error message 2017-03-16 07:13:04 +01:00
trailing-comma-list.exit
trailing-comma-list.json
trailing-comma-list.out
trailing-comma-object.err
trailing-comma-object.exit
trailing-comma-object.json
trailing-comma-object.out
type-bypass-bad-gen.err
type-bypass-bad-gen.exit
type-bypass-bad-gen.json
type-bypass-bad-gen.out
unclosed-list.err
unclosed-list.exit
unclosed-list.json
unclosed-list.out
unclosed-object.err
unclosed-object.exit
unclosed-object.json
unclosed-object.out
unclosed-string.err
unclosed-string.exit
unclosed-string.json
unclosed-string.out
unicode-str.err
unicode-str.exit
unicode-str.json
unicode-str.out
union-base-empty.err qapi: Fix to reject empty union base gracefully 2017-03-16 07:13:02 +01:00
union-base-empty.exit tests/qapi-schema: Cover empty union base 2017-03-16 07:13:02 +01:00
union-base-empty.json tests/qapi-schema: Cover empty union base 2017-03-16 07:13:02 +01:00
union-base-empty.out tests/qapi-schema: Cover empty union base 2017-03-16 07:13:02 +01:00
union-base-no-discriminator.err
union-base-no-discriminator.exit
union-base-no-discriminator.json
union-base-no-discriminator.out
union-branch-case.err
union-branch-case.exit
union-branch-case.json
union-branch-case.out
union-clash-branches.err
union-clash-branches.exit
union-clash-branches.json
union-clash-branches.out
union-empty.err
union-empty.exit
union-empty.json
union-empty.out
union-invalid-base.err
union-invalid-base.exit
union-invalid-base.json
union-invalid-base.out
union-optional-branch.err
union-optional-branch.exit
union-optional-branch.json
union-optional-branch.out
union-unknown.err
union-unknown.exit
union-unknown.json
union-unknown.out
unknown-escape.err
unknown-escape.exit
unknown-escape.json
unknown-escape.out
unknown-expr-key.err
unknown-expr-key.exit
unknown-expr-key.json
unknown-expr-key.out