@@ 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): |