@@ 97-122 (lines=26) @@ | ||
94 | assert D().ns.footer == 3 |
|
95 | ||
96 | ||
97 | def test_abstractclassmethod_basics(abc): |
|
98 | @classmethod |
|
99 | @abstractmethod |
|
100 | def footer(cls): |
|
101 | pass |
|
102 | assert footer.__isabstractmethod__ |
|
103 | ||
104 | @classmethod |
|
105 | def barter(cls): |
|
106 | pass |
|
107 | assert not getattr(barter, "__isabstractmethod__", False) |
|
108 | ||
109 | class C(metaclass=abc.NamespaceableABCMeta): |
|
110 | @classmethod |
|
111 | @abstractmethod |
|
112 | def footer(cls): |
|
113 | return cls.__name__ |
|
114 | with pytest.raises(TypeError): |
|
115 | print(C()) |
|
116 | ||
117 | class D(C): |
|
118 | @classmethod |
|
119 | def footer(cls): |
|
120 | return super().footer() |
|
121 | assert D.footer() == 'D' |
|
122 | assert D().footer() == 'D' |
|
123 | ||
124 | ||
125 | def test_abstractclassmethod_namespaced(abc, namespace): |
|
@@ 52-75 (lines=24) @@ | ||
49 | assert not hasattr(barter, "__isabstractmethod__") |
|
50 | ||
51 | ||
52 | def test_abstractproperty_basics(abc): |
|
53 | @property |
|
54 | @abstractmethod |
|
55 | def footer(self): |
|
56 | pass |
|
57 | assert footer.__isabstractmethod__ |
|
58 | ||
59 | def barter(self): |
|
60 | pass |
|
61 | assert not getattr(barter, "__isabstractmethod__", False) |
|
62 | ||
63 | class C(metaclass=abc.NamespaceableABCMeta): |
|
64 | @property |
|
65 | @abstractmethod |
|
66 | def footer(self): |
|
67 | return 3 |
|
68 | with pytest.raises(TypeError): |
|
69 | print(C()) |
|
70 | ||
71 | class D(C): |
|
72 | @C.footer.getter |
|
73 | def footer(self): |
|
74 | return super().footer |
|
75 | assert D().footer == 3 |
|
76 | ||
77 | ||
78 | def test_abstractproperty_namespaced(abc, namespace): |