Map enum int's into Enums redux (#293)
Re-implement Enum to be faster along with being an open set --------- Co-authored-by: ydylla <ydylla@gmail.com>
This commit is contained in:
committed by
GitHub
parent
8659c51123
commit
c82816b8be
@@ -82,3 +82,23 @@ def test_repeated_enum_with_non_list_iterables_to_dict():
|
||||
yield Choice.THREE
|
||||
|
||||
assert Test(choices=enum_generator()).to_dict()["choices"] == ["ONE", "THREE"]
|
||||
|
||||
|
||||
def test_enum_mapped_on_parse():
|
||||
# test default value
|
||||
b = Test().parse(bytes(Test()))
|
||||
assert b.choice.name == Choice.ZERO.name
|
||||
assert b.choices == []
|
||||
|
||||
# test non default value
|
||||
a = Test().parse(bytes(Test(choice=Choice.ONE)))
|
||||
assert a.choice.name == Choice.ONE.name
|
||||
assert b.choices == []
|
||||
|
||||
# test repeated
|
||||
c = Test().parse(bytes(Test(choices=[Choice.THREE, Choice.FOUR])))
|
||||
assert c.choices[0].name == Choice.THREE.name
|
||||
assert c.choices[1].name == Choice.FOUR.name
|
||||
|
||||
# bonus: defaults after empty init are also mapped
|
||||
assert Test().choice.name == Choice.ZERO.name
|
||||
|
79
tests/test_enum.py
Normal file
79
tests/test_enum.py
Normal file
@@ -0,0 +1,79 @@
|
||||
from typing import (
|
||||
Optional,
|
||||
Tuple,
|
||||
)
|
||||
|
||||
import pytest
|
||||
|
||||
import betterproto
|
||||
|
||||
|
||||
class Colour(betterproto.Enum):
|
||||
RED = 1
|
||||
GREEN = 2
|
||||
BLUE = 3
|
||||
|
||||
|
||||
PURPLE = Colour.__new__(Colour, name=None, value=4)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"member, str_value",
|
||||
[
|
||||
(Colour.RED, "RED"),
|
||||
(Colour.GREEN, "GREEN"),
|
||||
(Colour.BLUE, "BLUE"),
|
||||
],
|
||||
)
|
||||
def test_str(member: Colour, str_value: str) -> None:
|
||||
assert str(member) == str_value
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"member, repr_value",
|
||||
[
|
||||
(Colour.RED, "Colour.RED"),
|
||||
(Colour.GREEN, "Colour.GREEN"),
|
||||
(Colour.BLUE, "Colour.BLUE"),
|
||||
],
|
||||
)
|
||||
def test_repr(member: Colour, repr_value: str) -> None:
|
||||
assert repr(member) == repr_value
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"member, values",
|
||||
[
|
||||
(Colour.RED, ("RED", 1)),
|
||||
(Colour.GREEN, ("GREEN", 2)),
|
||||
(Colour.BLUE, ("BLUE", 3)),
|
||||
(PURPLE, (None, 4)),
|
||||
],
|
||||
)
|
||||
def test_name_values(member: Colour, values: Tuple[Optional[str], int]) -> None:
|
||||
assert (member.name, member.value) == values
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"member, input_str",
|
||||
[
|
||||
(Colour.RED, "RED"),
|
||||
(Colour.GREEN, "GREEN"),
|
||||
(Colour.BLUE, "BLUE"),
|
||||
],
|
||||
)
|
||||
def test_from_string(member: Colour, input_str: str) -> None:
|
||||
assert Colour.from_string(input_str) == member
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"member, input_int",
|
||||
[
|
||||
(Colour.RED, 1),
|
||||
(Colour.GREEN, 2),
|
||||
(Colour.BLUE, 3),
|
||||
(PURPLE, 4),
|
||||
],
|
||||
)
|
||||
def test_try_value(member: Colour, input_int: int) -> None:
|
||||
assert Colour.try_value(input_int) == member
|
Reference in New Issue
Block a user