Spaces:
Sleeping
Sleeping
| from . import Enum | |
| from dataclasses import dataclass | |
| from unittest import TestCase | |
| class TestEnumV37(TestCase): | |
| def test_repr_with_dataclass(self): | |
| "ensure dataclass-mixin has correct repr()" | |
| # | |
| # check overridden dataclass __repr__ is used | |
| # | |
| from dataclasses import dataclass, field | |
| class Foo: | |
| __qualname__ = 'Foo' | |
| a: int | |
| def __repr__(self): | |
| return 'ha hah!' | |
| class Entries(Foo, Enum): | |
| ENTRY1 = 1 | |
| self.assertEqual(repr(Entries.ENTRY1), '<Entries.ENTRY1: ha hah!>') | |
| self.assertEqual(Entries.ENTRY1.value, Foo(1)) | |
| self.assertTrue(isinstance(Entries.ENTRY1, Foo)) | |
| self.assertTrue(Entries._member_type_ is Foo, Entries._member_type_) | |
| # | |
| # check auto-generated dataclass __repr__ is not used | |
| # | |
| class CreatureDataMixin: | |
| __qualname__ = 'CreatureDataMixin' | |
| size: str | |
| legs: int | |
| tail: bool = field(repr=False, default=True) | |
| class Creature(CreatureDataMixin, Enum): | |
| __qualname__ = 'Creature' | |
| BEETLE = ('small', 6) | |
| DOG = ('medium', 4) | |
| self.assertEqual(repr(Creature.DOG), "<Creature.DOG: size='medium', legs=4>") | |
| # | |
| # check inherited repr used | |
| # | |
| class Huh: | |
| def __repr__(self): | |
| return 'inherited' | |
| class CreatureDataMixin(Huh): | |
| __qualname__ = 'CreatureDataMixin' | |
| size: str | |
| legs: int | |
| tail: bool = field(repr=False, default=True) | |
| class Creature(CreatureDataMixin, Enum): | |
| __qualname__ = 'Creature' | |
| BEETLE = ('small', 6) | |
| DOG = ('medium', 4) | |
| self.assertEqual(repr(Creature.DOG), "<Creature.DOG: inherited>") | |
| # | |
| # check default object.__repr__ used if nothing provided | |
| # | |
| class CreatureDataMixin: | |
| __qualname__ = 'CreatureDataMixin' | |
| size: str | |
| legs: int | |
| tail: bool = field(repr=False, default=True) | |
| class Creature(CreatureDataMixin, Enum): | |
| __qualname__ = 'Creature' | |
| BEETLE = ('small', 6) | |
| DOG = ('medium', 4) | |
| self.assertRegex(repr(Creature.DOG), "<Creature.DOG: .*CreatureDataMixin object at .*>") | |
| if __name__ == '__main__': | |
| raise RuntimeError("'test_v3.py' should not be run by itself; it's included in 'test.py'") | |