| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- #!/usr/bin/env -S python3 -B
- #
- # Copyright (c) 2022 Project CHIP Authors
- #
- # Licensed under the Apache License, Version 2.0 (the 'License');
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an 'AS IS' BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- import io
- import unittest
- from matter_yamltests.definitions import Attribute, Bitmap, Command, Enum, Event, ParseSource, SpecDefinitions, Struct
- source_cluster = '''<?xml version="1.0"?>
- <configurator>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- </cluster>
- </configurator>
- '''
- source_command = '''<?xml version="1.0"?>
- <configurator>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- <command source="client" code="0x0" name="TestCommand"></command>
- </cluster>
- </configurator>
- '''
- source_response = '''<?xml version="1.0"?>
- <configurator>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- <command source="server" code="0x0" name="TestCommandResponse">
- <arg name="arg1" type="int8u"/>
- </command>
- </cluster>
- </configurator>
- '''
- source_response_with_nullable = '''<?xml version="1.0"?>
- <configurator>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- <command source="server" code="0x0" name="TestCommandResponse">
- <arg name="arg1" type="int8u"/>
- <arg name="arg2" type="int8u" isNullable="true"/>
- </command>
- </cluster>
- </configurator>
- '''
- source_attribute = '''<?xml version="1.0"?>
- <configurator>
- <global>
- <attribute side="server" code="0xFFFD" type="boolean">TestGlobalAttribute</attribute>
- </global>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- <globalAttribute side="server" code="0xFFFD" value="true"/>
- <attribute code="0x0" type="boolean">TestAttribute</attribute>
- </cluster>
- </configurator>
- '''
- source_event = '''<?xml version="1.0"?>
- <configurator>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- <event code="0x0" name="TestEvent" priority="info" side="server"></event>
- <event code="0x1" name="TestEventFabricScoped" priority="info" side="server" isFabricSensitive="true"></event>
- </cluster>
- </configurator>
- '''
- source_bitmap = '''<?xml version="1.0"?>
- <configurator>
- <bitmap name="TestBitmap" type="bitmap8">
- <cluster code="0x1234"/>
- <field name="a" mask="0x1"/>
- </bitmap>
- <bitmap name="TestWrongBitmap" type="bitmap8">
- <cluster code="0x4321"/>
- <field name="a" mask="0x1"/>
- </bitmap>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- </cluster>
- <cluster>
- <name>TestWrong</name>
- <code>0x4321</code>
- </cluster>
- </configurator>
- '''
- source_enum = '''<?xml version="1.0"?>
- <configurator>
- <enum name="TestEnum" type="enum8">
- <cluster code="0x1234"/>
- <item name="a" value="0x00"/>
- </enum>
- <enum name="TestWrongEnum" type="enum8">
- <cluster code="0x4321"/>
- <item name="a" value="0x00"/>
- </enum>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- </cluster>
- <cluster>
- <name>TestWrong</name>
- <code>0x4321</code>
- </cluster>
- </configurator>
- '''
- source_struct = '''<?xml version="1.0"?>
- <configurator>
- <struct name="TestStruct">
- <cluster code="0x1234"/>
- <item name="a" type="boolean"/>
- </struct>
- <struct name="TestStructFabricScoped" isFabricScoped="true">
- <cluster code="0x1234"/>
- <item name="a" type="boolean"/>
- </struct>
- <struct name="TestWrongStruct">
- <cluster code="0x4321"/>
- <item name="a" type="boolean"/>
- </struct>
- <cluster>
- <name>Test</name>
- <code>0x1234</code>
- </cluster>
- <cluster>
- <name>TestWrong</name>
- <code>0x4321</code>
- </cluster>
- </configurator>
- '''
- class TestSpecDefinitions(unittest.TestCase):
- def test_cluster_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_cluster), name='source_cluster')])
- self.assertIsNone(definitions.get_cluster_name(0x4321))
- self.assertEqual(definitions.get_cluster_name(0x1234), 'Test')
- def test_command_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_command), name='source_command')])
- self.assertIsNone(definitions.get_command_name(0x4321, 0x0))
- self.assertIsNone(definitions.get_command_name(0x1234, 0x1))
- self.assertEqual(definitions.get_command_name(
- 0x1234, 0x0), 'TestCommand')
- def test_response_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_response), name='source_response')])
- self.assertIsNone(definitions.get_response_name(0x4321, 0x0))
- self.assertIsNone(definitions.get_response_name(0x1234, 0x1))
- self.assertEqual(definitions.get_response_name(
- 0x1234, 0x0), 'TestCommandResponse')
- def test_response_name_with_nullable(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_response_with_nullable), name='source_response_with_nullable')])
- cluster_name = 'Test'
- response_name = 'TestCommandResponse'
- self.assertEqual(definitions.get_cluster_name(0x1234), cluster_name)
- self.assertEqual(definitions.get_response_name(
- 0x1234, 0x0), response_name)
- response = definitions.get_response_by_name(
- cluster_name, response_name)
- for field in response.fields:
- if field.name == 'arg1':
- self.assertFalse(definitions.is_nullable(field))
- else:
- self.assertTrue(definitions.is_nullable(field))
- def test_attribute_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_attribute), name='source_attribute')])
- self.assertIsNone(definitions.get_attribute_name(0x4321, 0x0))
- self.assertIsNone(definitions.get_attribute_name(0x4321, 0xFFFD))
- self.assertIsNone(definitions.get_attribute_name(0x1234, 0x1))
- self.assertEqual(definitions.get_attribute_name(
- 0x1234, 0x0), 'TestAttribute')
- self.assertEqual(definitions.get_attribute_name(
- 0x1234, 0xFFFD), 'TestGlobalAttribute')
- def test_event_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_event), name='source_event')])
- self.assertIsNone(definitions.get_event_name(0x4321, 0x0))
- self.assertIsNone(definitions.get_event_name(0x1234, 0x2))
- self.assertEqual(definitions.get_event_name(0x1234, 0x0), 'TestEvent')
- self.assertEqual(definitions.get_event_name(
- 0x1234, 0x1), 'TestEventFabricScoped')
- def test_get_command_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_command), name='source_command')])
- self.assertIsNone(definitions.get_command_by_name(
- 'WrongName', 'TestCommand'))
- self.assertIsNone(definitions.get_command_by_name(
- 'Test', 'TestWrongCommand'))
- self.assertIsNone(
- definitions.get_response_by_name('Test', 'TestCommand'))
- self.assertIsInstance(definitions.get_command_by_name(
- 'Test', 'TestCommand'), Command)
- self.assertIsNone(
- definitions.get_command_by_name('test', 'TestCommand'))
- self.assertIsNone(
- definitions.get_command_by_name('Test', 'testcommand'))
- def test_get_response_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_response), name='source_response')])
- self.assertIsNone(definitions.get_response_by_name(
- 'WrongName', 'TestCommandResponse'))
- self.assertIsNone(definitions.get_response_by_name(
- 'Test', 'TestWrongCommandResponse'))
- self.assertIsNone(definitions.get_command_by_name(
- 'Test', 'TestCommandResponse'))
- self.assertIsInstance(definitions.get_response_by_name(
- 'Test', 'TestCommandResponse'), Struct)
- self.assertIsNone(definitions.get_response_by_name(
- 'test', 'TestCommandResponse'))
- self.assertIsNone(definitions.get_response_by_name(
- 'Test', 'testcommandresponse'))
- def test_get_attribute_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_attribute), name='source_attribute')])
- self.assertIsNone(definitions.get_attribute_by_name(
- 'WrongName', 'TestAttribute'))
- self.assertIsNone(definitions.get_attribute_by_name(
- 'WrongName', 'TestGlobalAttribute'))
- self.assertIsNone(definitions.get_attribute_by_name(
- 'Test', 'TestWrongAttribute'))
- self.assertIsInstance(definitions.get_attribute_by_name(
- 'Test', 'TestAttribute'), Attribute)
- self.assertIsInstance(definitions.get_attribute_by_name(
- 'Test', 'TestGlobalAttribute'), Attribute)
- self.assertIsNone(definitions.get_attribute_by_name(
- 'test', 'TestAttribute'))
- self.assertIsNone(definitions.get_attribute_by_name(
- 'test', 'TestGlobalAttribute'))
- self.assertIsNone(definitions.get_attribute_by_name(
- 'Test', 'testattribute'))
- self.assertIsNone(definitions.get_attribute_by_name(
- 'Test', 'testglobalattribute'))
- def test_get_event_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_event), name='source_event')])
- self.assertIsNone(definitions.get_event_by_name(
- 'WrongName', 'TestEvent'))
- self.assertIsNone(definitions.get_event_by_name(
- 'Test', 'TestWrongEvent'))
- self.assertIsInstance(
- definitions.get_event_by_name('Test', 'TestEvent'), Event)
- self.assertIsNone(definitions.get_event_by_name('test', 'TestEvent'))
- self.assertIsNone(definitions.get_event_by_name('Test', 'testevent'))
- def test_get_bitmap_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_bitmap), name='source_bitmap')])
- self.assertIsNone(definitions.get_bitmap_by_name(
- 'WrongName', 'TestBitmap'))
- self.assertIsNone(definitions.get_bitmap_by_name(
- 'Test', 'TestWrongBitmap'))
- self.assertIsInstance(definitions.get_bitmap_by_name(
- 'Test', 'TestBitmap'), Bitmap)
- self.assertIsNone(definitions.get_bitmap_by_name('test', 'TestBitmap'))
- self.assertIsNone(definitions.get_bitmap_by_name('Test', 'testbitmap'))
- def test_get_enum_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_enum), name='source_enum')])
- self.assertIsNone(definitions.get_enum_by_name(
- 'WrongName', 'TestEnum'))
- self.assertIsNone(definitions.get_enum_by_name(
- 'Test', 'TestWrongEnum'))
- self.assertIsInstance(
- definitions.get_enum_by_name('Test', 'TestEnum'), Enum)
- self.assertIsNone(definitions.get_enum_by_name('test', 'TestEnum'))
- self.assertIsNone(definitions.get_enum_by_name('Test', 'testenum'))
- def test_get_struct_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_struct), name='source_struct')])
- self.assertIsNone(definitions.get_struct_by_name(
- 'WrongName', 'TestStruct'))
- self.assertIsNone(definitions.get_struct_by_name(
- 'Test', 'TestWrongStruct'))
- self.assertIsInstance(definitions.get_struct_by_name(
- 'Test', 'TestStruct'), Struct)
- self.assertIsNone(definitions.get_struct_by_name('test', 'TestStruct'))
- self.assertIsNone(definitions.get_struct_by_name('Test', 'teststruct'))
- def test_get_type_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_command), name='source_command')])
- self.assertIsNone(definitions.get_type_by_name('Test', 'TestCommand'))
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_response), name='source_response')])
- self.assertIsInstance(definitions.get_type_by_name(
- 'Test', 'TestCommandResponse'), Struct)
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_attribute), name='source_attribute')])
- self.assertIsNone(definitions.get_type_by_name(
- 'Test', 'TestAttribute'))
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_event), name='source_event')])
- self.assertIsInstance(
- definitions.get_type_by_name('Test', 'TestEvent'), Event)
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_bitmap), name='source_bitmap')])
- self.assertIsInstance(definitions.get_type_by_name(
- 'Test', 'TestBitmap'), Bitmap)
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_enum), name='source_enum')])
- self.assertIsInstance(
- definitions.get_type_by_name('Test', 'TestEnum'), Enum)
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_struct), name='source_struct')])
- self.assertIsInstance(definitions.get_type_by_name(
- 'Test', 'TestStruct'), Struct)
- def test_struct_is_fabric_scoped(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_struct), name='source_struct')])
- struct = definitions.get_struct_by_name('Test', 'TestStruct')
- self.assertFalse(definitions.is_fabric_scoped(struct))
- struct = definitions.get_struct_by_name(
- 'Test', 'TestStructFabricScoped')
- self.assertTrue(definitions.is_fabric_scoped(struct))
- def test_event_is_fabric_scoped(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_event), name='source_event')])
- event = definitions.get_event_by_name('Test', 'TestEvent')
- self.assertFalse(definitions.is_fabric_scoped(event))
- event = definitions.get_event_by_name(
- 'Test', 'TestEventFabricScoped')
- self.assertTrue(definitions.is_fabric_scoped(event))
- def test_get_cluster_id_by_name(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_cluster), name='source_cluster')])
- cluster_id = definitions.get_cluster_id_by_name('Test')
- self.assertEqual(cluster_id, 0x1234)
- cluster_id = definitions.get_cluster_id_by_name('test')
- self.assertIsNone(cluster_id)
- def test_get_command_names(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_command), name='source_command')])
- commands = definitions.get_command_names('Test')
- self.assertEqual(commands, ['TestCommand'])
- commands = definitions.get_command_names('test')
- self.assertEqual(commands, [])
- def test_get_attribute_names(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_attribute), name='source_attribute')])
- attributes = definitions.get_attribute_names('Test')
- self.assertEqual(attributes, ['TestAttribute', 'TestGlobalAttribute'])
- attributes = definitions.get_attribute_names('test')
- self.assertEqual(attributes, [])
- def test_get_event_names(self):
- definitions = SpecDefinitions(
- [ParseSource(source=io.StringIO(source_event), name='source_event')])
- events = definitions.get_event_names('Test')
- self.assertEqual(events, ['TestEvent', 'TestEventFabricScoped'])
- events = definitions.get_event_names('test')
- self.assertEqual(events, [])
- if __name__ == '__main__':
- unittest.main()
|