File: enum_test.py

package info (click to toggle)
mautrix-python 0.20.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,812 kB
  • sloc: python: 19,103; makefile: 16
file content (67 lines) | stat: -rw-r--r-- 1,928 bytes parent folder | download
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
# Copyright (c) 2022 Tulir Asokan
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from attr import dataclass

from .enum import ExtensibleEnum
from .serializable_attrs import SerializableAttrs


def test_extensible_enum_int():
    class Hello(ExtensibleEnum):
        HI = 1
        HMM = 2

    assert Hello.HI.value == 1
    assert Hello.HI.key == "HI"
    assert 1 in Hello
    assert Hello(1) == Hello.HI
    assert Hello["HMM"] == Hello.HMM

    assert len(Hello) == 2
    hello3 = Hello(3)
    assert hello3.value == 3
    assert not hello3.key
    Hello.YAY = hello3
    assert len(Hello) == 3
    assert hello3.key == "YAY"

    @dataclass
    class Wrapper(SerializableAttrs):
        hello: Hello

    assert Wrapper.deserialize({"hello": 1}).hello == Hello.HI
    assert Wrapper.deserialize({"hello": 2}).hello == Hello.HMM
    assert Wrapper.deserialize({"hello": 3}).hello == hello3
    assert Wrapper.deserialize({"hello": 4}).hello.value == 4


def test_extensible_enum_str():
    class Hello(ExtensibleEnum):
        HI = "hi"
        HMM = "🤔"

    assert Hello.HI.value == "hi"
    assert Hello.HI.key == "HI"
    assert "🤔" in Hello
    assert Hello("🤔") == Hello.HMM
    assert Hello["HI"] == Hello.HI

    assert len(Hello) == 2
    hello3 = Hello("yay")
    assert hello3.value == "yay"
    assert not hello3.key
    Hello.YAY = hello3
    assert len(Hello) == 3
    assert hello3.key == "YAY"

    @dataclass
    class Wrapper(SerializableAttrs):
        hello: Hello

    assert Wrapper.deserialize({"hello": "hi"}).hello == Hello.HI
    assert Wrapper.deserialize({"hello": "🤔"}).hello == Hello.HMM
    assert Wrapper.deserialize({"hello": "yay"}).hello == hello3
    assert Wrapper.deserialize({"hello": "thonk"}).hello.value == "thonk"