Skip to content

Commit

Permalink
Adding StrEnum tests and fixing lowercase
Browse files Browse the repository at this point in the history
  • Loading branch information
DarkKronicle authored and felix-hilden committed Apr 12, 2023
1 parent 7ab5df6 commit e399d34
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/tekore/_model/serialise.py
Expand Up @@ -13,8 +13,10 @@ class StrEnumMeta(EnumMeta):
def __new__(metacls, cls, bases, classdict, **kwds):
enum_class = super().__new__(metacls, cls, bases, classdict, **kwds)
# Make all keys lowercase
for k, v in enum_class._member_map_.items():
enum_class._member_map_[k] = v.lower()
copied_member_map = dict(enum_class._member_map_)
enum_class._member_map_.clear()
for k, v in copied_member_map.items():
enum_class._member_map_[k.lower()] = v
return enum_class

def __getitem__(self, name: str):
Expand Down
38 changes: 38 additions & 0 deletions tests/model.py
Expand Up @@ -22,6 +22,44 @@ class E(StrEnum):
c = "c"


class ECaps(StrEnum):
a = "A"
b = "B"
c = "C"


class TestEnumCaseInsensitive:
def test_all_caps(self):
assert E["A"] == E.a
assert E["B"] == E.b
assert E["C"] == E.c

def test_all_lowercase(self):
assert E["a"] is E.a
assert E["b"] is E.b
assert E["c"] is E.c

def test_in_caps(self):
assert ECaps.a in ECaps
assert ECaps.b in ECaps
assert ECaps.c in ECaps

def test_all_caps_caps_keys(self):
assert ECaps["A"] == ECaps.a
assert ECaps["B"] == ECaps.b
assert ECaps["C"] == ECaps.c

def test_all_lowercase_caps_keys(self):
assert ECaps["a"] is ECaps.a
assert ECaps["b"] is ECaps.b
assert ECaps["c"] is ECaps.c

def test_non_destructive_iter(self):
# Should not change caps when iterating or accessing values in other means
for e in ECaps:
assert e.upper() == e


class TestSerialisableEnum:
def test_enum_repr_shows_enum(self):
assert "E.a" in repr(E.a)
Expand Down

0 comments on commit e399d34

Please sign in to comment.