@@ -131,6 +131,126 @@ def testReportSectionLayout(self):
131131 r .setBody (body )
132132 self .assertEqual (r .body (), body )
133133
134+ def testIteration (self ):
135+ p = QgsProject ()
136+ r = QgsReport ()
137+
138+ # empty report
139+ self .assertTrue (r .beginRender ())
140+ self .assertFalse (r .next ())
141+
142+ # add a header
143+ r .setHeaderEnabled (True )
144+ report_header = QgsLayout (p )
145+ r .setHeader (report_header )
146+
147+ self .assertTrue (r .beginRender ())
148+ self .assertTrue (r .next ())
149+ self .assertEqual (r .layout (), report_header )
150+ self .assertFalse (r .next ())
151+
152+ # add a footer
153+ r .setFooterEnabled (True )
154+ report_footer = QgsLayout (p )
155+ r .setFooter (report_footer )
156+
157+ self .assertTrue (r .beginRender ())
158+ self .assertTrue (r .next ())
159+ self .assertEqual (r .layout (), report_header )
160+ self .assertTrue (r .next ())
161+ self .assertEqual (r .layout (), report_footer )
162+ self .assertFalse (r .next ())
163+
164+ # add a child
165+ child1 = QgsReportSectionLayout ()
166+ child1_body = QgsLayout (p )
167+ child1 .setBody (child1_body )
168+ r .appendChild (child1 )
169+ self .assertTrue (r .beginRender ())
170+ self .assertTrue (r .next ())
171+ self .assertEqual (r .layout (), report_header )
172+ self .assertTrue (r .next ())
173+ self .assertEqual (r .layout (), child1_body )
174+ self .assertTrue (r .next ())
175+ self .assertEqual (r .layout (), report_footer )
176+ self .assertFalse (r .next ())
177+
178+ # header and footer on child
179+ child1_header = QgsLayout (p )
180+ child1 .setHeader (child1_header )
181+ child1 .setHeaderEnabled (True )
182+ child1_footer = QgsLayout (p )
183+ child1 .setFooter (child1_footer )
184+ child1 .setFooterEnabled (True )
185+ self .assertTrue (r .beginRender ())
186+ self .assertTrue (r .next ())
187+ self .assertEqual (r .layout (), report_header )
188+ self .assertTrue (r .next ())
189+ self .assertEqual (r .layout (), child1_header )
190+ self .assertTrue (r .next ())
191+ self .assertEqual (r .layout (), child1_body )
192+ self .assertTrue (r .next ())
193+ self .assertEqual (r .layout (), child1_footer )
194+ self .assertTrue (r .next ())
195+ self .assertEqual (r .layout (), report_footer )
196+ self .assertFalse (r .next ())
197+
198+ # add another child
199+ child2 = QgsReportSectionLayout ()
200+ child2_header = QgsLayout (p )
201+ child2 .setHeader (child2_header )
202+ child2 .setHeaderEnabled (True )
203+ child2_footer = QgsLayout (p )
204+ child2 .setFooter (child2_footer )
205+ child2 .setFooterEnabled (True )
206+ r .appendChild (child2 )
207+ self .assertTrue (r .beginRender ())
208+ self .assertTrue (r .next ())
209+ self .assertEqual (r .layout (), report_header )
210+ self .assertTrue (r .next ())
211+ self .assertEqual (r .layout (), child1_header )
212+ self .assertTrue (r .next ())
213+ self .assertEqual (r .layout (), child1_body )
214+ self .assertTrue (r .next ())
215+ self .assertEqual (r .layout (), child1_footer )
216+ self .assertTrue (r .next ())
217+ self .assertEqual (r .layout (), child2_header )
218+ self .assertTrue (r .next ())
219+ self .assertEqual (r .layout (), child2_footer )
220+ self .assertTrue (r .next ())
221+ self .assertEqual (r .layout (), report_footer )
222+ self .assertFalse (r .next ())
223+
224+ # add a child to child2
225+ child2a = QgsReportSectionLayout ()
226+ child2a_header = QgsLayout (p )
227+ child2a .setHeader (child2a_header )
228+ child2a .setHeaderEnabled (True )
229+ child2a_footer = QgsLayout (p )
230+ child2a .setFooter (child2a_footer )
231+ child2a .setFooterEnabled (True )
232+ child2 .appendChild (child2a )
233+ self .assertTrue (r .beginRender ())
234+ self .assertTrue (r .next ())
235+ self .assertEqual (r .layout (), report_header )
236+ self .assertTrue (r .next ())
237+ self .assertEqual (r .layout (), child1_header )
238+ self .assertTrue (r .next ())
239+ self .assertEqual (r .layout (), child1_body )
240+ self .assertTrue (r .next ())
241+ self .assertEqual (r .layout (), child1_footer )
242+ self .assertTrue (r .next ())
243+ self .assertEqual (r .layout (), child2_header )
244+ self .assertTrue (r .next ())
245+ self .assertEqual (r .layout (), child2a_header )
246+ self .assertTrue (r .next ())
247+ self .assertEqual (r .layout (), child2a_footer )
248+ self .assertTrue (r .next ())
249+ self .assertEqual (r .layout (), child2_footer )
250+ self .assertTrue (r .next ())
251+ self .assertEqual (r .layout (), report_footer )
252+ self .assertFalse (r .next ())
253+
134254
135255if __name__ == '__main__' :
136256 unittest .main ()
0 commit comments