1 #include "TestTextFrameSorting.h"
2 #include "../KWPageManager.h"
3 #include "../KWPage.h"
4 #include "../frames/KWTextFrameSet.h"
5 #include "../frames/KWTextFrame.h"
6 #include "../KWDocument.h"
7 #include "../frames/KWCopyShape.h"
8
9 #include <KoTextShapeData.h>
10 #include <MockShapes.h>
11
12 #include <algorithm>
13
TestTextFrameSorting()14 TestTextFrameSorting::TestTextFrameSorting()
15 {
16 }
17
testSimpleSorting()18 void TestTextFrameSorting::testSimpleSorting()
19 {
20 KWTextFrameSet tfs(0);
21 KWFrame *frame1 = createFrame(QPointF(10, 10), tfs);
22 KWFrame *frame2 = createFrame(QPointF(120, 10), tfs);
23 frame2->shape()->setSize(QSizeF(100, 100));
24 KWFrame *frame3 = createFrame(QPointF(10, 110), tfs);
25
26 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
27
28 QCOMPARE(tfs.m_frames[0], frame1);
29 QCOMPARE(tfs.m_frames[1], frame2);
30 QCOMPARE(tfs.m_frames[2], frame3);
31
32 KWPageManager pm;
33 tfs.setPageManager(&pm);
34 pm.appendPage();
35 pm.appendPage();
36 KWFrame *frame4 = createFrame(QPointF(10, 1000), tfs); // page 2
37 KWFrame *frame5 = createFrame(QPointF(120, 1000), tfs);
38
39 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
40
41 QCOMPARE(tfs.m_frames[0], frame1);
42 QCOMPARE(tfs.m_frames[1], frame2);
43 QCOMPARE(tfs.m_frames[2], frame3);
44 QCOMPARE(tfs.m_frames[3], frame4);
45 QCOMPARE(tfs.m_frames[4], frame5);
46 }
47
testSimpleSorting2()48 void TestTextFrameSorting::testSimpleSorting2() // cascading usecase
49 {
50 KWTextFrameSet tfs(0);
51 KWFrame *frame4 = createFrame(QPointF(120, 300), tfs); // note that each frame is 50 x 50 per default.
52 KWFrame *frame2 = createFrame(QPointF(120, 120), tfs);
53 KWFrame *frame3 = createFrame(QPointF(10, 240), tfs);
54 KWFrame *frame1 = createFrame(QPointF(10, 10), tfs);
55
56 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
57
58 QCOMPARE(tfs.m_frames[0], frame1);
59 QCOMPARE(tfs.m_frames[1], frame2);
60 QCOMPARE(tfs.m_frames[2], frame3);
61 QCOMPARE(tfs.m_frames[3], frame4);
62
63 KWPageManager pm;
64 tfs.setPageManager(&pm);
65 pm.appendPage();
66 pm.appendPage();
67 KWFrame *frame21 = createFrame(QPointF(120, 1000), tfs);
68 KWFrame *frame20 = createFrame(QPointF(10, 1000), tfs);
69 KWFrame *frame23 = createFrame(QPointF(120, 1200), tfs);
70 KWFrame *frame22 = createFrame(QPointF(10, 1110), tfs);
71
72 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
73
74 QCOMPARE(tfs.m_frames[0], frame1);
75 QCOMPARE(tfs.m_frames[1], frame2);
76 QCOMPARE(tfs.m_frames[2], frame3);
77 QCOMPARE(tfs.m_frames[3], frame4);
78 QCOMPARE(tfs.m_frames[4], frame20);
79 QCOMPARE(tfs.m_frames[5], frame21);
80 QCOMPARE(tfs.m_frames[6], frame22);
81 QCOMPARE(tfs.m_frames[7], frame23);
82 }
83
testSortingOnPagespread()84 void TestTextFrameSorting::testSortingOnPagespread()
85 {
86 KWTextFrameSet tfs(0);
87 KWFrame * frame1 = createFrame(QPointF(10, 200), tfs);
88 KWFrame * frame2 = createFrame(QPointF(120, 10), tfs);
89 KWFrame * frame3 = createFrame(QPointF(10, 10), tfs);
90 KWFrame * frame4 = createFrame(QPointF(340, 10), tfs);
91 KWFrame * frame5 = createFrame(QPointF(230, 10), tfs);
92
93 KWPageManager pm;
94 KWPage page = pm.appendPage();
95 page.setPageNumber(2);
96 KoPageLayout layout = page.pageStyle().pageLayout();
97 layout.width = 450;
98 layout.height = 150;
99 page.setDirectionHint(KoText::LeftRightTopBottom);
100 page.setPageSide(KWPage::PageSpread);
101 page.pageStyle().setPageLayout(layout);
102 page = pm.appendPage();
103 page.setDirectionHint(KoText::LeftRightTopBottom);
104 layout.width = 200;
105 page.pageStyle().setPageLayout(layout);
106 tfs.setPageManager(&pm);
107
108 QCOMPARE(page.offsetInDocument(), 150.);
109
110 // test KWPageManager::pageNumber first
111 QCOMPARE(pm.begin().pageNumber(), 2);
112 QCOMPARE(pm.pageNumber(frame2->shape()), 2);
113 QCOMPARE(pm.pageNumber(frame1->shape()), 4);
114
115 QCOMPARE(KWTextFrameSet::sortTextFrames(frame4, frame5), false);
116 QCOMPARE(KWTextFrameSet::sortTextFrames(frame5, frame4), true);
117 QCOMPARE(KWTextFrameSet::sortTextFrames(frame2, frame4), true);
118 QCOMPARE(KWTextFrameSet::sortTextFrames(frame1, frame4), false);
119
120 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
121
122 QCOMPARE(tfs.m_frames[0], frame3);
123 QCOMPARE(tfs.m_frames[1], frame2);
124 QCOMPARE(tfs.m_frames[2], frame5);
125 QCOMPARE(tfs.m_frames[3], frame4);
126 QCOMPARE(tfs.m_frames[4], frame1);
127 }
128
testRtlSorting()129 void TestTextFrameSorting::testRtlSorting()
130 {
131 KWTextFrameSet tfs(0);
132 KWFrame * frame1 = createFrame(QPointF(10, 10), tfs);
133 KWFrame * frame2 = createFrame(QPointF(120, 10), tfs);
134
135 KWPageManager pm;
136 KWPage page = pm.appendPage();
137 page.setDirectionHint(KoText::RightLeftTopBottom);
138 QCOMPARE(page.directionHint(), KoText::RightLeftTopBottom);
139 KoPageLayout layout = page.pageStyle().pageLayout();
140 layout.width = 200;
141 page.pageStyle().setPageLayout(layout);
142 tfs.setPageManager(&pm);
143
144 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
145
146 // in RTL columns also sort right-to-left
147 QCOMPARE(tfs.m_frames[0], frame2);
148 QCOMPARE(tfs.m_frames[1], frame1);
149 }
150
testSortingById()151 void TestTextFrameSorting::testSortingById()
152 {
153 KWTextFrameSet tfs(0);
154 KWTextFrame * frame1 = createFrame(QPointF(10, 200), tfs);
155 KWTextFrame * frame2 = createFrame(QPointF(120, 10), tfs);
156 KWTextFrame * frame3 = createFrame(QPointF(10, 10), tfs);
157
158 frame1->setSortingId(1);
159 frame2->setSortingId(2);
160 frame3->setSortingId(3);
161
162 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
163
164 QCOMPARE(tfs.m_frames[0], frame1);
165 QCOMPARE(tfs.m_frames[1], frame2);
166 QCOMPARE(tfs.m_frames[2], frame3);
167 }
168
testCopyAfterTextSorting()169 void TestTextFrameSorting::testCopyAfterTextSorting()
170 {
171 KWTextFrameSet tfs(0);
172 KWTextFrame * frame1 = createFrame(QPointF(70, 1300), tfs);
173 KWFrame * frame2 = createCopyFrame(QPointF(70, 100), frame1->shape(), tfs);
174 KWTextFrame * frame3 = createFrame(QPointF(70, 2000), tfs);
175
176 tfs.removeFrame(frame1);
177
178 QCOMPARE(tfs.m_frames[0], frame2);
179 QCOMPARE(tfs.m_frames[1], frame3);
180
181 std::sort(tfs.m_frames.begin(), tfs.m_frames.end(), KWTextFrameSet::sortTextFrames);
182
183 QCOMPARE(tfs.m_frames[0], frame3);
184 QCOMPARE(tfs.m_frames[1], frame2);
185 }
186
187
createFrame(const QPointF & position,KWTextFrameSet & fs)188 KWTextFrame * TestTextFrameSorting::createFrame(const QPointF &position, KWTextFrameSet &fs)
189 {
190 MockShape *shape = new MockShape();
191 shape->setUserData(new KoTextShapeData());
192 KWTextFrame *frame = new KWTextFrame(shape, &fs);
193 shape->setPosition(position);
194 return frame;
195 }
196
createCopyFrame(const QPointF & position,KoShape * orig,KWTextFrameSet & fs)197 KWFrame * TestTextFrameSorting::createCopyFrame(const QPointF &position, KoShape *orig, KWTextFrameSet &fs)
198 {
199 KoShape *shape = new KWCopyShape(orig);
200 KWFrame *frame = new KWFrame(shape, &fs);
201 shape->setPosition(position);
202 return frame;
203 }
204
205
206 QTEST_KDEMAIN(TestTextFrameSorting, GUI)
207