(self)
| 348 | self.assertRaises(TypeError, Point._make, [11, 22, 33]) # catch too many args |
| 349 | |
| 350 | def test_defaults(self): |
| 351 | Point = namedtuple('Point', 'x y', defaults=(10, 20)) # 2 defaults |
| 352 | self.assertEqual(Point._field_defaults, {'x': 10, 'y': 20}) |
| 353 | self.assertEqual(Point(1, 2), (1, 2)) |
| 354 | self.assertEqual(Point(1), (1, 20)) |
| 355 | self.assertEqual(Point(), (10, 20)) |
| 356 | |
| 357 | Point = namedtuple('Point', 'x y', defaults=(20,)) # 1 default |
| 358 | self.assertEqual(Point._field_defaults, {'y': 20}) |
| 359 | self.assertEqual(Point(1, 2), (1, 2)) |
| 360 | self.assertEqual(Point(1), (1, 20)) |
| 361 | |
| 362 | Point = namedtuple('Point', 'x y', defaults=()) # 0 defaults |
| 363 | self.assertEqual(Point._field_defaults, {}) |
| 364 | self.assertEqual(Point(1, 2), (1, 2)) |
| 365 | with self.assertRaises(TypeError): |
| 366 | Point(1) |
| 367 | |
| 368 | with self.assertRaises(TypeError): # catch too few args |
| 369 | Point() |
| 370 | with self.assertRaises(TypeError): # catch too many args |
| 371 | Point(1, 2, 3) |
| 372 | with self.assertRaises(TypeError): # too many defaults |
| 373 | Point = namedtuple('Point', 'x y', defaults=(10, 20, 30)) |
| 374 | with self.assertRaises(TypeError): # non-iterable defaults |
| 375 | Point = namedtuple('Point', 'x y', defaults=10) |
| 376 | with self.assertRaises(TypeError): # another non-iterable default |
| 377 | Point = namedtuple('Point', 'x y', defaults=False) |
| 378 | |
| 379 | Point = namedtuple('Point', 'x y', defaults=None) # default is None |
| 380 | self.assertEqual(Point._field_defaults, {}) |
| 381 | self.assertIsNone(Point.__new__.__defaults__, None) |
| 382 | self.assertEqual(Point(10, 20), (10, 20)) |
| 383 | with self.assertRaises(TypeError): # catch too few args |
| 384 | Point(10) |
| 385 | |
| 386 | Point = namedtuple('Point', 'x y', defaults=[10, 20]) # allow non-tuple iterable |
| 387 | self.assertEqual(Point._field_defaults, {'x': 10, 'y': 20}) |
| 388 | self.assertEqual(Point.__new__.__defaults__, (10, 20)) |
| 389 | self.assertEqual(Point(1, 2), (1, 2)) |
| 390 | self.assertEqual(Point(1), (1, 20)) |
| 391 | self.assertEqual(Point(), (10, 20)) |
| 392 | |
| 393 | Point = namedtuple('Point', 'x y', defaults=iter([10, 20])) # allow plain iterator |
| 394 | self.assertEqual(Point._field_defaults, {'x': 10, 'y': 20}) |
| 395 | self.assertEqual(Point.__new__.__defaults__, (10, 20)) |
| 396 | self.assertEqual(Point(1, 2), (1, 2)) |
| 397 | self.assertEqual(Point(1), (1, 20)) |
| 398 | self.assertEqual(Point(), (10, 20)) |
| 399 | |
| 400 | def test_readonly(self): |
| 401 | Point = namedtuple('Point', 'x y') |
nothing calls this directly
no test coverage detected