| # Copyright 2020 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Tests for constraint_suite_discovery.""" |
| |
| import os |
| import sys |
| import unittest |
| |
| from checker.constraint_suite import ConstraintSuite |
| from checker.constraint_suite_discovery import discover_suites |
| |
| TESTDATA_PATH = os.path.join(os.path.dirname(__file__), 'testdata') |
| |
| |
| class DiscoverSuitesTest(unittest.TestCase): |
| """Tests for discover_suites.""" |
| |
| def test_discover_suites(self): |
| """Tests that ConstraintSuites are found and loaded.""" |
| suites = discover_suites(directory=TESTDATA_PATH) |
| |
| self.assertEqual(len(suites), 2) |
| |
| self.assertEqual(type(suites[0]).__name__, 'Example1ConstraintSuite') |
| self.assertEqual(type(suites[1]).__name__, 'Example2ConstraintSuite') |
| |
| for suite in suites: |
| self.assertIsInstance(suite, ConstraintSuite) |
| self.assertTrue(hasattr(suite, 'check_first_thing')) |
| self.assertTrue(hasattr(suite, 'check_second_thing')) |
| |
| def test_discover_suites_path_unmodified(self): |
| """Tests that discover_suites doesn't modify sys.path.""" |
| path_before = sys.path |
| discover_suites(directory=TESTDATA_PATH) |
| self.assertEqual(sys.path, path_before) |
| |
| def test_discover_suites_invalid_pattern(self): |
| """Tests non-Python patterns raise an error.""" |
| with self.assertRaisesRegex(ValueError, 'pattern must end with ".py"'): |
| discover_suites(directory=TESTDATA_PATH, pattern='*.txt') |