forked from scanny/python-pptx
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_enum.py
More file actions
98 lines (72 loc) · 2.83 KB
/
test_enum.py
File metadata and controls
98 lines (72 loc) · 2.83 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# encoding: utf-8
"""
Test suite for pptx.enum module, focused on base classes. Configured a little
differently because of the meta-programming, the two enumeration classes at
the top constitute the entire fixture and the tests themselves just make
assertions on those.
"""
from __future__ import absolute_import, print_function
import pytest
from pptx.enum.base import (
alias,
Enumeration,
EnumMember,
ReturnValueOnlyEnumMember,
XmlEnumeration,
XmlMappedEnumMember,
)
@alias("BARFOO")
class FOOBAR(Enumeration):
"""
Enumeration docstring
"""
__ms_name__ = "MsoFoobar"
__url__ = "http://msdn.microsoft.com/foobar.aspx"
__members__ = (
EnumMember("READ_WRITE", 1, "Readable and settable"),
ReturnValueOnlyEnumMember("READ_ONLY", -2, "Return value only"),
)
@alias("XML-FU")
class XMLFOO(XmlEnumeration):
"""
XmlEnumeration docstring
"""
__ms_name__ = "MsoXmlFoobar"
__url__ = "http://msdn.microsoft.com/msoxmlfoobar.aspx"
__members__ = (
XmlMappedEnumMember(None, None, None, "No setting"),
XmlMappedEnumMember("XML_RW", 42, "attrVal", "Read/write setting"),
ReturnValueOnlyEnumMember("RO", -2, "Return value only;"),
)
class DescribeEnumeration(object):
def it_has_the_right_metaclass(self):
assert type(FOOBAR).__name__ == "MetaEnumeration"
def it_provides_an_EnumValue_instance_for_each_named_member(self):
for obj in (FOOBAR.READ_WRITE, FOOBAR.READ_ONLY):
assert type(obj).__name__ == "EnumValue"
def it_provides_the_enumeration_value_for_each_named_member(self):
assert FOOBAR.READ_WRITE == 1
assert FOOBAR.READ_ONLY == -2
def it_knows_if_a_setting_is_valid(self):
FOOBAR.validate(FOOBAR.READ_WRITE)
with pytest.raises(ValueError):
FOOBAR.validate("foobar")
with pytest.raises(ValueError):
FOOBAR.validate(FOOBAR.READ_ONLY)
def it_can_be_referred_to_by_a_convenience_alias_if_defined(self):
assert BARFOO is FOOBAR # noqa
class DescribeEnumValue(object):
def it_provides_its_symbolic_name_as_its_string_value(self):
assert ("%s" % FOOBAR.READ_WRITE) == "READ_WRITE (1)"
def it_provides_its_description_as_its_docstring(self):
assert FOOBAR.READ_ONLY.__doc__ == "Return value only"
class DescribeXmlEnumeration(object):
def it_knows_the_XML_value_for_each_of_its_xml_members(self):
assert XMLFOO.to_xml(XMLFOO.XML_RW) == "attrVal"
assert XMLFOO.to_xml(42) == "attrVal"
with pytest.raises(ValueError):
XMLFOO.to_xml(XMLFOO.RO)
def it_can_map_each_of_its_xml_members_from_the_XML_value(self):
assert XMLFOO.from_xml(None) is None
assert XMLFOO.from_xml("attrVal") == XMLFOO.XML_RW
assert str(XMLFOO.from_xml("attrVal")) == "XML_RW (42)"