| # DExTer : Debugging Experience Tester |
| # ~~~~~~ ~ ~~ ~ ~~ |
| # |
| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| """Unit test harness.""" |
| |
| from fnmatch import fnmatch |
| import os |
| import unittest |
| |
| from io import StringIO |
| |
| from dex.utils import is_native_windows, has_pywin32 |
| from dex.utils import PreserveAutoColors, PrettyOutput |
| from dex.utils import Timer |
| |
| |
| class DexTestLoader(unittest.TestLoader): |
| def _match_path(self, path, full_path, pattern): |
| """Don't try to import platform-specific modules for the wrong platform |
| during test discovery. |
| """ |
| d = os.path.basename(os.path.dirname(full_path)) |
| if is_native_windows(): |
| if d == 'posix': |
| return False |
| if d == 'windows': |
| return has_pywin32() |
| else: |
| if d == 'windows': |
| return False |
| elif d == 'dbgeng': |
| return False |
| return fnmatch(path, pattern) |
| |
| |
| def unit_tests_ok(context): |
| unittest.TestCase.maxDiff = None # remove size limit from diff output. |
| |
| with Timer('unit tests'): |
| suite = DexTestLoader().discover( |
| context.root_directory, pattern='*.py') |
| stream = StringIO() |
| result = unittest.TextTestRunner(verbosity=2, stream=stream).run(suite) |
| |
| ok = result.wasSuccessful() |
| if not ok or context.options.unittest == 'show-all': |
| with PreserveAutoColors(context.o): |
| context.o.auto_reds.extend( |
| [r'FAIL(ED|\:)', r'\.\.\.\s(FAIL|ERROR)$']) |
| context.o.auto_greens.extend([r'^OK$', r'\.\.\.\sok$']) |
| context.o.auto_blues.extend([r'^Ran \d+ test']) |
| context.o.default('\n') |
| for line in stream.getvalue().splitlines(True): |
| context.o.auto(line, stream=PrettyOutput.stderr) |
| |
| return ok |
| |
| |
| class TestUnitTests(unittest.TestCase): |
| def test_sanity(self): |
| self.assertEqual(1, 1) |