Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit df04063

Browse files
DKWoodsSteve Canny
authored andcommitted
tab: add TabStops.__delitem__()
1 parent 17e7e38 commit df04063

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

docx/text/tabstops.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,19 @@ def __init__(self, element):
2626
super(TabStops, self).__init__(element, None)
2727
self._pPr = element
2828

29+
def __delitem__(self, idx):
30+
"""
31+
Remove the tab at offset *idx* in this sequence.
32+
"""
33+
tabs = self._pPr.tabs
34+
try:
35+
tabs.remove(tabs[idx])
36+
except (AttributeError, IndexError):
37+
raise IndexError('tab index out of range')
38+
39+
if len(tabs) == 0:
40+
self._pPr.remove(tabs)
41+
2942
def __getitem__(self, idx):
3043
"""
3144
Enables list-style access by index.

features/tab-access-tabs.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ Feature: Access TabStop objects
3232
| 3 | 4 |
3333

3434

35-
@wip
3635
Scenario: TabStops.__delitem__()
3736
Given a tab_stops having 3 tab stops
3837
When I remove a tab stop

tests/text/test_tabstops.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,42 @@ def it_can_add_a_tab_stop(self, add_tab_fixture):
164164
tab_stops.add_tab_stop(position, **kwargs)
165165
assert tab_stops._element.xml == expected_xml
166166

167+
def it_can_delete_a_tab_stop(self, del_fixture):
168+
tab_stops, idx, expected_xml = del_fixture
169+
del tab_stops[idx]
170+
assert tab_stops._element.xml == expected_xml
171+
172+
def it_raises_on_del_idx_invalid(self, del_raises_fixture):
173+
tab_stops, idx = del_raises_fixture
174+
with pytest.raises(IndexError) as exc:
175+
del tab_stops[idx]
176+
assert exc.value.args[0] == 'tab index out of range'
177+
167178
# fixture --------------------------------------------------------
168179

180+
@pytest.fixture(params=[
181+
('w:pPr/w:tabs/w:tab{w:pos=42}', 0,
182+
'w:pPr'),
183+
('w:pPr/w:tabs/(w:tab{w:pos=24},w:tab{w:pos=42})', 0,
184+
'w:pPr/w:tabs/w:tab{w:pos=42}'),
185+
('w:pPr/w:tabs/(w:tab{w:pos=24},w:tab{w:pos=42})', 1,
186+
'w:pPr/w:tabs/w:tab{w:pos=24}'),
187+
])
188+
def del_fixture(self, request):
189+
pPr_cxml, idx, expected_cxml = request.param
190+
tab_stops = TabStops(element(pPr_cxml))
191+
expected_xml = xml(expected_cxml)
192+
return tab_stops, idx, expected_xml
193+
194+
@pytest.fixture(params=[
195+
('w:pPr', 0),
196+
('w:pPr/w:tabs/w:tab{w:pos=42}', 1),
197+
])
198+
def del_raises_fixture(self, request):
199+
tab_stops_cxml, idx = request.param
200+
tab_stops = TabStops(element(tab_stops_cxml))
201+
return tab_stops, idx
202+
169203
@pytest.fixture(params=[
170204
('w:pPr', Twips(42), {},
171205
'w:pPr/w:tabs/w:tab{w:pos=42,w:val=left}'),

0 commit comments

Comments
 (0)