1 /* This file is part of the Calligra project
2  * Copyright (C) 2005,2008,2010 Thomas Zander <zander@kde.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 #include "TestPageManager.h"
20 
21 #include <KWPageManager.h>
22 #include <KWPage.h>
23 #include <KoColorBackground.h>
24 
25 #include <kdebug.h>
26 
init()27 void TestPageManager::init()
28 {
29 }
30 
getAddPages()31 void TestPageManager::getAddPages()
32 {
33     KWPageManager *pageManager = new KWPageManager();
34 
35     QCOMPARE(pageManager->pageCount(), 0);
36     QVERIFY(! pageManager->page(0).isValid());
37     QVERIFY(! pageManager->page(1).isValid());
38     QVERIFY(! pageManager->page(-10).isValid());
39     QVERIFY(! pageManager->page(10).isValid());
40 
41     KWPage page1 = pageManager->appendPage();
42     QCOMPARE(page1.pageNumber(), 1);
43     KWPage page3 = pageManager->appendPage();
44     QCOMPARE(page3.pageNumber(), 2);
45     QCOMPARE(pageManager->pageCount(), 2);
46     QCOMPARE(pageManager->page(1), page1);
47     QCOMPARE(pageManager->page(2), page3);
48 
49     KWPage page2 = pageManager->insertPage(2);
50     QCOMPARE(page2.pageNumber(), 2);
51     QCOMPARE(pageManager->pageCount(), 3);
52     QCOMPARE(pageManager->page(1), page1);
53     QCOMPARE(pageManager->page(2), page2);
54     QCOMPARE(pageManager->page(3), page3);
55 
56     KWPage page4 = pageManager->insertPage(4);
57     QCOMPARE(pageManager->pageCount(), 4);
58     QCOMPARE(pageManager->page(4), page4);
59 
60     QCOMPARE(page1.pageNumber(), 1);
61     QCOMPARE(page2.pageNumber(), 2);
62     QCOMPARE(page3.pageNumber(), 3);
63     QCOMPARE(page4.pageNumber(), 4);
64 
65     // fetching
66     KWPage page = pageManager->page(1);
67     QVERIFY(page.isValid());
68     QCOMPARE(page.pageNumber(), 1);
69     QCOMPARE(page.pageSide(), KWPage::Right);
70     QVERIFY(page.pageStyle().isValid());
71     KoPageLayout pageLayout = page.pageStyle().pageLayout();
72     pageLayout.width = 134.2;
73     pageLayout.height = 521.4;
74     page.pageStyle().setPageLayout(pageLayout);
75     QCOMPARE(page.width(), 134.2);
76     QCOMPARE(page.height(), 521.4);
77 
78 #if 0       // TODO, missing feature :(
79     // test setStartPage
80     pageManager->setStartPage(4);
81     page = pageManager->page(0);
82     QCOMPARE(page == 0, true);
83     page = pageManager->page(3);
84     QCOMPARE(page == 0, true);
85     page = pageManager->page(5);
86     QCOMPARE(page == 0, true);
87     page = pageManager->page(4);
88     QCOMPARE(page == 0, false);
89     QCOMPARE(page->pageNumber(), 4);
90     QCOMPARE(page->pageSide(), KWPage::Left);
91 
92     pageManager->setStartPage(1);
93     page = pageManager->page(0);
94     QCOMPARE(page == 0, true);
95     page = pageManager->page(3);
96     QCOMPARE(page == 0, true);
97     page = pageManager->page(2);
98     QCOMPARE(page == 0, true);
99     page = pageManager->page(1);
100     QCOMPARE(page == 0, false);
101     QCOMPARE(page->pageNumber(), 1);
102     QCOMPARE(page->pageSide(), KWPage::Right);
103 
104     // adding pages
105     QCOMPARE(pageManager->pageCount(), 1);
106     QCOMPARE(pageManager->lastPageNumber(), 1);
107     pageManager->setStartPage(40);
108     QCOMPARE(pageManager->pageCount(), 1);
109     QCOMPARE(pageManager->lastPageNumber(), 40);
110     page = pageManager->appendPage();
111     QCOMPARE(pageManager->pageCount(), 2);
112     QCOMPARE(pageManager->lastPageNumber(), 41);
113 
114     QCOMPARE(page == 0, false);
115     QCOMPARE(page->pageNumber(), 41);
116     QCOMPARE(page->pageSide(), KWPage::Right);
117 #endif
118 }
119 
getAddPages2()120 void TestPageManager::getAddPages2()
121 {
122     KWPageManager *pageManager = new KWPageManager();
123 
124     KWPage page = pageManager->appendPage();
125     KoPageLayout pageLayout = page.pageStyle().pageLayout();
126     pageLayout.width = 200;
127     pageLayout.height = 200;
128     page.pageStyle().setPageLayout(pageLayout);
129 
130     MockShape shape1;
131     shape1.setPosition(QPointF(0, 0));
132     shape1.setSize(QSizeF(2, 2));
133     QCOMPARE(pageManager->pageNumber(&shape1), 1);
134 
135     MockShape shape2;
136     shape2.setPosition(QPointF(90, 90));
137     shape2.setSize(QSizeF(2, 2));
138     QCOMPARE(pageManager->pageNumber(&shape2), 1);
139 
140     MockShape shape3;
141     shape3.setPosition(QPointF(190, 190));
142     shape3.setSize(QSizeF(9, 9));
143     QCOMPARE(pageManager->pageNumber(&shape3), 1);
144 
145     KWPageStyle settingsPage2("page2");
146     pageLayout = settingsPage2.pageLayout();
147     pageLayout.width = 600;
148     pageLayout.height = 600;
149     settingsPage2.setPageLayout(pageLayout);
150     page = pageManager->appendPage(settingsPage2);
151     QCOMPARE(pageManager->pageNumber(&shape1), 1);
152     QCOMPARE(pageManager->pageNumber(&shape2), 1);
153     QCOMPARE(pageManager->pageNumber(&shape3), 1);
154 
155     shape1.setPosition(QPointF(201, 201));
156     QCOMPARE(pageManager->pageNumber(&shape1), 2);
157     shape1.setPosition(QPointF(300, 3));
158     QCOMPARE(pageManager->pageNumber(&shape1), 1); // right of page 1
159     shape3.setPosition(QPointF(2, 690));
160     QCOMPARE(pageManager->pageNumber(&shape3), 2);
161     shape3.setPosition(QPointF(300, 300));
162     QCOMPARE(pageManager->pageNumber(&shape3), 2);
163     shape3.setPosition(QPointF(600, 700));
164     QCOMPARE(pageManager->pageNumber(&shape3), 2);
165 
166     // QPointF based
167     QCOMPARE(pageManager->pageNumber(QPointF(201, 201)), 2);
168     // Y based
169     QCOMPARE(pageManager->pageNumber(201.0), 2);
170     QCOMPARE(pageManager->pageNumber(900.0), 2);
171 }
172 
createInsertPages()173 void TestPageManager::createInsertPages()
174 {
175     KWPageManager *pageManager = new KWPageManager();
176 
177     QCOMPARE(pageManager->pageCount(), 0);
178     KWPage page1 = pageManager->appendPage();
179     QCOMPARE(pageManager->pageCount(), 1);
180     KWPage page3 = pageManager->appendPage();
181     QCOMPARE(pageManager->pageCount(), 2);
182     QCOMPARE(page3.pageNumber(), 2);
183 
184     KWPage page2 = pageManager->insertPage(2);
185     QCOMPARE(pageManager->pageCount(), 3);
186     QCOMPARE(page1.pageNumber(), 1);
187     QCOMPARE(page2.pageNumber(), 2);
188     QCOMPARE(page3.pageNumber(), 3);
189 
190     KWPage page4 = pageManager->insertPage(-100); // invalid numbers go at the end
191     KWPage page5 = pageManager->insertPage(100);
192     QCOMPARE(pageManager->pageCount(), 5);
193     QCOMPARE(page1.pageNumber(), 1);
194     QCOMPARE(page2.pageNumber(), 2);
195     QCOMPARE(page3.pageNumber(), 3);
196     QCOMPARE(page4.pageNumber(), 4);
197     QCOMPARE(page5.pageNumber(), 5);
198 
199     KWPage page6 = pageManager->insertPage(1);
200     KWPage page7 = pageManager->insertPage(2);
201     QCOMPARE(pageManager->pageCount(), 7);
202     QCOMPARE(page6.pageNumber(), 1);
203     QCOMPARE(page7.pageNumber(), 2);
204     QCOMPARE(page1.pageNumber(), 3);
205     QCOMPARE(page2.pageNumber(), 4);
206     QCOMPARE(page3.pageNumber(), 5);
207     QCOMPARE(page4.pageNumber(), 6);
208 }
209 
removePages()210 void TestPageManager::removePages()
211 {
212     KWPageManager *pageManager = new KWPageManager();
213 
214     KWPage page1 = pageManager->appendPage();
215     KWPage page2 = pageManager->appendPage();
216     pageManager->appendPage();
217     KWPage page4 = pageManager->appendPage();
218 
219     pageManager->removePage(3);
220     QCOMPARE(page1.pageNumber(), 1);
221     QCOMPARE(page2.pageNumber(), 2);
222     QCOMPARE(page4.pageNumber(), 3);
223 
224     pageManager->removePage(page2);
225     QCOMPARE(page1.pageNumber(), 1);
226     QCOMPARE(page4.pageNumber(), 2);
227 }
228 
pageInfo()229 void TestPageManager::pageInfo()
230 {
231     KWPageManager *pageManager = new KWPageManager();
232 
233     KoPageLayout layout = pageManager->defaultPageStyle().pageLayout();
234     layout.width = 100;
235     layout.height = 200;
236     layout.format = KoPageFormat::IsoA4Size;
237     pageManager->defaultPageStyle().setPageLayout(layout);
238     QCOMPARE(pageManager->defaultPageStyle().pageLayout().width, 100.0);
239     QCOMPARE(pageManager->defaultPageStyle().pageLayout().format, KoPageFormat::IsoA4Size);
240 
241     KWPageStyle pageStylePage2("Page 2");
242     layout = pageStylePage2.pageLayout();
243     layout.width = 50;
244     layout.height = 100;
245     pageStylePage2.setPageLayout(layout);
246     pageManager->addPageStyle(pageStylePage2);
247     QCOMPARE(pageManager->pageStyle("Page 2").pageLayout().width, 50.0);
248 
249     KWPageStyle pageStylePage3("Page 3");
250     layout = pageStylePage3.pageLayout();
251     layout.width = 300;
252     layout.height = 600;
253     pageStylePage3.setPageLayout(layout);
254     pageManager->addPageStyle(pageStylePage3);
255     QCOMPARE(pageManager->pageStyle("Page 3").pageLayout().width, 300.0);
256 
257     KWPage page1r = pageManager->appendPage();
258     KWPage page1l = pageManager->appendPage();
259     KWPage page2 = pageManager->appendPage(pageStylePage2);
260     KWPage page3 = pageManager->appendPage(pageStylePage3);
261     QVERIFY(page3.isValid());
262 
263     QCOMPARE(pageManager->pageCount(), 4);
264     QCOMPARE(pageManager->page(1), page1r);
265     QCOMPARE(pageManager->page(2), page1l);
266     QCOMPARE(pageManager->page(2).pageStyle(), pageManager->defaultPageStyle());
267     QCOMPARE(pageManager->page(3).pageStyle(), pageStylePage2);
268     QCOMPARE(pageManager->page(4).pageStyle(), pageStylePage3);
269 
270     QCOMPARE(pageManager->topOfPage(4), 500.0);
271     QCOMPARE(pageManager->bottomOfPage(4), 1100.0);
272 
273     layout = pageStylePage3.pageLayout();
274     layout.height = 500;
275     pageStylePage3.setPageLayout(layout);
276     QCOMPARE(pageManager->bottomOfPage(4), 1000.0);
277 
278     layout = pageManager->defaultPageStyle().pageLayout();
279     layout.topMargin = 5;
280     layout.leftMargin = 6;
281     layout.bottomMargin = 7;
282     layout.rightMargin = 8;
283     pageManager->defaultPageStyle().setPageLayout(layout);
284 
285     layout = pageStylePage2.pageLayout();
286     layout.topMargin = 9;
287     layout.leftMargin = 10;
288     layout.bottomMargin = 11;
289     layout.rightMargin = 12;
290     pageStylePage2.setPageLayout(layout);
291 
292     layout = page1l.pageStyle().pageLayout(); //layout is valid for page1l and page1r
293     layout.rightMargin = 14.0;
294     page1l.pageStyle().setPageLayout(layout);
295     QCOMPARE(page1l.rightMargin(), 14.0);
296     QCOMPARE(page1r.rightMargin(), 14.0);
297 
298     // Page Edge / Page Margin
299     layout = pageManager->defaultPageStyle().pageLayout();
300     layout.pageEdge = 14.0;
301     pageManager->defaultPageStyle().setPageLayout(layout);
302     QCOMPARE(page1l.pageSide(), KWPage::Left);
303     QCOMPARE(page1r.pageSide(), KWPage::Right);
304     QCOMPARE(page1l.rightMargin(), 14.0);
305     QCOMPARE(page1l.leftMargin(), 14.0);
306 
307     layout.bindingSide = 15.0;
308     pageManager->defaultPageStyle().setPageLayout(layout);
309     QCOMPARE(page1l.leftMargin(), 14.0);
310     QCOMPARE(page1l.rightMargin(), 15.0);
311     QCOMPARE(page1r.leftMargin(), 15.0);
312     QCOMPARE(page1r.rightMargin(), 14.0);
313 
314     QCOMPARE(page2.rightMargin(), 12.0); // unchanged due to changes in page1
315     QCOMPARE(page2.leftMargin(), 10.0);
316 
317     layout = pageStylePage2.pageLayout();
318     layout.pageEdge = 16.0;
319     pageStylePage2.setPageLayout(layout);
320     QCOMPARE(page2.pageStyle(), pageStylePage2);
321     QCOMPARE(page2.pageStyle().pageLayout().width, 50.0);
322     QCOMPARE(page2.pageStyle().pageLayout().height, 100.0);
323     QCOMPARE(page2.pageSide(), KWPage::Right);
324     QCOMPARE(page2.rightMargin(), 16.0);
325 
326     layout.bindingSide = 17.0;
327     pageStylePage2.setPageLayout(layout);
328     QCOMPARE(page2.rightMargin(), 16.0);
329     QCOMPARE(page2.leftMargin(), 17.0);
330 
331     layout.leftMargin = 18;
332     layout.rightMargin = 19;
333     pageStylePage2.setPageLayout(layout);
334     QCOMPARE(page2.rightMargin(), 16.0);
335     QCOMPARE(page2.leftMargin(), 17.0);
336 }
337 
testClipToDocument()338 void TestPageManager::testClipToDocument()
339 {
340     KWPageManager *pageManager = new KWPageManager();
341     KoPageLayout lay;
342     lay.width = 300;
343     lay.height = 600;
344     lay.format = KoPageFormat::IsoA4Size;
345     pageManager->defaultPageStyle().setPageLayout(lay);
346 
347     KWPageStyle pageStyle1("page1");
348     lay = pageStyle1.pageLayout();
349     lay.width = 100;
350     lay.height = 200;
351     pageStyle1.setPageLayout(lay);
352     pageManager->addPageStyle(pageStyle1);
353 
354     KWPageStyle pageStyle2("page2");
355     lay = pageStyle2.pageLayout();
356     lay.width = 50;
357     lay.height = 100;
358     pageStyle2.setPageLayout(lay);
359     pageManager->addPageStyle(pageStyle2);
360 
361     KWPage page1 = pageManager->appendPage(pageStyle1);
362     QVERIFY(page1.isValid());
363     KWPage page2 = pageManager->appendPage(pageStyle2);
364     QVERIFY(page2.isValid());
365     pageManager->appendPage(pageManager->defaultPageStyle());
366 
367     QPointF p(10, 10);
368 
369     QPointF result = pageManager->clipToDocument(p);
370     QCOMPARE(result, p);
371 
372     p.setX(110);
373     result = pageManager->clipToDocument(p);
374     QCOMPARE(p.y(), result.y());
375     QCOMPARE(result.x(), 100.0);
376 
377     p.setY(210);
378     result = pageManager->clipToDocument(p);
379     QCOMPARE(result.x(), 50.0);
380     QCOMPARE(result.y(), p.y());
381 
382     p.setY(330);
383     result = pageManager->clipToDocument(p);
384     QCOMPARE(p == result, true);
385 
386     p.setY(910);
387     p.setX(310);
388     result = pageManager->clipToDocument(p);
389     QCOMPARE(result.y(), 900.0);
390     QCOMPARE(result.x(), 300.0);
391 }
392 
testOrientationHint()393 void TestPageManager::testOrientationHint()
394 {
395     KWPageManager pageManager;
396     KWPage page = pageManager.appendPage();
397     QCOMPARE(page.orientationHint(), KoPageFormat::Portrait);
398     page.setOrientationHint(KoPageFormat::Landscape);
399     QCOMPARE(page.orientationHint(), KoPageFormat::Landscape);
400     page.setOrientationHint(KoPageFormat::Portrait);
401     QCOMPARE(page.orientationHint(), KoPageFormat::Portrait);
402 
403     page.setOrientationHint(KoPageFormat::Landscape);
404     KWPage page2 = pageManager.appendPage();
405     QCOMPARE(page2.orientationHint(), KoPageFormat::Landscape); // inherit from last page
406     page.setOrientationHint(KoPageFormat::Portrait);
407     QCOMPARE(page2.orientationHint(), KoPageFormat::Landscape); // but separate
408     QCOMPARE(page.orientationHint(), KoPageFormat::Portrait);
409 }
410 
testDirectionHint()411 void TestPageManager::testDirectionHint()
412 {
413     KWPageManager pageManager;
414     KWPage page = pageManager.appendPage();
415     QCOMPARE(page.directionHint(), KoText::AutoDirection);
416     page.setDirectionHint(KoText::LeftRightTopBottom);
417     QCOMPARE(page.directionHint(), KoText::LeftRightTopBottom);
418     page.setDirectionHint(KoText::TopBottomRightLeft);
419     QCOMPARE(page.directionHint(), KoText::TopBottomRightLeft);
420 
421     KWPage page2 = pageManager.appendPage();
422     QCOMPARE(page2.directionHint(), KoText::TopBottomRightLeft); // inherit from last page
423     page.setDirectionHint(KoText::LeftRightTopBottom);
424     QCOMPARE(page2.directionHint(), KoText::TopBottomRightLeft); // but separate
425     QCOMPARE(page.directionHint(), KoText::LeftRightTopBottom);
426 }
427 
testPageNumber()428 void TestPageManager::testPageNumber()
429 {
430     KWPageManager pageManager;
431     KWPage page = pageManager.appendPage();
432     QCOMPARE(page.pageNumber(), 1);
433     page.setPageNumber(1);
434     QCOMPARE(page.pageNumber(), 1);
435     QCOMPARE(page.pageSide(), KWPage::Right);
436     page.setPageNumber(5);
437     QCOMPARE(page.pageNumber(), 5);
438     QCOMPARE(page.pageSide(), KWPage::Right);
439     page.setPageNumber(2);
440     QCOMPARE(page.pageNumber(), 2);
441     QCOMPARE(page.pageSide(), KWPage::Left);
442     page.setPageSide(KWPage::PageSpread);
443     QCOMPARE(page.pageSide(), KWPage::PageSpread);
444     QVERIFY(pageManager.page(2) == page);
445     QVERIFY(pageManager.page(3) == page);
446     KWPage page2 = pageManager.appendPage();
447     QCOMPARE(page2.pageNumber(), 4);
448 
449     KWPage page3 = pageManager.appendPage();
450     QCOMPARE(page3.pageNumber(), 5);
451 
452     page.setPageNumber(10); // should renumber stuff
453     QCOMPARE(page.pageNumber(), 10);
454     QCOMPARE(page.pageSide(), KWPage::PageSpread);
455     QCOMPARE(page2.pageNumber(), 12);
456     QCOMPARE(page3.pageNumber(), 13);
457 
458     page2.setPageNumber(20);
459     QCOMPARE(page.pageNumber(), 10);
460     QCOMPARE(page.pageSide(), KWPage::PageSpread);
461     QCOMPARE(page2.pageNumber(), 20);
462     QCOMPARE(page3.pageNumber(), 21);
463 }
464 
testPageTraversal()465 void TestPageManager::testPageTraversal()
466 {
467     KWPageManager manager;
468     for (int i = 1; i < 6; ++i)
469         manager.appendPage();
470     KWPage page = manager.begin();
471     QCOMPARE(page.pageNumber(), 1);
472     page = page.next();
473     QCOMPARE(page.pageNumber(), 2);
474     page = page.next();
475     QCOMPARE(page.pageNumber(), 3);
476     page = page.next();
477     QCOMPARE(page.pageNumber(), 4);
478     page = page.next();
479     QCOMPARE(page.pageNumber(), 5);
480     QCOMPARE(page.isValid(), true);
481     page = page.next();
482     QCOMPARE(page.isValid(), false);
483     page = manager.last();
484     QCOMPARE(page.pageNumber(), 5);
485     QCOMPARE(page.isValid(), true);
486     page = page.previous();
487     QCOMPARE(page.pageNumber(), 4);
488     page = page.previous();
489     QCOMPARE(page.pageNumber(), 3);
490     page = page.previous();
491     QCOMPARE(page.pageNumber(), 2);
492     page = page.previous();
493     QCOMPARE(page.pageNumber(), 1);
494     QCOMPARE(page.isValid(), true);
495     page = page.previous();
496     QCOMPARE(page.isValid(), false);
497 }
498 
testSetPageStyle()499 void TestPageManager::testSetPageStyle()
500 {
501     KWPageManager manager;
502     KWPage page = manager.appendPage();
503 
504     KWPageStyle style("myStyle");
505     KoPageLayout layout;
506     layout.height = 100;
507     style.setPageLayout(layout);
508     page.setPageStyle(style);
509 
510     QCOMPARE(page.height(), 100.);
511     QVERIFY(manager.pageStyle("myStyle") == style);
512 }
513 
testPageCount()514 void TestPageManager::testPageCount()
515 {
516     KWPageManager manager;
517     QCOMPARE(manager.pageCount(), 0);
518     KWPage page = manager.appendPage();
519     QCOMPARE(manager.pageCount(), 1);
520     KWPage page2 = manager.appendPage();
521     QCOMPARE(manager.pageCount(), 2);
522     KWPage page3 = manager.appendPage();
523     QCOMPARE(manager.pageCount(), 3);
524     page2.setPageSide(KWPage::PageSpread);
525     QCOMPARE(manager.pageCount(), 4);
526 }
527 
testPageSpreadLayout()528 void TestPageManager::testPageSpreadLayout()
529 {
530     KWPageManager manager;
531     KWPage page = manager.appendPage();
532     KoPageLayout layout = page.pageStyle().pageLayout();
533     layout.width = 450;
534     layout.height = 150;
535     QCOMPARE(page.pageNumber(), 1);
536     page.setPageSide(KWPage::PageSpread); // makes it page 2 (and 3)
537     QCOMPARE(page.pageNumber(), 2);
538     page.pageStyle().setPageLayout(layout);
539     KWPage page2 = manager.appendPage();
540     QCOMPARE(page2.pageNumber(), 4);
541     page2.setDirectionHint(KoText::LeftRightTopBottom);
542     layout.width = 200;
543     page2.pageStyle().setPageLayout(layout);
544 
545     QCOMPARE(page.offsetInDocument(), 0.);
546     QCOMPARE(page2.offsetInDocument(), 150.);
547 
548     QCOMPARE(manager.pageNumber(QPointF(10, 200)), 4);
549     QCOMPARE(manager.pageNumber(QPointF(10, 151)), 4);
550 
551 
552     KWPage four = page.next();
553     QCOMPARE(four.pageNumber(), 4);
554     KWPage invalid = four.next();
555     QVERIFY(!invalid.isValid());
556     QVERIFY(invalid.pageNumber() != 4);
557     KWPage copy = invalid;
558     QVERIFY(!copy.isValid());
559     QVERIFY(copy.pageNumber() != 4);
560 }
561 
testInsertPage()562 void TestPageManager::testInsertPage()
563 {
564     KWPageManager *pageManager = new KWPageManager();
565     QCOMPARE(pageManager->pageCount(), 0);
566 
567     // inserting determines the position, not always the page number.
568     KWPage page3 = pageManager->insertPage(10);
569     QCOMPARE(page3.pageNumber(), 1);
570     KWPage page1 = pageManager->insertPage(1);
571     QCOMPARE(page1.pageNumber(), 1);
572     QCOMPARE(page3.pageNumber(), 2);
573     QCOMPARE(pageManager->pageCount(), 2);
574     QCOMPARE(pageManager->page(1), page1);
575     QCOMPARE(pageManager->page(2), page3);
576 
577     KWPage page2 = pageManager->insertPage(2);
578     QCOMPARE(page2.pageNumber(), 2);
579     QCOMPARE(pageManager->pageCount(), 3);
580     QCOMPARE(pageManager->page(1), page1);
581     QCOMPARE(pageManager->page(2), page2);
582     QCOMPARE(pageManager->page(3), page3);
583 
584     KWPage page4 = pageManager->insertPage(4);
585     QCOMPARE(pageManager->pageCount(), 4);
586     QCOMPARE(pageManager->page(4), page4);
587 
588     QCOMPARE(page1.pageNumber(), 1);
589     QCOMPARE(page2.pageNumber(), 2);
590     QCOMPARE(page3.pageNumber(), 3);
591     QCOMPARE(page4.pageNumber(), 4);
592 }
593 
testPadding()594 void TestPageManager::testPadding()
595 {
596     // padding is the 'dead space' between actual pages.  This allows us to print using bleed to PDF.
597 
598     KWPageManager *pageManager = new KWPageManager();
599     KoInsets padding(6, 7, 9, 13);
600     pageManager->setPadding(padding);
601     KoInsets padding2 = pageManager->padding();
602     QCOMPARE(padding2.top, padding.top);
603     QCOMPARE(padding2.bottom, padding.bottom);
604     QCOMPARE(padding2.left, padding.left);
605     QCOMPARE(padding2.right, padding.right);
606 
607     KoPageLayout lay;
608     QVERIFY(lay.leftMargin >= 0);
609     QVERIFY(lay.bindingSide == -1);
610     lay.width = 100;
611     lay.height = 50;
612     KWPageStyle style("testStyle");
613     style.setPageLayout(lay);
614 
615     KWPage page1 = pageManager->appendPage(style);
616     QVERIFY(page1.isValid());
617     QCOMPARE(page1.offsetInDocument(), 0.);
618     QCOMPARE(page1.rect(), QRectF(0, 0, 100, 50));
619     KWPage page2 = pageManager->appendPage(style);
620     QCOMPARE(page2.offsetInDocument(), 50. + 6. + 9.);
621     QCOMPARE(page2.rect(), QRectF(0, 65, 100, 50));
622     KWPage page3 = pageManager->appendPage(style);
623     QCOMPARE(page3.offsetInDocument(), 115 + 6. + 9.);
624     QCOMPARE(page3.rect(), QRectF(0, 130, 100, 50));
625 
626     padding = KoInsets(1, 2, 3, 4);
627     pageManager->setPadding(padding);
628     QCOMPARE(page3.offsetInDocument(), 2 * (50. + 1. + 3.)); // they moved :)
629     QCOMPARE(page3.rect(), QRectF(0, 108, 100, 50));
630 }
631 
testPageOffset()632 void TestPageManager::testPageOffset()
633 {
634     KWPageManager *pageManager = new KWPageManager();
635     for (int i=0; i < 500; ++i) {
636         KWPage page = pageManager->appendPage();
637     }
638 
639     KWPage page = pageManager->page(1);
640     QVERIFY(page.isValid());
641     QCOMPARE(page.pageNumber(), 1);
642     QCOMPARE(page.offsetInDocument(), 0.);
643     const qreal pageHeight = page.pageStyle().pageLayout().height;
644 
645     page = pageManager->page(50);
646     QVERIFY(page.isValid());
647     QCOMPARE(page.pageNumber(), 50);
648     QCOMPARE(page.offsetInDocument(), pageHeight * 49);
649 
650     KoPageLayout layout = page.pageStyle().pageLayout();
651     layout.height = 400;
652     page.pageStyle().setPageLayout(layout);
653     QCOMPARE(page.offsetInDocument(), (qreal) 400 * 49);
654 }
655 
testBackgroundRefCount()656 void TestPageManager::testBackgroundRefCount()
657 {
658     KWPageStyle ps1("test");
659     QVERIFY(ps1.background() == 0);
660     KoColorBackground *background = new KoColorBackground(QColor(Qt::red));
661     QVERIFY(background->ref());
662     QCOMPARE(background->useCount(), 1);
663 
664     ps1.setBackground(background);
665     QCOMPARE(background->useCount(), 2);
666 
667     {
668         KWPageStyle ps2("test2");
669         QCOMPARE(background->useCount(), 2);
670         ps2 = ps1;
671         QCOMPARE(background->useCount(), 2);
672     }
673     QCOMPARE(background->useCount(), 2);
674 
675     ps1 = ps1;
676     QCOMPARE(background->useCount(), 2);
677     ps1.setBackground(0);
678     QCOMPARE(background->useCount(), 1);
679     delete background;
680 }
681 
testAppendPageSpread()682 void TestPageManager::testAppendPageSpread()
683 {
684     KWPageManager manager;
685 
686     KWPageStyle style = manager.addPageStyle("pagestyle1");
687     KoPageLayout layout = style.pageLayout();
688     layout.leftMargin = -1;
689     layout.rightMargin = -1;
690     layout.pageEdge = 7;
691     layout.bindingSide = 13;
692     style.setPageLayout(layout);
693 
694     KWPage page1 = manager.appendPage(style);
695     QCOMPARE(page1.pageNumber(), 1);
696     QCOMPARE(page1.pageSide(), KWPage::Right);
697     QCOMPARE(page1.width(), style.pageLayout().width);
698     KWPage test = page1.next();
699     QVERIFY(!test.isValid());
700 
701     KWPage page2 = manager.appendPage(style);
702     QCOMPARE(page1.pageNumber(), 1);
703     QCOMPARE(page1.pageSide(), KWPage::Right);
704     QCOMPARE(page1.width(), style.pageLayout().width);
705     QCOMPARE(page2.pageNumber(), 2);
706     QCOMPARE(page2.pageSide(), KWPage::PageSpread);
707     QCOMPARE(page2.width(), style.pageLayout().width * 2);
708     test = page2.next();
709     QVERIFY(!test.isValid());
710 
711     KWPage page3 = manager.insertPage(2, style);
712     QCOMPARE(page1.pageNumber(), 1);
713     QCOMPARE(page1.pageSide(), KWPage::Right);
714     QCOMPARE(page1.width(), style.pageLayout().width);
715     QCOMPARE(page2.pageNumber(), 4);
716     QCOMPARE(page2.pageSide(), KWPage::PageSpread);
717     QCOMPARE(page2.width(), style.pageLayout().width * 2);
718     QCOMPARE(page3.pageNumber(), 2);
719     QCOMPARE(page3.pageSide(), KWPage::PageSpread);
720     QCOMPARE(page3.width(), style.pageLayout().width * 2);
721     test = page2.next();
722     QVERIFY(!test.isValid());
723 
724     KWPage realPage3 = manager.page(3);
725     QVERIFY(realPage3.isValid());
726     QCOMPARE(realPage3.pageNumber(), 2); // its still a pagespread
727 }
728 
testRemovePageSpread()729 void TestPageManager::testRemovePageSpread()
730 {
731     KWPageManager manager;
732 
733     KoPageLayout layout = manager.defaultPageStyle().pageLayout();
734     layout.leftMargin = -1;
735     layout.rightMargin = -1;
736     layout.pageEdge = 7;
737     layout.bindingSide = 13;
738     manager.defaultPageStyle().setPageLayout(layout);
739 
740     KWPage page1 = manager.appendPage();
741     KWPage pageSpread1 = manager.appendPage();
742     KWPage pageSpread2 = manager.appendPage();
743     QCOMPARE(pageSpread1.pageSide(), KWPage::PageSpread);
744     QCOMPARE(pageSpread2.pageSide(), KWPage::PageSpread);
745     QCOMPARE(manager.pageCount(), 5);
746 
747     manager.removePage(pageSpread2); // remove from end
748     QVERIFY(pageSpread1.isValid());
749     QCOMPARE(pageSpread1.pageSide(), KWPage::PageSpread);
750     QCOMPARE(manager.pageCount(), 3);
751     QVERIFY(!pageSpread2.isValid());
752     QVERIFY(pageSpread2.pageNumber() < 0);
753 
754     // re-add so we can remove something in the middle
755     pageSpread2 = manager.appendPage();
756     QCOMPARE(pageSpread1.pageSide(), KWPage::PageSpread);
757     QCOMPARE(pageSpread2.pageSide(), KWPage::PageSpread);
758     QCOMPARE(manager.pageCount(), 5);
759 
760 
761     manager.removePage(pageSpread1); // remove pages 2&3
762     QVERIFY(!pageSpread1.isValid());
763     QVERIFY(pageSpread1.pageNumber() < 0);
764     QCOMPARE(pageSpread2.pageSide(), KWPage::PageSpread);
765     QCOMPARE(manager.pageCount(), 3);
766     QVERIFY(pageSpread2.isValid());
767 }
768 
769 QTEST_KDEMAIN(TestPageManager, GUI)
770