Skip to content

Commit 018cb8c

Browse files
DKWoodsSteve Canny
authored and
Steve Canny
committed
tabs: add TabStop.leader setter
1 parent ce38136 commit 018cb8c

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

docx/text/tabstops.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,15 @@ def alignment(self, value):
7272
def leader(self):
7373
"""
7474
A member of :ref:`WdTabLeader` specifying a repeating character used
75-
as a "leader", filling in the space spanned by this tab.
75+
as a "leader", filling in the space spanned by this tab. Assigning
76+
|None| produces the same result as assigning `WD_TAB_LEADER.SPACES`.
7677
"""
7778
return self._element.leader
7879

80+
@leader.setter
81+
def leader(self, value):
82+
self._element.leader = value
83+
7984
@property
8085
def position(self):
8186
"""

features/tab-tabstop-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ Feature: Tab stop properties
5656
| a dotted | DOTS |
5757

5858

59-
@wip
6059
Scenario Outline: Set tab stop leader
6160
Given a tab stop having <leader> leader
6261
When I assign <member> to tab_stop.leader

tests/text/test_tabstops.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,15 @@ def it_can_change_its_alignment(self, alignment_set_fixture):
3939
tab_stop.alignment = value
4040
assert tab_stop._element.xml == expected_xml
4141

42-
def it_knows_its_leader(self, leader_fixture):
43-
tab_stop, expected_value = leader_fixture
42+
def it_knows_its_leader(self, leader_get_fixture):
43+
tab_stop, expected_value = leader_get_fixture
4444
assert tab_stop.leader == expected_value
4545

46+
def it_can_change_its_leader(self, leader_set_fixture):
47+
tab_stop, value, expected_xml = leader_set_fixture
48+
tab_stop.leader = value
49+
assert tab_stop._element.xml == expected_xml
50+
4651
# fixture --------------------------------------------------------
4752

4853
@pytest.fixture(params=[
@@ -71,12 +76,29 @@ def alignment_set_fixture(self, request):
7176
('w:tab{w:leader=none}', 'SPACES'),
7277
('w:tab{w:leader=dot}', 'DOTS'),
7378
])
74-
def leader_fixture(self, request):
79+
def leader_get_fixture(self, request):
7580
tab_stop_cxml, member = request.param
7681
tab_stop = TabStop(element(tab_stop_cxml))
7782
expected_value = getattr(WD_TAB_LEADER, member)
7883
return tab_stop, expected_value
7984

85+
@pytest.fixture(params=[
86+
('w:tab', 'DOTS', 'w:tab{w:leader=dot}'),
87+
('w:tab{w:leader=dot}', 'DASHES', 'w:tab{w:leader=hyphen}'),
88+
('w:tab{w:leader=hyphen}', 'SPACES', 'w:tab'),
89+
('w:tab{w:leader=hyphen}', None, 'w:tab'),
90+
('w:tab', 'SPACES', 'w:tab'),
91+
('w:tab', None, 'w:tab'),
92+
])
93+
def leader_set_fixture(self, request):
94+
tab_stop_cxml, new_value, expected_cxml = request.param
95+
tab_stop = TabStop(element(tab_stop_cxml))
96+
value = (
97+
None if new_value is None else getattr(WD_TAB_LEADER, new_value)
98+
)
99+
expected_xml = xml(expected_cxml)
100+
return tab_stop, value, expected_xml
101+
80102
@pytest.fixture
81103
def position_get_fixture(self, request):
82104
tab_stop = TabStop(element('w:tab{w:pos=720}'))

0 commit comments

Comments
 (0)