๐Ÿ“ฆ woodruffw / ordered_enum

๐Ÿ“„ test_ordered_enum.py ยท 85 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85import enum

import pytest

from ordered_enum import OrderedEnum, ValueOrderedEnum


def test_is_enum():
    class X(OrderedEnum):
        Foo = 1

    class Y(ValueOrderedEnum):
        Foo = 1

    assert issubclass(X, enum.Enum)
    assert issubclass(Y, enum.Enum)


def test_total_ordering():
    class X(OrderedEnum):
        Foo = 3
        Bar = 2
        Baz = 1

    @enum.unique
    class Y(ValueOrderedEnum):
        Foo = 1
        Bar = 2
        Baz = 3

    for member in X:
        assert member == member

    assert X.Baz > X.Bar > X.Foo
    assert X.Baz >= X.Bar >= X.Foo
    assert X.Foo < X.Bar < X.Baz
    assert X.Foo <= X.Bar <= X.Baz
    assert X.Foo != X.Bar and X.Bar != X.Baz and X.Foo != X.Baz

    for member in Y:
        assert member == member

    assert Y.Baz > Y.Bar > Y.Foo
    assert Y.Baz >= Y.Bar >= Y.Foo
    assert Y.Foo < Y.Bar < Y.Baz
    assert Y.Foo <= Y.Bar <= Y.Baz
    assert Y.Foo != Y.Bar and Y.Bar != Y.Baz and Y.Foo != Y.Baz


def test_total_ordering_typesafe():
    class X(OrderedEnum):
        Foo = "a"
        Bar = "b"
        Baz = "c"

    with pytest.raises(TypeError):
        "a" < X.Baz

    @enum.unique
    class Y(ValueOrderedEnum):
        Foo = "a"
        Bar = "b"
        Baz = "c"

    with pytest.raises(TypeError):
        "a" < Y.Baz


def test_total_value_ordering_unsound():
    class X(ValueOrderedEnum):
        Foo = 1
        Bar = 1
        Baz = 2

    assert not (X.Foo < X.Bar)
    assert not (X.Foo > X.Bar)


def test_mypy_success():
    from mypy import api

    result = api.run([__file__])

    assert "Success: no issues found in 1 source file" in result[0]