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