forked from python-openxml/python-docx
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_color.py
More file actions
143 lines (128 loc) · 5.31 KB
/
test_color.py
File metadata and controls
143 lines (128 loc) · 5.31 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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
"""Test suite for docx.dml.color module."""
import pytest
from docx.dml.color import ColorFormat
from docx.enum.dml import MSO_COLOR_TYPE, MSO_THEME_COLOR
from docx.shared import RGBColor
from ..unitutil.cxml import element, xml
class DescribeColorFormat:
def it_knows_its_color_type(self, type_fixture):
color_format, expected_value = type_fixture
assert color_format.type == expected_value
def it_knows_its_RGB_value(self, rgb_get_fixture):
color_format, expected_value = rgb_get_fixture
assert color_format.rgb == expected_value
def it_can_change_its_RGB_value(self, rgb_set_fixture):
color_format, new_value, expected_xml = rgb_set_fixture
color_format.rgb = new_value
assert color_format._element.xml == expected_xml
def it_knows_its_theme_color(self, theme_color_get_fixture):
color_format, expected_value = theme_color_get_fixture
assert color_format.theme_color == expected_value
def it_can_change_its_theme_color(self, theme_color_set_fixture):
color_format, new_value, expected_xml = theme_color_set_fixture
color_format.theme_color = new_value
assert color_format._element.xml == expected_xml
# fixtures ---------------------------------------------
@pytest.fixture(
params=[
("w:r", None),
("w:r/w:rPr", None),
("w:r/w:rPr/w:color{w:val=auto}", None),
("w:r/w:rPr/w:color{w:val=4224FF}", "4224ff"),
("w:r/w:rPr/w:color{w:val=auto,w:themeColor=accent1}", None),
("w:r/w:rPr/w:color{w:val=F00BA9,w:themeColor=accent1}", "f00ba9"),
]
)
def rgb_get_fixture(self, request):
r_cxml, rgb = request.param
color_format = ColorFormat(element(r_cxml))
expected_value = None if rgb is None else RGBColor.from_string(rgb)
return color_format, expected_value
@pytest.fixture(
params=[
("w:r", RGBColor(10, 20, 30), "w:r/w:rPr/w:color{w:val=0A141E}"),
("w:r/w:rPr", RGBColor(1, 2, 3), "w:r/w:rPr/w:color{w:val=010203}"),
(
"w:r/w:rPr/w:color{w:val=123abc}",
RGBColor(42, 24, 99),
"w:r/w:rPr/w:color{w:val=2A1863}",
),
(
"w:r/w:rPr/w:color{w:val=auto}",
RGBColor(16, 17, 18),
"w:r/w:rPr/w:color{w:val=101112}",
),
(
"w:r/w:rPr/w:color{w:val=234bcd,w:themeColor=dark1}",
RGBColor(24, 42, 99),
"w:r/w:rPr/w:color{w:val=182A63}",
),
("w:r/w:rPr/w:color{w:val=234bcd,w:themeColor=dark1}", None, "w:r/w:rPr"),
("w:r", None, "w:r"),
]
)
def rgb_set_fixture(self, request):
r_cxml, new_value, expected_cxml = request.param
color_format = ColorFormat(element(r_cxml))
expected_xml = xml(expected_cxml)
return color_format, new_value, expected_xml
@pytest.fixture(
params=[
("w:r", None),
("w:r/w:rPr", None),
("w:r/w:rPr/w:color{w:val=auto}", None),
("w:r/w:rPr/w:color{w:val=4224FF}", None),
("w:r/w:rPr/w:color{w:themeColor=accent1}", "ACCENT_1"),
("w:r/w:rPr/w:color{w:val=F00BA9,w:themeColor=dark1}", "DARK_1"),
]
)
def theme_color_get_fixture(self, request):
r_cxml, value = request.param
color_format = ColorFormat(element(r_cxml))
expected_value = None if value is None else getattr(MSO_THEME_COLOR, value)
return color_format, expected_value
@pytest.fixture(
params=[
("w:r", "ACCENT_1", "w:r/w:rPr/w:color{w:val=000000,w:themeColor=accent1}"),
(
"w:r/w:rPr",
"ACCENT_2",
"w:r/w:rPr/w:color{w:val=000000,w:themeColor=accent2}",
),
(
"w:r/w:rPr/w:color{w:val=101112}",
"ACCENT_3",
"w:r/w:rPr/w:color{w:val=101112,w:themeColor=accent3}",
),
(
"w:r/w:rPr/w:color{w:val=234bcd,w:themeColor=dark1}",
"LIGHT_2",
"w:r/w:rPr/w:color{w:val=234bcd,w:themeColor=light2}",
),
("w:r/w:rPr/w:color{w:val=234bcd,w:themeColor=dark1}", None, "w:r/w:rPr"),
("w:r", None, "w:r"),
]
)
def theme_color_set_fixture(self, request):
r_cxml, member, expected_cxml = request.param
color_format = ColorFormat(element(r_cxml))
new_value = None if member is None else getattr(MSO_THEME_COLOR, member)
expected_xml = xml(expected_cxml)
return color_format, new_value, expected_xml
@pytest.fixture(
params=[
("w:r", None),
("w:r/w:rPr", None),
("w:r/w:rPr/w:color{w:val=auto}", MSO_COLOR_TYPE.AUTO),
("w:r/w:rPr/w:color{w:val=4224FF}", MSO_COLOR_TYPE.RGB),
("w:r/w:rPr/w:color{w:themeColor=dark1}", MSO_COLOR_TYPE.THEME),
(
"w:r/w:rPr/w:color{w:val=F00BA9,w:themeColor=accent1}",
MSO_COLOR_TYPE.THEME,
),
]
)
def type_fixture(self, request):
r_cxml, expected_value = request.param
color_format = ColorFormat(element(r_cxml))
return color_format, expected_value