X Tutup
Skip to content

Commit 9fa9d0a

Browse files
author
Steve Canny
committed
run: add validator to Run.underline setter
1 parent 194f77d commit 9fa9d0a

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

docx/enum/text.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ class WD_UNDERLINE(XmlEnumeration):
3939
__url__ = 'http://msdn.microsoft.com/en-us/library/office/ff822388.aspx'
4040

4141
__members__ = (
42+
XmlMappedEnumMember(
43+
None, None, None, 'Inherit underline setting from containing par'
44+
'agraph.'
45+
),
4246
XmlMappedEnumMember(
4347
'NONE', 0, 'none', 'No underline. This setting overrides any inh'
4448
'erited underline value, so can be used to remove underline from'

docx/text.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from __future__ import absolute_import, print_function, unicode_literals
88

9-
from docx.enum.text import WD_BREAK
9+
from docx.enum.text import WD_BREAK, WD_UNDERLINE
1010

1111

1212
def boolproperty(f):
@@ -346,6 +346,9 @@ def underline(self):
346346

347347
@underline.setter
348348
def underline(self, value):
349+
if not WD_UNDERLINE.is_valid_setting(value):
350+
tmpl = "'%s' is not a valid setting for Run.underline"
351+
raise ValueError(tmpl % value)
349352
self._r.underline = value
350353

351354
@boolproperty

tests/test_text.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,12 @@ def it_can_change_its_underline_type(self, underline_set_fixture):
161161
run.underline = underline
162162
assert run._r.xml == expected_xml
163163

164+
def it_raises_on_assign_invalid_underline_type(
165+
self, underline_raise_fixture):
166+
run, underline = underline_raise_fixture
167+
with pytest.raises(ValueError):
168+
run.underline = underline
169+
164170
def it_can_add_text(self, add_text_fixture):
165171
run, text_str, expected_xml, Text_ = add_text_fixture
166172
_text = run.add_text(text_str)
@@ -375,6 +381,13 @@ def underline_get_fixture(self, request):
375381
run = Run(r)
376382
return run, expected_prop_value
377383

384+
@pytest.fixture(params=['foobar', 42, 'single'])
385+
def underline_raise_fixture(self, request):
386+
underline = request.param
387+
r = self.r_bldr_with_underline(None).element
388+
run = Run(r)
389+
return run, underline
390+
378391
@pytest.fixture(params=[
379392
(None, True, 'single'),
380393
(None, False, 'none'),

0 commit comments

Comments
 (0)
X Tutup