Skip to content

Commit 9ac28fc

Browse files
Add support for global structs/enums/bitmaps to YAML test harness.
1 parent b6cfeac commit 9ac28fc

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

scripts/py_matter_yamltests/matter_yamltests/definitions.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ def __init__(self, sources: List[ParseSource]):
8888
self.__responses_by_id[code][struct.code] = struct
8989
self.__responses_by_name[name][struct.name] = struct.code
9090

91+
self.__global_bitmaps: dict[str, Bitmap] = {b.name: b for b in idl.global_bitmaps}
92+
self.__global_enums: dict[str, Bitmap] = {e.name: e for e in idl.global_enums}
93+
self.__global_structs: dict[str, Bitmap] = {s.name: s for s in idl.global_structs}
94+
9195
def get_cluster_names(self) -> List[str]:
9296
return [name for name, _ in self.__clusters_by_name.items()]
9397

@@ -257,9 +261,26 @@ def __get_targets_by_cluster_name(self, cluster_name: str, target_type: _ItemTyp
257261
_ItemType.Struct: self.__structs_by_name,
258262
}
259263

264+
global_target_mapping = {
265+
_ItemType.Request: None,
266+
_ItemType.Response: None,
267+
_ItemType.Attribute: None,
268+
_ItemType.Event: None,
269+
_ItemType.Bitmap: self.__global_bitmaps,
270+
_ItemType.Enum: self.__global_enums,
271+
_ItemType.Struct: self.__global_structs,
272+
}
273+
260274
# The idl parser remove spaces
261275
cluster_name = cluster_name.replace(' ', '')
262-
return target_mapping[target_type].get(cluster_name)
276+
global_target = global_target_mapping[target_type]
277+
target = target_mapping[target_type].get(cluster_name)
278+
279+
if target is None:
280+
return global_target
281+
if global_target is None:
282+
return target
283+
return target | global_target
263284

264285

265286
def SpecDefinitionsFromPaths(paths: str, pseudo_clusters: Optional[PseudoClusters] = PseudoClusters([])):

scripts/py_matter_yamltests/test_spec_definitions.py

+36
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@
102102

103103
source_bitmap = '''<?xml version="1.0"?>
104104
<configurator>
105+
<bitmap name="TestGlobalBitmap" type="bitmap8">
106+
<field name="a" mask="0x1"/>
107+
</bitmap>
108+
105109
<bitmap name="TestBitmap" type="bitmap8">
106110
<cluster code="0x1234"/>
107111
<field name="a" mask="0x1"/>
@@ -126,6 +130,10 @@
126130

127131
source_enum = '''<?xml version="1.0"?>
128132
<configurator>
133+
<enum name="TestGlobalEnum" type="enum8">
134+
<item name="a" value="0x00"/>
135+
</enum>
136+
129137
<enum name="TestEnum" type="enum8">
130138
<cluster code="0x1234"/>
131139
<item name="a" value="0x00"/>
@@ -150,6 +158,10 @@
150158

