diff options
author | Bastien Nocera <hadess@hadess.net> | 2022-01-20 13:54:19 +0100 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2022-01-20 13:54:19 +0100 |
commit | 99421ebaace6955f7671e151619bb388eced452d (patch) | |
tree | 65e4ee30e33df8beaee190d444d990e763b29dda /tests | |
parent | 020c56c5220a89093b0f3742568605602f268108 (diff) | |
download | gnome-bluetooth-99421ebaace6955f7671e151619bb388eced452d.tar.gz |
tests: Split the integration test into individual tests
unittest_inspector.py lists the tests in the integration-test.py script,
which are then added as individual tests.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/meson.build | 23 | ||||
-rwxr-xr-x | tests/unittest_inspector.py | 46 |
2 files changed, 62 insertions, 7 deletions
diff --git a/tests/meson.build b/tests/meson.build index 419cf59e..1c9ce125 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,4 +1,4 @@ -if enable_gir +if enable_gir and has_dbusmock integration_test = find_program('integration-test.py') envs = environment() @@ -7,12 +7,21 @@ if enable_gir test_deps = [ gnomebt_priv_gir, ] - test('gnome-bluetooth-integration-test', - integration_test, - args: [ 'Tests' ], - env: envs, - depends: test_deps - ) + python3 = find_program('python3') + unittest_inspector = find_program('unittest_inspector.py') + r = run_command(unittest_inspector, files('integration-test.py')) + unit_tests = r.stdout().strip().split('\n') + + foreach ut: unit_tests + ut_args = files('integration-test.py') + ut_args += ut + test(ut, + python3, + args: ut_args, + env: envs, + depends: test_deps + ) + endforeach endif test_bluetooth_device = executable('test-bluetooth-device', diff --git a/tests/unittest_inspector.py b/tests/unittest_inspector.py new file mode 100755 index 00000000..fe830468 --- /dev/null +++ b/tests/unittest_inspector.py @@ -0,0 +1,46 @@ +#! /usr/bin/env python3 +# Copyright © 2020, Canonical Ltd +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# Authors: +# Marco Trevisan <marco.trevisan@canonical.com> + +import argparse +import importlib.util +import inspect +import os +import unittest + +def list_tests(module): + tests = [] + for name, obj in inspect.getmembers(module): + if inspect.isclass(obj) and issubclass(obj, unittest.TestCase) and not name.startswith('OopTests'): + cases = unittest.defaultTestLoader.getTestCaseNames(obj) + tests += [ (obj, '{}.{}'.format(name, t)) for t in cases ] + return tests + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('unittest_source', type=argparse.FileType('r')) + + args = parser.parse_args() + source_path = args.unittest_source.name + spec = importlib.util.spec_from_file_location( + os.path.basename(source_path), source_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + for machine, human in list_tests(module): + print(human) |