Skip to content

Commit 87ce6d3

Browse files
committed
Add some enum tests
1 parent c58f158 commit 87ce6d3

1 file changed

Lines changed: 77 additions & 6 deletions

File tree

tests/test_cenum.py

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,42 @@
1+
import pytest
2+
import cstruct
13
from cstruct import CEnum
4+
from enum import Enum
25

36

47
class Dummy(CEnum):
58
__enum__ = """
6-
A,
7-
B,
8-
C = 2,
9-
D = 5 + 7,
10-
E = 2
11-
"""
9+
#define SOME_DEFINE 7
10+
11+
A,
12+
B,
13+
C = 2,
14+
D = 5 + SOME_DEFINE,
15+
E = 2
16+
"""
17+
18+
19+
class HtmlFont(CEnum):
20+
__size__ = 2
21+
__def__ = """
22+
#define NONE 0
23+
24+
enum htmlfont {
25+
HTMLFONT_NONE = NONE,
26+
HTMLFONT_BOLD,
27+
HTMLFONT_ITALIC,
28+
};
29+
"""
30+
31+
32+
class StructWithEnum(cstruct.MemCStruct):
33+
__byte_order__ = cstruct.LITTLE_ENDIAN
34+
__def__ = """
35+
struct StructWithEnum {
36+
enum HtmlFont font;
37+
unsigned int font_size;
38+
}
39+
"""
1240

1341

1442
def test_dummy():
@@ -17,3 +45,46 @@ def test_dummy():
1745
assert Dummy.C == 2
1846
assert Dummy.D == 12
1947
assert Dummy.E == 2
48+
49+
50+
def test_missing_attribute():
51+
with pytest.raises(AttributeError):
52+
assert Dummy.F
53+
54+
55+
def test_set_attribute():
56+
with pytest.raises(AttributeError):
57+
Dummy.A = 100
58+
59+
60+
def test_html_font():
61+
assert HtmlFont.HTMLFONT_NONE == 0
62+
assert HtmlFont.HTMLFONT_BOLD == 1
63+
assert HtmlFont.HTMLFONT_ITALIC == 2
64+
65+
66+
def test_parse_enum():
67+
reply_stat = cstruct.parse("enum reply_stat { MSG_ACCEPTED=0, MSG_DENIED=1 }")
68+
assert isinstance(reply_stat.MSG_ACCEPTED, Enum)
69+
assert isinstance(reply_stat.MSG_DENIED, Enum)
70+
assert reply_stat.MSG_ACCEPTED == 0
71+
assert reply_stat.MSG_DENIED == 1
72+
73+
74+
def test_struct_with_enum():
75+
s = StructWithEnum()
76+
s.font = HtmlFont.HTMLFONT_BOLD
77+
s.font_size = 11
78+
assert s.font == HtmlFont.HTMLFONT_BOLD
79+
assert s.font_size == 11
80+
81+
s.font = HtmlFont.HTMLFONT_NONE
82+
s.font_size = 20
83+
assert s.font == HtmlFont.HTMLFONT_NONE
84+
assert s.font_size == 20
85+
packed = s.pack()
86+
87+
s1 = StructWithEnum()
88+
s1.unpack(packed)
89+
assert s1.font == HtmlFont.HTMLFONT_NONE
90+
assert s1.font_size == 20

0 commit comments

Comments
 (0)