@@ 124-159 (lines=36) @@ | ||
121 | assert DClass().ns.footer == 3 |
|
122 | ||
123 | ||
124 | def test_abstractclassmethod_basics(abc): |
|
125 | """Test abstract classmethod works as expected. |
|
126 | ||
127 | Adapted from Python's test suite. |
|
128 | """ |
|
129 | @classmethod |
|
130 | @abstractmethod |
|
131 | def footer(cls): |
|
132 | """Return cls. Abstract.""" |
|
133 | return cls |
|
134 | assert footer.__isabstractmethod__ |
|
135 | ||
136 | @classmethod |
|
137 | def barter(cls): |
|
138 | """Return cls. Concrete.""" |
|
139 | return cls |
|
140 | assert not getattr(barter, "__isabstractmethod__", False) |
|
141 | ||
142 | class CClass(metaclass=abc.NamespaceableABCMeta): |
|
143 | """A throwaway test class.""" |
|
144 | @classmethod |
|
145 | @abstractmethod |
|
146 | def footer(cls): |
|
147 | """Return class name. Abstract.""" |
|
148 | return cls.__name__ |
|
149 | with pytest.raises(TypeError): |
|
150 | print(CClass()) |
|
151 | ||
152 | class DClass(CClass): |
|
153 | """A throwaway test class.""" |
|
154 | @classmethod |
|
155 | def footer(cls): |
|
156 | """Return class name. Concrete.""" |
|
157 | return super().footer() |
|
158 | assert DClass.footer() == 'DClass' |
|
159 | assert DClass().footer() == 'DClass' |
|
160 | ||
161 | ||
162 | def test_abstractclassmethod_namespaced(abc, namespace): |
|
@@ 184-217 (lines=34) @@ | ||
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): |
|
187 | """Test abstract staticmethod works as expected. |
|
188 | ||
189 | Adapted from Python's test suite. |
|
190 | """ |
|
191 | @staticmethod |
|
192 | @abstractmethod |
|
193 | def footer(): |
|
194 | """Do nothing. Abstract.""" |
|
195 | assert footer.__isabstractmethod__ |
|
196 | ||
197 | @staticmethod |
|
198 | def barter(): |
|
199 | """Do nothing. Concrete.""" |
|
200 | assert not getattr(barter, "__isabstractmethod__", False) |
|
201 | ||
202 | class CClass(metaclass=abc.NamespaceableABCMeta): |
|
203 | """A throwaway test class.""" |
|
204 | @staticmethod |
|
205 | @abstractmethod |
|
206 | def footer(): |
|
207 | """Return 3. Abstract.""" |
|
208 | return 3 |
|
209 | with pytest.raises(TypeError): |
|
210 | print(CClass()) |
|
211 | ||
212 | class DClass(CClass): |
|
213 | """A throwaway test class.""" |
|
214 | @staticmethod |
|
215 | def footer(): |
|
216 | """Return 4. Concrete.""" |
|
217 | return 4 |
|
218 | assert DClass.footer() == 4 |
|
219 | assert DClass().footer() == 4 |
|
220 |