def test_typed_namedtuple_last_defaults_overwritten(self): A = typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")), defaults=[2, 3]) a = A(5, 44) self.assertEqual(a.a, 5) self.assertEqual(a.b, 44) self.assertEqual(a.c, 3)
def test_typed_namedtuple_all_defaults(self): A = typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")), defaults=[1, 2, 3]) a = A() self.assertEqual(a.a, 1) self.assertEqual(a.b, 2) self.assertEqual(a.c, 3)
def test_typed_namedtuple_getitem_negative(self): A = typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int"))) a = A(1, 2, 3) self.assertEqual(a[-1], 3) self.assertEqual(a[-2], 2) self.assertEqual(a[-3], 1) with self.assertRaises(IndexError) as context: a[-4] self.assertEqual("tuple index out of range", context.exception.args[0])
def test_typed_namedtuple_too_many_defaults(self): with self.assertRaises(TypeError) as context: typed_namedtuple("A", (("a", "int"), ("b", "int"), ("c", "int")), defaults=[1, 0, 2, 3]) self.assertEqual("Got more default values than field names", context.exception.args[0])
def test_typed_namedtuple_create_dict(self): A = typed_namedtuple("A", {"a": "int", "b": "long"}) a = A(42, 21) self.assertEqual(a.a, 42) self.assertEqual(a.b, 21)
def test_typed_namedtuple_create_iter(self): A = typed_namedtuple("A", (("a", "int"), ("b", "long"))) a = A(42, 21) self.assertEqual(a.a, 42) self.assertEqual(a.b, 21)