mirror of https://gitee.com/openkylin/qemu.git
tests/qapi-schema: Test for good feature lists in structs
Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20190606153803.5278-3-armbru@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
6a8c0b5102
commit
8aa3a33e44
|
@ -242,3 +242,42 @@
|
||||||
{ 'foo': 'TestIfStruct',
|
{ 'foo': 'TestIfStruct',
|
||||||
'bar': { 'type': ['TestIfEnum'], 'if': 'defined(TEST_IF_EVT_BAR)' } },
|
'bar': { 'type': ['TestIfEnum'], 'if': 'defined(TEST_IF_EVT_BAR)' } },
|
||||||
'if': 'defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)' }
|
'if': 'defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)' }
|
||||||
|
|
||||||
|
# test 'features' for structs
|
||||||
|
|
||||||
|
{ 'struct': 'FeatureStruct0',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [] }
|
||||||
|
{ 'struct': 'FeatureStruct1',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [ 'feature1' ] }
|
||||||
|
{ 'struct': 'FeatureStruct2',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [ { 'name': 'feature1' } ] }
|
||||||
|
{ 'struct': 'FeatureStruct3',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [ 'feature1', 'feature2' ] }
|
||||||
|
{ 'struct': 'FeatureStruct4',
|
||||||
|
'data': { 'namespace-test': 'int' },
|
||||||
|
'features': [ 'namespace-test', 'int', 'name', 'if' ] }
|
||||||
|
|
||||||
|
{ 'struct': 'CondFeatureStruct1',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [ { 'name': 'feature1', 'if': 'defined(TEST_IF_FEATURE_1)'} ] }
|
||||||
|
{ 'struct': 'CondFeatureStruct2',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [ { 'name': 'feature1', 'if': 'defined(TEST_IF_FEATURE_1)'},
|
||||||
|
{ 'name': 'feature2', 'if': 'defined(TEST_IF_FEATURE_2)'} ] }
|
||||||
|
{ 'struct': 'CondFeatureStruct3',
|
||||||
|
'data': { 'foo': 'int' },
|
||||||
|
'features': [ { 'name': 'feature1', 'if': [ 'defined(TEST_IF_COND_1)',
|
||||||
|
'defined(TEST_IF_COND_2)'] } ] }
|
||||||
|
{ 'command': 'test-features',
|
||||||
|
'data': { 'fs0': 'FeatureStruct0',
|
||||||
|
'fs1': 'FeatureStruct1',
|
||||||
|
'fs2': 'FeatureStruct2',
|
||||||
|
'fs3': 'FeatureStruct3',
|
||||||
|
'fs4': 'FeatureStruct4',
|
||||||
|
'cfs1': 'CondFeatureStruct1',
|
||||||
|
'cfs2': 'CondFeatureStruct2',
|
||||||
|
'cfs3': 'CondFeatureStruct3' } }
|
||||||
|
|
|
@ -354,3 +354,46 @@ object q_obj_TestIfEvent-arg
|
||||||
event TestIfEvent q_obj_TestIfEvent-arg
|
event TestIfEvent q_obj_TestIfEvent-arg
|
||||||
boxed=False
|
boxed=False
|
||||||
if ['defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)']
|
if ['defined(TEST_IF_EVT) && defined(TEST_IF_STRUCT)']
|
||||||
|
object FeatureStruct0
|
||||||
|
member foo: int optional=False
|
||||||
|
object FeatureStruct1
|
||||||
|
member foo: int optional=False
|
||||||
|
feature feature1
|
||||||
|
object FeatureStruct2
|
||||||
|
member foo: int optional=False
|
||||||
|
feature feature1
|
||||||
|
object FeatureStruct3
|
||||||
|
member foo: int optional=False
|
||||||
|
feature feature1
|
||||||
|
feature feature2
|
||||||
|
object FeatureStruct4
|
||||||
|
member namespace-test: int optional=False
|
||||||
|
feature namespace-test
|
||||||
|
feature int
|
||||||
|
feature name
|
||||||
|
feature if
|
||||||
|
object CondFeatureStruct1
|
||||||
|
member foo: int optional=False
|
||||||
|
feature feature1
|
||||||
|
if ['defined(TEST_IF_FEATURE_1)']
|
||||||
|
object CondFeatureStruct2
|
||||||
|
member foo: int optional=False
|
||||||
|
feature feature1
|
||||||
|
if ['defined(TEST_IF_FEATURE_1)']
|
||||||
|
feature feature2
|
||||||
|
if ['defined(TEST_IF_FEATURE_2)']
|
||||||
|
object CondFeatureStruct3
|
||||||
|
member foo: int optional=False
|
||||||
|
feature feature1
|
||||||
|
if ['defined(TEST_IF_COND_1)', 'defined(TEST_IF_COND_2)']
|
||||||
|
object q_obj_test-features-arg
|
||||||
|
member fs0: FeatureStruct0 optional=False
|
||||||
|
member fs1: FeatureStruct1 optional=False
|
||||||
|
member fs2: FeatureStruct2 optional=False
|
||||||
|
member fs3: FeatureStruct3 optional=False
|
||||||
|
member fs4: FeatureStruct4 optional=False
|
||||||
|
member cfs1: CondFeatureStruct1 optional=False
|
||||||
|
member cfs2: CondFeatureStruct2 optional=False
|
||||||
|
member cfs3: CondFeatureStruct3 optional=False
|
||||||
|
command test-features q_obj_test-features-arg -> None
|
||||||
|
gen=True success_response=True boxed=False oob=False preconfig=False
|
||||||
|
|
|
@ -49,6 +49,10 @@ def visit_object_type(self, name, info, ifcond, base, members, variants,
|
||||||
self._print_if(m.ifcond, 8)
|
self._print_if(m.ifcond, 8)
|
||||||
self._print_variants(variants)
|
self._print_variants(variants)
|
||||||
self._print_if(ifcond)
|
self._print_if(ifcond)
|
||||||
|
if features:
|
||||||
|
for f in features:
|
||||||
|
print(' feature %s' % f.name)
|
||||||
|
self._print_if(f.ifcond, 8)
|
||||||
|
|
||||||
def visit_alternate_type(self, name, info, ifcond, variants):
|
def visit_alternate_type(self, name, info, ifcond, variants):
|
||||||
print('alternate %s' % name)
|
print('alternate %s' % name)
|
||||||
|
|
|
@ -43,6 +43,14 @@ void qmp_user_def_cmd1(UserDefOne * ud1, Error **errp)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qmp_test_features(FeatureStruct0 *fs0, FeatureStruct1 *fs1,
|
||||||
|
FeatureStruct2 *fs2, FeatureStruct3 *fs3,
|
||||||
|
FeatureStruct4 *fs4, CondFeatureStruct1 *cfs1,
|
||||||
|
CondFeatureStruct2 *cfs2, CondFeatureStruct3 *cfs3,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
UserDefTwo *qmp_user_def_cmd2(UserDefOne *ud1a,
|
UserDefTwo *qmp_user_def_cmd2(UserDefOne *ud1a,
|
||||||
bool has_udb1, UserDefOne *ud1b,
|
bool has_udb1, UserDefOne *ud1b,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
|
|
Loading…
Reference in New Issue