151159
source_struct = '''<?xml version="1.0"?>
152160
<configurator>
161+
<struct name="TestGlobalStruct">
162+
<item name="a" type="boolean"/>
163+
</struct>
164+
153165
<struct name="TestStruct">
154166
<cluster code="0x1234"/>
155167
<item name="a" type="boolean"/>
@@ -310,10 +322,16 @@ def test_get_bitmap_by_name(self):
310322
[ParseSource(source=io.StringIO(source_bitmap), name='source_bitmap')])
311323
self.assertIsNone(definitions.get_bitmap_by_name(
312324
'WrongName', 'TestBitmap'))
325+
self.assertIsNone(definitions.get_bitmap_by_name(
326+
'TestWrong', 'TestBitmap'))
313327
self.assertIsNone(definitions.get_bitmap_by_name(
314328
'Test', 'TestWrongBitmap'))
315329
self.assertIsInstance(definitions.get_bitmap_by_name(
316330
'Test', 'TestBitmap'), Bitmap)
331+
self.assertIsInstance(definitions.get_bitmap_by_name(
332+
'Test', 'TestGlobalBitmap'), Bitmap)
333+
self.assertIsInstance(definitions.get_bitmap_by_name(
334+
'TestWrong', 'TestGlobalBitmap'), Bitmap)
317335
self.assertIsNone(definitions.get_bitmap_by_name('test', 'TestBitmap'))
318336
self.assertIsNone(definitions.get_bitmap_by_name('Test', 'testbitmap'))
319337

@@ -322,10 +340,16 @@ def test_get_enum_by_name(self):
322340
[ParseSource(source=io.StringIO(source_enum), name='source_enum')])
323341
self.assertIsNone(definitions.get_enum_by_name(
324342
'WrongName', 'TestEnum'))
343+
self.assertIsNone(definitions.get_enum_by_name(
344+
'TestWrong', 'TestEnum'))
325345
self.assertIsNone(definitions.get_enum_by_name(
326346
'Test', 'TestWrongEnum'))
327347
self.assertIsInstance(
328348
definitions.get_enum_by_name('Test', 'TestEnum'), Enum)
349+
self.assertIsInstance(
350+
definitions.get_enum_by_name('Test', 'TestGlobalEnum'), Enum)
351+
self.assertIsInstance(
352+
definitions.get_enum_by_name('TestWrong', 'TestGlobalEnum'), Enum)
329353
self.assertIsNone(definitions.get_enum_by_name('test', 'TestEnum'))
330354
self.assertIsNone(definitions.get_enum_by_name('Test', 'testenum'))
331355

@@ -334,10 +358,16 @@ def test_get_struct_by_name(self):
334358
[ParseSource(source=io.StringIO(source_struct), name='source_struct')])
335359
self.assertIsNone(definitions.get_struct_by_name(
336360
'WrongName', 'TestStruct'))
361+
self.assertIsNone(definitions.get_struct_by_name(
362+
'TestWrong', 'TestStruct'))
337363
self.assertIsNone(definitions.get_struct_by_name(
338364
'Test', 'TestWrongStruct'))
339365
self.assertIsInstance(definitions.get_struct_by_name(
340366
'Test', 'TestStruct'), Struct)
367+
self.assertIsInstance(definitions.get_struct_by_name(
368+
'Test', 'TestGlobalStruct'), Struct)
369+
self.assertIsInstance(definitions.get_struct_by_name(
370+
'TestWrong', 'TestGlobalStruct'), Struct)
341371
self.assertIsNone(definitions.get_struct_by_name('test', 'TestStruct'))
342372
self.assertIsNone(definitions.get_struct_by_name('Test', 'teststruct'))
343373

@@ -365,16 +395,22 @@ def test_get_type_by_name(self):
365395
[ParseSource(source=io.StringIO(source_bitmap), name='source_bitmap')])
366396
self.assertIsInstance(definitions.get_type_by_name(
367397
'Test', 'TestBitmap'), Bitmap)
398+
self.assertIsInstance(definitions.get_type_by_name(
399+
'Test', 'TestGlobalBitmap'), Bitmap)
368400

369401
definitions = SpecDefinitions(
370402
[ParseSource(source=io.StringIO(source_enum), name='source_enum')])
371403
self.assertIsInstance(
372404
definitions.get_type_by_name('Test', 'TestEnum'), Enum)
405+
self.assertIsInstance(
406+
definitions.get_type_by_name('Test', 'TestGlobalEnum'), Enum)
373407

374408
definitions = SpecDefinitions(
375409
[ParseSource(source=io.StringIO(source_struct), name='source_struct')])
376410
self.assertIsInstance(definitions.get_type_by_name(
377411
'Test', 'TestStruct'), Struct)
412+
self.assertIsInstance(definitions.get_type_by_name(
413+
'Test', 'TestGlobalStruct'), Struct)
378414

379415
def test_struct_is_fabric_scoped(self):
380416
definitions = SpecDefinitions(

0 commit comments

Comments
 (0)