Repository URL to install this package:
|
Version:
0.8.10 ▾
|
# encoding: utf-8
"""
Test suite for the docx.shared module
"""
from __future__ import (
absolute_import, division, print_function, unicode_literals
)
import pytest
from docx.opc.part import XmlPart
from docx.shared import (
ElementProxy, Length, Cm, Emu, Inches, Mm, Pt, RGBColor, Twips
)
from .unitutil.cxml import element
from .unitutil.mock import instance_mock
class DescribeElementProxy(object):
def it_knows_when_its_equal_to_another_proxy_object(self, eq_fixture):
proxy, proxy_2, proxy_3, not_a_proxy = eq_fixture
assert (proxy == proxy_2) is True
assert (proxy == proxy_3) is False
assert (proxy == not_a_proxy) is False
assert (proxy != proxy_2) is False
assert (proxy != proxy_3) is True
assert (proxy != not_a_proxy) is True
def it_knows_its_element(self, element_fixture):
proxy, element = element_fixture
assert proxy.element is element
def it_knows_its_part(self, part_fixture):
proxy, part_ = part_fixture
assert proxy.part is part_
# fixture --------------------------------------------------------
@pytest.fixture
def element_fixture(self):
p = element('w:p')
proxy = ElementProxy(p)
return proxy, p
@pytest.fixture
def eq_fixture(self):
p, q = element('w:p'), element('w:p')
proxy = ElementProxy(p)
proxy_2 = ElementProxy(p)
proxy_3 = ElementProxy(q)
not_a_proxy = 'Foobar'
return proxy, proxy_2, proxy_3, not_a_proxy
@pytest.fixture
def part_fixture(self, other_proxy_, part_):
other_proxy_.part = part_
proxy = ElementProxy(None, other_proxy_)
return proxy, part_
# fixture components ---------------------------------------------
@pytest.fixture
def other_proxy_(self, request):
return instance_mock(request, ElementProxy)
@pytest.fixture
def part_(self, request):
return instance_mock(request, XmlPart)
class DescribeLength(object):
def it_can_construct_from_convenient_units(self, construct_fixture):
UnitCls, units_val, emu = construct_fixture
length = UnitCls(units_val)
assert isinstance(length, Length)
assert length == emu
def it_can_self_convert_to_convenient_units(self, units_fixture):
emu, units_prop_name, expected_length_in_units, type_ = units_fixture
length = Length(emu)
length_in_units = getattr(length, units_prop_name)
assert length_in_units == expected_length_in_units
assert isinstance(length_in_units, type_)
# fixtures -------------------------------------------------------
@pytest.fixture(params=[
(Length, 914400, 914400),
(Inches, 1.1, 1005840),
(Cm, 2.53, 910799),
(Emu, 9144.9, 9144),
(Mm, 13.8, 496800),
(Pt, 24.5, 311150),
(Twips, 360, 228600),
])
def construct_fixture(self, request):
UnitCls, units_val, emu = request.param
return UnitCls, units_val, emu
@pytest.fixture(params=[
(914400, 'inches', 1.0, float),
(914400, 'cm', 2.54, float),
(914400, 'emu', 914400, int),
(914400, 'mm', 25.4, float),
(914400, 'pt', 72.0, float),
(914400, 'twips', 1440, int),
])
def units_fixture(self, request):
emu, units_prop_name, expected_length_in_units, type_ = request.param
return emu, units_prop_name, expected_length_in_units, type_
class DescribeRGBColor(object):
def it_is_natively_constructed_using_three_ints_0_to_255(self):
RGBColor(0x12, 0x34, 0x56)
with pytest.raises(ValueError):
RGBColor('12', '34', '56')
with pytest.raises(ValueError):
RGBColor(-1, 34, 56)
with pytest.raises(ValueError):
RGBColor(12, 256, 56)
def it_can_construct_from_a_hex_string_rgb_value(self):
rgb = RGBColor.from_string('123456')
assert rgb == RGBColor(0x12, 0x34, 0x56)
def it_can_provide_a_hex_string_rgb_value(self):
assert str(RGBColor(0x12, 0x34, 0x56)) == '123456'
def it_has_a_custom_repr(self):
rgb_color = RGBColor(0x42, 0xF0, 0xBA)
assert repr(rgb_color) == 'RGBColor(0x42, 0xf0, 0xba)'