| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- #!/usr/bin/env -S python3 -B
- #
- # Copyright (c) 2023 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 unittest
- from unittest.mock import mock_open, patch
- from matter_yamltests.hooks import TestParserHooks
- from matter_yamltests.parser import TestParser
- from matter_yamltests.parser_builder import TestParserBuilder, TestParserBuilderConfig
- simple_yaml = '''
- name: Hello World
- '''
- valid_yaml = '''
- name: TestOnOff
- tests:
- - label: "Toggle the light"
- cluster: "OnOff"
- command: "Toggle"
- - label: "Toggle the light"
- cluster: "OnOff"
- command: "Toggle"
- '''
- invalid_yaml = '''
- name: TestOnOff
- tests:
- - label: "Toggle the light"
- cluster: "OnOff"
- command: "Toggle"
- - label: "Toggle the light"
- cluster: "OnOff"
- command: "Toggle"
- - label: "Toggle the light"
- cluster: "OnOff"
- command: "Toggle"
- - label: "Toggle the light"
- cluster_wrong_key: "OnOff"
- command: "Toggle"
- - label: "Toggle the light"
- cluster: "OnOff"
- command: "Toggle"
- '''
- class TestHooks(TestParserHooks):
- def __init__(self):
- self.start_count = 0
- self.stop_count = 0
- self.test_start_count = 0
- self.test_failure_count = 0
- self.test_success_count = 0
- def parsing_start(self, count):
- self.start_count += 1
- def parsing_stop(self, duration):
- self.stop_count += 1
- def test_parsing_start(self, name):
- self.test_start_count += 1
- def test_parsing_success(self, duration):
- self.test_success_count += 1
- def test_parsing_failure(self, exception, duration):
- self.test_failure_count += 1
- def mock_open_with_parameter_content(content):
- file_object = mock_open(read_data=content).return_value
- file_object.__iter__.return_value = content.splitlines(True)
- return file_object
- @patch('builtins.open', new=mock_open_with_parameter_content)
- class TestSuiteParserBuilder(unittest.TestCase):
- def test_parser_builder_config_defaults(self):
- parser_builder_config = TestParserBuilderConfig()
- self.assertIsInstance(parser_builder_config, TestParserBuilderConfig)
- self.assertIsNotNone(parser_builder_config.tests)
- self.assertIsNotNone(parser_builder_config.parser_config)
- self.assertIsNotNone(parser_builder_config.options)
- self.assertIsNotNone(parser_builder_config.hooks)
- def test_parser_builder_config_with_tests(self):
- tests = [simple_yaml, simple_yaml]
- parser_builder_config = TestParserBuilderConfig(tests)
- self.assertIsInstance(parser_builder_config, TestParserBuilderConfig)
- self.assertIsNotNone(parser_builder_config.tests)
- self.assertEqual(len(tests), len(parser_builder_config.tests))
- self.assertIsNotNone(parser_builder_config.parser_config)
- self.assertIsNotNone(parser_builder_config.options)
- def test_parser_builder_default(self):
- parser_builder = TestParserBuilder()
- self.assertIsInstance(parser_builder, TestParserBuilder)
- self.assertRaises(StopIteration, next, parser_builder)
- def test_parser_builder_with_empty_config(self):
- parser_builder_config = TestParserBuilderConfig()
- parser_builder = TestParserBuilder(parser_builder_config)
- self.assertIsInstance(parser_builder, TestParserBuilder)
- self.assertRaises(StopIteration, next, parser_builder)
- def test_parser_builder_with_a_single_test(self):
- tests = [valid_yaml]
- parser_builder_config = TestParserBuilderConfig(tests)
- parser_builder = TestParserBuilder(parser_builder_config)
- self.assertIsInstance(parser_builder, TestParserBuilder)
- self.assertIsInstance(next(parser_builder), TestParser)
- self.assertRaises(StopIteration, next, parser_builder)
- def test_parser_builder_with_a_multiple_tests(self):
- tests = [valid_yaml] * 5
- parser_builder_config = TestParserBuilderConfig(tests)
- parser_builder = TestParserBuilder(parser_builder_config)
- self.assertIsInstance(parser_builder, TestParserBuilder)
- for i in range(0, 5):
- self.assertIsInstance(next(parser_builder), TestParser)
- self.assertRaises(StopIteration, next, parser_builder)
- def test_parser_builder_config_hooks_single_test_with_multiple_steps(self):
- tests = [valid_yaml]
- hooks = TestHooks()
- parser_builder_config = TestParserBuilderConfig(tests, hooks=hooks)
- parser_builder = TestParserBuilder(parser_builder_config)
- self.assertIsInstance(parser_builder, TestParserBuilder)
- for parser in parser_builder:
- pass
- self.assertRaises(StopIteration, next, parser_builder)
- self.assertEqual(hooks.start_count, 1)
- self.assertEqual(hooks.stop_count, 1)
- self.assertEqual(hooks.test_start_count, 1)
- self.assertEqual(hooks.test_success_count, 1)
- self.assertEqual(hooks.test_failure_count, 0)
- def test_parser_builder_config_hooks_multiple_test_with_multiple_steps(self):
- tests = [valid_yaml] * 5
- hooks = TestHooks()
- parser_builder_config = TestParserBuilderConfig(tests, hooks=hooks)
- parser_builder = TestParserBuilder(parser_builder_config)
- self.assertIsInstance(parser_builder, TestParserBuilder)
- for parser in parser_builder:
- pass
- self.assertRaises(StopIteration, next, parser_builder)
- self.assertEqual(hooks.start_count, 1)
- self.assertEqual(hooks.stop_count, 1)
- self.assertEqual(hooks.test_start_count, 5)
- self.assertEqual(hooks.test_success_count, 5)
- self.assertEqual(hooks.test_failure_count, 0)
- def test_parser_builder_config_with_errors(self):
- tests = [invalid_yaml]
- hooks = TestHooks()
- parser_builder_config = TestParserBuilderConfig(tests, hooks=hooks)
- parser_builder = TestParserBuilder(parser_builder_config)
- self.assertIsInstance(parser_builder, TestParserBuilder)
- for parser in parser_builder:
- pass
- self.assertRaises(StopIteration, next, parser_builder)
- self.assertEqual(hooks.start_count, 1)
- self.assertEqual(hooks.stop_count, 1)
- self.assertEqual(hooks.test_start_count, 1)
- self.assertEqual(hooks.test_success_count, 0)
- self.assertEqual(hooks.test_failure_count, 1)
- if __name__ == '__main__':
- unittest.main()
|