@@ -64,6 +64,15 @@ def it_knows_its_page_margins(self, margins_get_fixture):
6464 assert section .header_distance == header
6565 assert section .footer_distance == footer
6666
67+ def it_can_change_its_page_margins (self , margins_set_fixture ):
68+ section , margin_prop_name , new_value , expected_xml = (
69+ margins_set_fixture
70+ )
71+ print (section ._sectPr .xml )
72+ setattr (section , margin_prop_name , new_value )
73+ print (section ._sectPr .xml )
74+ assert section ._sectPr .xml == expected_xml
75+
6776 # fixtures -------------------------------------------------------
6877
6978 @pytest .fixture (params = [
@@ -74,25 +83,50 @@ def it_knows_its_page_margins(self, margins_get_fixture):
7483 def margins_get_fixture (self , request ):
7584 (has_pgMar_child , left , right , top , bottom , gutter , header ,
7685 footer ) = request .param
77- pgMar_bldr = self .pgMar_bldr (
78- has_pgMar_child , left = left , right = right , top = top , bottom = bottom ,
79- gutter = gutter , header = header , footer = footer
80- )
86+ pgMar_bldr = self .pgMar_bldr (** {
87+ 'has_pgMar' : has_pgMar_child , 'left' : left , 'right' : right ,
88+ 'top' : top , 'bottom' : bottom , 'gutter' : gutter , 'header' : header ,
89+ 'footer' : footer
90+ })
8191 sectPr = self .sectPr_bldr (pgMar_bldr ).element
8292 section = Section (sectPr )
83- expected_left = left * 635 if left else None
84- expected_right = right * 635 if right else None
85- expected_top = top * 635 if top else None
86- expected_bottom = bottom * 635 if bottom else None
87- expected_gutter = gutter * 635 if gutter else None
88- expected_header = header * 635 if header else None
89- expected_footer = footer * 635 if footer else None
93+ expected_left = self . twips_to_emu ( left )
94+ expected_right = self . twips_to_emu ( right )
95+ expected_top = self . twips_to_emu ( top )
96+ expected_bottom = self . twips_to_emu ( bottom )
97+ expected_gutter = self . twips_to_emu ( gutter )
98+ expected_header = self . twips_to_emu ( header )
99+ expected_footer = self . twips_to_emu ( footer )
90100 return (
91101 section , expected_left , expected_right , expected_top ,
92102 expected_bottom , expected_gutter , expected_header ,
93103 expected_footer
94104 )
95105
106+ @pytest .fixture (params = [
107+ ('left' , 1440 , 720 ), ('right' , None , 1800 ), ('top' , 2160 , None ),
108+ ('bottom' , 720 , 2160 ), ('gutter' , None , 360 ), ('header' , 720 , 630 ),
109+ ('footer' , None , 810 )
110+ ])
111+ def margins_set_fixture (self , request ):
112+ margin_side , initial_margin , new_margin = request .param
113+ # section ----------------------
114+ pgMar_bldr = self .pgMar_bldr (** {margin_side : initial_margin })
115+ sectPr = self .sectPr_bldr (pgMar_bldr ).element
116+ section = Section (sectPr )
117+ # property name ----------------
118+ property_name = {
119+ 'left' : 'left_margin' , 'right' : 'right_margin' ,
120+ 'top' : 'top_margin' , 'bottom' : 'bottom_margin' ,
121+ 'gutter' : 'gutter' , 'header' : 'header_distance' ,
122+ 'footer' : 'footer_distance'
123+ }[margin_side ]
124+ # expected_xml -----------------
125+ pgMar_bldr = self .pgMar_bldr (** {margin_side : new_margin })
126+ expected_xml = self .sectPr_bldr (pgMar_bldr ).xml ()
127+ new_value = self .twips_to_emu (new_margin )
128+ return section , property_name , new_value , expected_xml
129+
96130 @pytest .fixture (params = [
97131 (True , 'landscape' , WD_ORIENT .LANDSCAPE ),
98132 (True , 'portrait' , WD_ORIENT .PORTRAIT ),
@@ -211,26 +245,21 @@ def start_type_set_fixture(self, request):
211245
212246 # fixture components ---------------------------------------------
213247
214- def pgMar_bldr (
215- self , has_pgMar = True , left = None , right = None , top = None ,
216- bottom = None , header = None , footer = None , gutter = None ):
217- if not has_pgMar :
248+ @staticmethod
249+ def twips_to_emu (twips ):
250+ if twips is None :
251+ return None
252+ return twips * 635
253+
254+ def pgMar_bldr (self , ** kwargs ):
255+ if kwargs .pop ('has_pgMar' , True ) is False :
218256 return None
219257 pgMar_bldr = a_pgMar ()
220- if left is not None :
221- pgMar_bldr .with_left (left )
222- if right is not None :
223- pgMar_bldr .with_right (right )
224- if top is not None :
225- pgMar_bldr .with_top (top )
226- if bottom is not None :
227- pgMar_bldr .with_bottom (bottom )
228- if header is not None :
229- pgMar_bldr .with_header (header )
230- if footer is not None :
231- pgMar_bldr .with_footer (footer )
232- if gutter is not None :
233- pgMar_bldr .with_gutter (gutter )
258+ for key , value in kwargs .items ():
259+ if value is None :
260+ continue
261+ set_attr_method = getattr (pgMar_bldr , 'with_%s' % key )
262+ set_attr_method (value )
234263 return pgMar_bldr
235264
236265 def pgSz_bldr (self , has_pgSz = True , w = None , h = None , orient = None ):
0 commit comments