# Path: nimoy/specification.py
# class Specification(TestCase, metaclass=DataDrivenSpecification):
# 
#     def __init__(self, methodName='runTest'):
#         super().__init__(methodName)
#         self.thrown_exceptions = []
# 
#     def _feature_block_context(self, block_name):
#         return FeatureBlock(block_name, self.thrown_exceptions)
# 
#     def _compare(self, left, right, comparison_type_name):
#         Compare().compare(left, right, comparison_type_name)
# 
#     def _power_assert(self, expression: Dict):
#         PowerAssertions().assert_and_raise(expression)
# 
#     def _assert_mock(self, number_of_invocations, mock, method, *args):
#         MockAssertions().assert_mock(number_of_invocations, mock, method, *args)
# 
#     def _exception_thrown(self, expected_exception_type):
#         return ExceptionAssertions().assert_exception(self.thrown_exceptions, expected_exception_type)


from unittest import mock
from nimoy.specification import Specification
        with expect:
            class SomeSpec(Specification):
                def test_something(self, where_visited=False):
                    where_visited == False

            SomeSpec().test_something()


class InternalSpecificationMethodsSpec(Specification):

    # By default the unittest mock fails when a mocked method begins with the string "assert" or "assret"
    @staticmethod
    def _mark_mock_as_unsafe(m):
        m.return_value._mock_unsafe = True

    def feature_block_context_is_returned(self):
        with given:
            class SomeSpec(Specification):
                pass

            spec = SomeSpec()

        with when:
            feature_block = spec._feature_block_context('jimbob')

        with then:
            feature_block.block_type == 'jimbob'
            feature_block.thrown_exceptions == spec.thrown_exceptions

    @mock.patch('nimoy.specification.Compare')

# Path: nimoy/specification.py
# class Specification(TestCase, metaclass=DataDrivenSpecification):
# 
#     def __init__(self, methodName='runTest'):
#         super().__init__(methodName)
#         self.thrown_exceptions = []
# 
#     def _feature_block_context(self, block_name):
#         return FeatureBlock(block_name, self.thrown_exceptions)
# 
#     def _compare(self, left, right, comparison_type_name):
#         Compare().compare(left, right, comparison_type_name)
# 
#     def _power_assert(self, expression: Dict):
#         PowerAssertions().assert_and_raise(expression)
# 
#     def _assert_mock(self, number_of_invocations, mock, method, *args):
#         MockAssertions().assert_mock(number_of_invocations, mock, method, *args)
# 
#     def _exception_thrown(self, expected_exception_type):
#         return ExceptionAssertions().assert_exception(self.thrown_exceptions, expected_exception_type)


# Path: specs/nimoy/specification_spec.py
from unittest import mock
from nimoy.specification import Specification

        with expect:
            class SomeSpec(Specification):
                def test_something(self, where_visited=False):
                    where_visited == False

            SomeSpec().test_something()


class InternalSpecificationMethodsSpec(Specification):

    # By default the unittest mock fails when a mocked method begins with the string "assert" or "assret"
    @staticmethod
    def _mark_mock_as_unsafe(m):
        m.return_value._mock_unsafe = True

    def feature_block_context_is_returned(self):
        with given:
            class SomeSpec(Specification):
                pass

            spec = SomeSpec()

        with when:
            feature_block = spec._feature_block_context('jimbob')

        with then:
            feature_block.block_type == 'jimbob'
            feature_block.thrown_exceptions == spec.thrown_exceptions

    @mock.patch('nimoy.specification.Compare')

    def internal_comparison_is_called(self, compare_mock):