Blame tests/unittest_inspector.py

Packit Service 8ebd8e
#! /usr/bin/env python3
Packit Service 8ebd8e
# Copyright © 2020, Canonical Ltd
Packit Service 8ebd8e
#
Packit Service 8ebd8e
# This program is free software; you can redistribute it and/or
Packit Service 8ebd8e
# modify it under the terms of the GNU Lesser General Public
Packit Service 8ebd8e
# License as published by the Free Software Foundation; either
Packit Service 8ebd8e
# version 2.1 of the License, or (at your option) any later version.
Packit Service 8ebd8e
#
Packit Service 8ebd8e
# This program is distributed in the hope that it will be useful,
Packit Service 8ebd8e
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 8ebd8e
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 8ebd8e
# Lesser General Public License for more details.
Packit Service 8ebd8e
#
Packit Service 8ebd8e
# You should have received a copy of the GNU Lesser General Public
Packit Service 8ebd8e
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit Service 8ebd8e
# Authors:
Packit Service 8ebd8e
#       Marco Trevisan <marco.trevisan@canonical.com>
Packit Service 8ebd8e
Packit Service 8ebd8e
import argparse
Packit Service 8ebd8e
import importlib.util
Packit Service 8ebd8e
import inspect
Packit Service 8ebd8e
import os
Packit Service 8ebd8e
import unittest
Packit Service 8ebd8e
Packit Service 8ebd8e
def list_tests(module):
Packit Service 8ebd8e
    tests = []
Packit Service 8ebd8e
    for name, obj in inspect.getmembers(module):
Packit Service 8ebd8e
        if inspect.isclass(obj) and issubclass(obj, unittest.TestCase):
Packit Service 8ebd8e
            cases = unittest.defaultTestLoader.getTestCaseNames(obj)
Packit Service 8ebd8e
            tests += [ (obj, '{}.{}'.format(name, t)) for t in cases ]
Packit Service 8ebd8e
    return tests
Packit Service 8ebd8e
Packit Service 8ebd8e
Packit Service 8ebd8e
if __name__ == '__main__':
Packit Service 8ebd8e
    parser = argparse.ArgumentParser()
Packit Service 8ebd8e
    parser.add_argument('unittest_source', type=argparse.FileType('r'))
Packit Service 8ebd8e
Packit Service 8ebd8e
    args = parser.parse_args()
Packit Service 8ebd8e
    source_path = args.unittest_source.name
Packit Service 8ebd8e
    spec = importlib.util.spec_from_file_location(
Packit Service 8ebd8e
        os.path.basename(source_path), source_path)
Packit Service 8ebd8e
    module = importlib.util.module_from_spec(spec)
Packit Service 8ebd8e
    spec.loader.exec_module(module)
Packit Service 8ebd8e
Packit Service 8ebd8e
    for machine, human in list_tests(module):
Packit Service 8ebd8e
        print(human)