def test_of_many_without_subclasses(self) -> None: '''torment.fixtures.of(( FixtureA, )) == []''' class FixtureA(object): def __init__(self, context) -> None: pass self.assertEqual(len(fixtures.of((FixtureA, ))), 0)
def test_of_many_without_subclasses(self) -> None: '''torment.fixtures.of(( FixtureA, )) == []''' class FixtureA(object): def __init__(self, context) -> None: pass self.assertEqual(len(fixtures.of(( FixtureA, ))), 0)
def test_of_many_with_subclasses(self) -> None: '''torment.fixtures.of(( FixtureA, )) == [ fixture_a, ]''' class FixtureA(object): def __init__(self, context) -> None: pass class FixtureB(FixtureA): pass result = fixtures.of((FixtureA, )) self.assertEqual(len(result), 1) self.assertIsInstance(result[0], FixtureB)
def test_of_many_with_subclasses(self) -> None: '''torment.fixtures.of(( FixtureA, )) == [ fixture_a, ]''' class FixtureA(object): def __init__(self, context) -> None: pass class FixtureB(FixtureA): pass result = fixtures.of(( FixtureA, )) self.assertEqual(len(result), 1) self.assertIsInstance(result[0], FixtureB)
def __init__(cls, name, bases, dct) -> None: super(MetaContext, cls).__init__(name, bases, dct) cls.mocks_mask = set().union(getattr(cls, 'mocks_mask', set()), *[ getattr(base, 'mocks_mask', set()) for base in bases ]) cls.mocks = set().union(getattr(cls, 'mocks', set()), *[ getattr(base, 'mocks', set()) for base in bases ]) cls.docker_compose_services = set().union(getattr(cls, 'docker_compose_services', set()), *[ getattr(base, 'docker_compose_services', set()) for base in bases ]) def generate_case(fixture: fixtures.Fixture) -> Callable[[Any], None]: '''Generate a ``unittest.TestCase`` compatible test method. Parameters ---------- :``fixture``: the fixture to transform into a ``unittest.TestCase`` compatible test method Return Value(s) --------------- An acceptable method that nose will execute as a test case. ''' def case(self) -> None: fixture.context = self fixture._execute() case.__name__ = fixture.name case.__doc__ = fixture.description if len(cls.mocks_mask): case.__doc__ += '—unmocked:' + ','.join(sorted(cls.mocks_mask)) return case if not hasattr(cls, 'fixture_classes'): warnings.warn('type object \'{0}\' has no attribute \'fixture_classes\'') else: for fixture in fixtures.of(cls.fixture_classes, context = cls): _ = generate_case(fixture) setattr(cls, _.__name__, _)
def test_of_zero(self) -> None: '''torment.fixtures.of(()) == []''' self.assertEqual(len(fixtures.of(())), 0)
class MetaContext(type): '''``torment.TestContext`` class creator. Generates all testing methods that correspond with the fixtures associated with a ``torment.TestContext``. Also updates the definitions of ``mocks_mask`` and ``mocks`` to include the union of all involved classes in the creation process (all parent classes and the class being created). When creating a ``torment.TestContext`` subclass, ensure you specify this class as its metaclass to automatically generate test cases based on its ``fixture_classes`` property. ''' module = _module def __init__(cls, name, bases, dct) -> None: super(MetaContext, cls).__init__(name, bases, dct) cls.mocks_mask = set().union( getattr(cls, 'mocks_mask', set()), *[getattr(base, 'mocks_mask', set()) for base in bases]) cls.mocks = set().union( getattr(cls, 'mocks', set()), *[getattr(base, 'mocks', set()) for base in bases]) cls.docker_compose_services = set().union( getattr(cls, 'docker_compose_services', set()), *[ getattr(base, 'docker_compose_services', set()) for base in bases ]) def generate_case(fixture: fixtures.Fixture) -> Callable[[Any], None]: '''Generate a ``unittest.TestCase`` compatible test method. Parameters ---------- :``fixture``: the fixture to transform into a ``unittest.TestCase`` compatible test method Return Value(s) --------------- An acceptable method that nose will execute as a test case. ''' def case(self) -> None: fixture.context = self fixture._execute() case.__name__ = fixture.name case.__doc__ = fixture.description if len(cls.mocks_mask): case.__doc__ += '—unmocked:' + ','.join(sorted(cls.mocks_mask)) return case if not hasattr(cls, 'fixture_classes'): warnings.warn( 'type object \'{0}\' has no attribute \'fixture_classes\'') else: for fixture in fixtures.of(cls.fixture_classes, context=cls): _ = generate_case(fixture) setattr(cls, _.__name__, _)