First commit

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2022-11-01 13:28:53 +01:00
commit 4b912741cb
73 changed files with 3753 additions and 0 deletions

View file

@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
import glob
import importlib.util
from abc import abstractmethod
import asyncio
from jwutils.log import *
from jwutils.misc import *
from ..TestCaseFactory import TestCaseFactory
from ..TestCase import TestCase as TestCaseBase
from ..TestPhases import TestPhases
from ..Connection import Connection
from pathlib import PurePath
class CaseDir(TestCaseFactory): # export
# just to identify test cases as to be instantiated by this factory
class Case(TestCaseBase):
def __init__(self):
super().__init__()
class CaseWrapper(Case):
def __init__(self, case):
self.__case = case
async def _run(self, env, machine, phase):
return await self.__case.run(env, machine, phase)
def __init__(self, path):
super().__init__(path)
self.__cases = []
for p in path:
slog(INFO, "importing test cases from {}".format(p))
for phase in TestPhases.Phase:
pattern = p + '/' + phase.name.lower() + '/*.py'
slog(INFO, " importing test cases for phase {:<8} from {}".format(phase.name, pattern))
sources = sorted(glob.glob(pattern))
for s in sources:
slog(DEBUG, " found source", s)
spec = importlib.util.spec_from_file_location(s, s) # args are (name, path)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
members = inspect.getmembers(mod, inspect.isclass)
for name, c in members:
slog(DEBUG, " found member", name)
if c.__module__ != s:
slog(DEBUG, " is not defined in", s, "ignoring")
continue
if inspect.isabstract(c):
slog(DEBUG, " is abstract, ignoring")
continue
if not CaseDir.Case in inspect.getmro(c):
slog(DEBUG, " is not a CaseDir.Case, ignoring")
continue
case = c()
case.phases = [phase]
case.source = s
case.name = name + ' from ' + s
case.short_name = name + '@' + PurePath(s).stem
self.__cases.append(case)
slog(INFO, "adding test cases:", ', '.join([c.name for c in self.__cases]))
def test_cases(self):
return self.__cases