(self)
| 202 | self.assertAlmostEqual(gettotalrefcount() - refs_before, 0, delta=10) |
| 203 | |
| 204 | def test_property_name(self): |
| 205 | def getter(self): |
| 206 | return 42 |
| 207 | |
| 208 | def setter(self, value): |
| 209 | pass |
| 210 | |
| 211 | class A: |
| 212 | @property |
| 213 | def foo(self): |
| 214 | return 1 |
| 215 | |
| 216 | @foo.setter |
| 217 | def oof(self, value): |
| 218 | pass |
| 219 | |
| 220 | bar = property(getter) |
| 221 | baz = property(None, setter) |
| 222 | |
| 223 | self.assertEqual(A.foo.__name__, 'foo') |
| 224 | self.assertEqual(A.oof.__name__, 'oof') |
| 225 | self.assertEqual(A.bar.__name__, 'bar') |
| 226 | self.assertEqual(A.baz.__name__, 'baz') |
| 227 | |
| 228 | A.quux = property(getter) |
| 229 | self.assertEqual(A.quux.__name__, 'getter') |
| 230 | A.quux.__name__ = 'myquux' |
| 231 | self.assertEqual(A.quux.__name__, 'myquux') |
| 232 | self.assertEqual(A.bar.__name__, 'bar') # not affected |
| 233 | A.quux.__name__ = None |
| 234 | self.assertIsNone(A.quux.__name__) |
| 235 | |
| 236 | with self.assertRaisesRegex( |
| 237 | AttributeError, "'property' object has no attribute '__name__'" |
| 238 | ): |
| 239 | property(None, setter).__name__ |
| 240 | |
| 241 | with self.assertRaisesRegex( |
| 242 | AttributeError, "'property' object has no attribute '__name__'" |
| 243 | ): |
| 244 | property(1).__name__ |
| 245 | |
| 246 | class Err: |
| 247 | def __getattr__(self, attr): |
| 248 | raise RuntimeError('fail') |
| 249 | |
| 250 | p = property(Err()) |
| 251 | with self.assertRaisesRegex(RuntimeError, 'fail'): |
| 252 | p.__name__ |
| 253 | |
| 254 | p.__name__ = 'not_fail' |
| 255 | self.assertEqual(p.__name__, 'not_fail') |
| 256 | |
| 257 | def test_property_set_name_incorrect_args(self): |
| 258 | p = property() |
nothing calls this directly
no test coverage detected