1010
1111import pytest
1212
13+ from docx .styles .style import BaseStyle
1314from docx .styles .styles import Styles
1415
1516from ..unitutil .cxml import element
17+ from ..unitutil .mock import call , function_mock , instance_mock
1618
1719
1820class DescribeStyles (object ):
@@ -21,8 +23,33 @@ def it_knows_its_length(self, len_fixture):
2123 styles , expected_value = len_fixture
2224 assert len (styles ) == expected_value
2325
26+ def it_can_iterate_over_its_styles (self , iter_fixture ):
27+ styles , expected_count , style_ , StyleFactory_ , expected_calls = (
28+ iter_fixture
29+ )
30+ count = 0
31+ for style in styles :
32+ assert style is style_
33+ count += 1
34+ assert count == expected_count
35+ assert StyleFactory_ .call_args_list == expected_calls
36+
2437 # fixture --------------------------------------------------------
2538
39+ @pytest .fixture (params = [
40+ ('w:styles' , 0 ),
41+ ('w:styles/w:style' , 1 ),
42+ ('w:styles/(w:style,w:style)' , 2 ),
43+ ('w:styles/(w:style,w:style,w:style)' , 3 ),
44+ ])
45+ def iter_fixture (self , request , StyleFactory_ , style_ ):
46+ styles_cxml , expected_count = request .param
47+ styles_elm = element (styles_cxml )
48+ styles = Styles (styles_elm )
49+ expected_calls = [call (style_elm ) for style_elm in styles_elm ]
50+ StyleFactory_ .return_value = style_
51+ return styles , expected_count , style_ , StyleFactory_ , expected_calls
52+
2653 @pytest .fixture (params = [
2754 ('w:styles' , 0 ),
2855 ('w:styles/w:style' , 1 ),
@@ -33,3 +60,13 @@ def len_fixture(self, request):
3360 styles_cxml , expected_value = request .param
3461 styles = Styles (element (styles_cxml ))
3562 return styles , expected_value
63+
64+ # fixture components ---------------------------------------------
65+
66+ @pytest .fixture
67+ def style_ (self , request ):
68+ return instance_mock (request , BaseStyle )
69+
70+ @pytest .fixture
71+ def StyleFactory_ (self , request ):
72+ return function_mock (request , 'docx.styles.styles.StyleFactory' )
0 commit comments