Code Duplication    Length = 21-22 lines in 3 locations

tests/test_compat.py 3 locations

@@ 162-183 (lines=22) @@
159
    assert DClass().footer() == 'DClass'
160
161
162
def test_abstractclassmethod_namespaced(abc, namespace):
163
    """Test interaction between namespaces and abstract classmethods."""
164
    class CClass(metaclass=abc.NamespaceableABCMeta):
165
        """A throwaway test class."""
166
        with namespace() as ns:
167
            @classmethod
168
            @abstractmethod
169
            def footer(cls):
170
                """Return class name. Abstract."""
171
                return cls.__name__
172
    with pytest.raises(TypeError):
173
        print(CClass())
174
175
    class DClass(CClass):
176
        """A throwaway test class."""
177
        with namespace() as ns:
178
            @classmethod
179
            def footer(cls):
180
                """Return class name. Concrete."""
181
                return super().ns.footer()
182
    assert DClass.ns.footer() == 'DClass'
183
    assert DClass().ns.footer() == 'DClass'
184
185
186
def test_abstractstaticmethod_basics(abc):
@@ 101-121 (lines=21) @@
98
    assert DClass().footer == 3
99
100
101
def test_abstractproperty_namespaced(abc, namespace):
102
    """Test interaction between namespaces and abstract properties."""
103
    class CClass(metaclass=abc.NamespaceableABCMeta):
104
        """A throwaway test class."""
105
        with namespace() as ns:
106
            @property
107
            @abstractmethod
108
            def footer(self):
109
                """Return 3. Abstract."""
110
                return 3
111
    with pytest.raises(TypeError):
112
        print(CClass())
113
114
    class DClass(CClass):
115
        """A throwaway test class."""
116
        with namespace() as ns:
117
            @CClass.ns.footer.getter
118
            def footer(self):
119
                """Return 3. Concrete."""
120
                return super().ns.footer
121
    assert DClass().ns.footer == 3
122
123
124
def test_abstractclassmethod_basics(abc):
@@ 222-243 (lines=22) @@
219
    assert DClass().footer() == 4
220
221
222
def test_abstractstaticmethod_namespaced(abc, namespace):
223
    """Test interaction between namespaces and abstract staticmethods."""
224
    class CClass(metaclass=abc.NamespaceableABCMeta):
225
        """A throwaway test class."""
226
        with namespace() as ns:
227
            @staticmethod
228
            @abstractmethod
229
            def footer():
230
                """Return 3. Abstract."""
231
                return 3
232
    with pytest.raises(TypeError):
233
        print(CClass())
234
235
    class DClass(CClass):
236
        """A throwaway test class."""
237
        with namespace() as ns:
238
            @staticmethod
239
            def footer():
240
                """Return 4. Concrete."""
241
                return 4
242
    assert DClass.ns.footer() == 4
243
    assert DClass().ns.footer() == 4
244
245
246
def test_abstractmethod_integration(abc):