File: test_color.py

package info (click to toggle)
python-docx 1.1.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,904 kB
  • sloc: xml: 25,311; python: 23,028; makefile: 176
file content (143 lines) | stat: -rw-r--r-- 5,437 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
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