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 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
 | 
				
			|||||||
            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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user