1+ import pytest
2+ import cstruct
13from cstruct import CEnum
4+ from enum import Enum
25
36
47class 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
1442def 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