Skip to content

Commit f945031

Browse files
author
Steve Canny
committed
style: add _Style.name setter
1 parent 50af0f6 commit f945031

4 files changed

Lines changed: 27 additions & 1 deletion

File tree

docx/oxml/parts/styles.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ def name_val(self):
3838
return None
3939
return name.val
4040

41+
@name_val.setter
42+
def name_val(self, value):
43+
self._remove_name()
44+
if value is not None:
45+
name = self._add_name()
46+
name.val = value
47+
4148

4249
class CT_Styles(BaseOxmlElement):
4350
"""

docx/styles/style.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ def name(self):
4242
"""
4343
return self._element.name_val
4444

45+
@name.setter
46+
def name(self, value):
47+
self._element.name_val = value
48+
4549
@property
4650
def style_id(self):
4751
"""

features/sty-style-props.feature

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ Feature: Get and set style properties
99
Then style.name is the known name
1010

1111

12-
@wip
1312
Scenario: Set name
1413
Given a style having a known name
1514
When I assign a new name to the style

tests/styles/test_style.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ def it_knows_its_name(self, name_get_fixture):
112112
style, expected_value = name_get_fixture
113113
assert style.name == expected_value
114114

115+
def it_can_change_its_name(self, name_set_fixture):
116+
style, new_value, expected_xml = name_set_fixture
117+
style.name = new_value
118+
assert style._element.xml == expected_xml
119+
115120
# fixture --------------------------------------------------------
116121

117122
@pytest.fixture(params=[
@@ -144,6 +149,17 @@ def name_get_fixture(self, request):
144149
style = BaseStyle(element(style_cxml))
145150
return style, expected_value
146151

152+
@pytest.fixture(params=[
153+
('w:style', 'Foo', 'w:style/w:name{w:val=Foo}'),
154+
('w:style/w:name{w:val=Foo}', 'Bar', 'w:style/w:name{w:val=Bar}'),
155+
('w:style/w:name{w:val=Bar}', None, 'w:style'),
156+
])
157+
def name_set_fixture(self, request):
158+
style_cxml, new_value, expected_style_cxml = request.param
159+
style = BaseStyle(element(style_cxml))
160+
expected_xml = xml(expected_style_cxml)
161+
return style, new_value, expected_xml
162+
147163
@pytest.fixture(params=[
148164
('w:style', WD_STYLE_TYPE.PARAGRAPH),
149165
('w:style{w:type=paragraph}', WD_STYLE_TYPE.PARAGRAPH),

0 commit comments

Comments
 (0)