##// END OF EJS Templates
tst_qpieseries: check added/removed signals
Jani Honkonen -
r1291:eefcc7931b49
parent child
Show More
@@ -1,472 +1,519
1 /****************************************************************************
1 /****************************************************************************
2 **
2 **
3 ** Copyright (C) 2012 Digia Plc
3 ** Copyright (C) 2012 Digia Plc
4 ** All rights reserved.
4 ** All rights reserved.
5 ** For any questions to Digia, please use contact form at http://qt.digia.com
5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 **
6 **
7 ** This file is part of the Qt Commercial Charts Add-on.
7 ** This file is part of the Qt Commercial Charts Add-on.
8 **
8 **
9 ** $QT_BEGIN_LICENSE$
9 ** $QT_BEGIN_LICENSE$
10 ** Licensees holding valid Qt Commercial licenses may use this file in
10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 ** accordance with the Qt Commercial License Agreement provided with the
11 ** accordance with the Qt Commercial License Agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.
13 ** a written agreement between you and Digia.
14 **
14 **
15 ** If you have questions regarding the use of this file, please use
15 ** If you have questions regarding the use of this file, please use
16 ** contact form at http://qt.digia.com
16 ** contact form at http://qt.digia.com
17 ** $QT_END_LICENSE$
17 ** $QT_END_LICENSE$
18 **
18 **
19 ****************************************************************************/
19 ****************************************************************************/
20
20
21 #include <QtTest/QtTest>
21 #include <QtTest/QtTest>
22 #include <qchartview.h>
22 #include <qchartview.h>
23 #include <qchart.h>
23 #include <qchart.h>
24 #include <qpieseries.h>
24 #include <qpieseries.h>
25 #include <qpieslice.h>
25 #include <qpieslice.h>
26 #include <qpiemodelmapper.h>
26 #include <qpiemodelmapper.h>
27 #include <QStandardItemModel>
27 #include <QStandardItemModel>
28 #include <tst_definitions.h>
28 #include <tst_definitions.h>
29
29
30 QTCOMMERCIALCHART_USE_NAMESPACE
30 QTCOMMERCIALCHART_USE_NAMESPACE
31
31
32 Q_DECLARE_METATYPE(QPieSlice*)
32 Q_DECLARE_METATYPE(QPieSlice*)
33 Q_DECLARE_METATYPE(QList<QPieSlice*>)
33
34
34 class tst_qpieseries : public QObject
35 class tst_qpieseries : public QObject
35 {
36 {
36 Q_OBJECT
37 Q_OBJECT
37
38
38 public slots:
39 public slots:
39 void initTestCase();
40 void initTestCase();
40 void cleanupTestCase();
41 void cleanupTestCase();
41 void init();
42 void init();
42 void cleanup();
43 void cleanup();
43
44
44 private slots:
45 private slots:
45 void properties();
46 void properties();
46 void append();
47 void append();
47 void insert();
48 void insert();
48 void remove();
49 void remove();
49 void calculatedValues();
50 void calculatedValues();
50 void clickedSignal();
51 void clickedSignal();
51 void hoverSignal();
52 void hoverSignal();
52
53
53 private:
54 private:
54 void verifyCalculatedData(const QPieSeries &series, bool *ok);
55 void verifyCalculatedData(const QPieSeries &series, bool *ok);
55
56
56 private:
57 private:
57
58
58 };
59 };
59
60
60 void tst_qpieseries::initTestCase()
61 void tst_qpieseries::initTestCase()
61 {
62 {
62 qRegisterMetaType<QPieSlice*>("QPieSlice*");
63 qRegisterMetaType<QPieSlice*>("QPieSlice*");
64 qRegisterMetaType<QList<QPieSlice*> >("QList<QPieSlice*>");
63 }
65 }
64
66
65 void tst_qpieseries::cleanupTestCase()
67 void tst_qpieseries::cleanupTestCase()
66 {
68 {
67 }
69 }
68
70
69 void tst_qpieseries::init()
71 void tst_qpieseries::init()
70 {
72 {
71
73
72 }
74 }
73
75
74 void tst_qpieseries::cleanup()
76 void tst_qpieseries::cleanup()
75 {
77 {
76
78
77 }
79 }
78
80
79 void tst_qpieseries::properties()
81 void tst_qpieseries::properties()
80 {
82 {
81 QPieSeries s;
83 QPieSeries s;
82
84
83 QSignalSpy countSpy(&s, SIGNAL(countChanged()));
85 QSignalSpy countSpy(&s, SIGNAL(countChanged()));
84 QSignalSpy sumSpy(&s, SIGNAL(sumChanged()));
86 QSignalSpy sumSpy(&s, SIGNAL(sumChanged()));
85 QSignalSpy sizeSpy(&s, SIGNAL(pieSizeChanged()));
87 QSignalSpy sizeSpy(&s, SIGNAL(pieSizeChanged()));
86 QSignalSpy startAngleSpy(&s, SIGNAL(pieStartAngleChanged()));
88 QSignalSpy startAngleSpy(&s, SIGNAL(pieStartAngleChanged()));
87 QSignalSpy endAngleSpy(&s, SIGNAL(pieEndAngleChanged()));
89 QSignalSpy endAngleSpy(&s, SIGNAL(pieEndAngleChanged()));
88 QSignalSpy horPosSpy(&s, SIGNAL(horizontalPositionChanged()));
90 QSignalSpy horPosSpy(&s, SIGNAL(horizontalPositionChanged()));
89 QSignalSpy verPosSpy(&s, SIGNAL(verticalPositionChanged()));
91 QSignalSpy verPosSpy(&s, SIGNAL(verticalPositionChanged()));
90
92
91 QVERIFY(s.type() == QAbstractSeries::SeriesTypePie);
93 QVERIFY(s.type() == QAbstractSeries::SeriesTypePie);
92 QVERIFY(s.count() == 0);
94 QVERIFY(s.count() == 0);
93 QVERIFY(s.isEmpty());
95 QVERIFY(s.isEmpty());
94 QCOMPARE(s.sum(), 0.0);
96 QCOMPARE(s.sum(), 0.0);
95 QCOMPARE(s.horizontalPosition(), 0.5);
97 QCOMPARE(s.horizontalPosition(), 0.5);
96 QCOMPARE(s.verticalPosition(), 0.5);
98 QCOMPARE(s.verticalPosition(), 0.5);
97 QCOMPARE(s.pieSize(), 0.7);
99 QCOMPARE(s.pieSize(), 0.7);
98 QCOMPARE(s.pieStartAngle(), 0.0);
100 QCOMPARE(s.pieStartAngle(), 0.0);
99 QCOMPARE(s.pieEndAngle(), 360.0);
101 QCOMPARE(s.pieEndAngle(), 360.0);
100
102
101 s.append("s1", 1);
103 s.append("s1", 1);
102 s.append("s2", 1);
104 s.append("s2", 1);
103 s.append("s3", 1);
105 s.append("s3", 1);
104 s.insert(1, new QPieSlice("s4", 1));
106 s.insert(1, new QPieSlice("s4", 1));
105 s.remove(s.slices().first());
107 s.remove(s.slices().first());
106 QCOMPARE(s.count(), 3);
108 QCOMPARE(s.count(), 3);
107 QCOMPARE(s.sum(), 3.0);
109 QCOMPARE(s.sum(), 3.0);
108 s.clear();
110 s.clear();
109 QCOMPARE(s.count(), 0);
111 QCOMPARE(s.count(), 0);
110 QCOMPARE(s.sum(), 0.0);
112 QCOMPARE(s.sum(), 0.0);
111 QCOMPARE(countSpy.count(), 6);
113 QCOMPARE(countSpy.count(), 6);
112 QCOMPARE(sumSpy.count(), 6);
114 QCOMPARE(sumSpy.count(), 6);
113
115
114 s.setPieSize(-1.0);
116 s.setPieSize(-1.0);
115 QCOMPARE(s.pieSize(), 0.0);
117 QCOMPARE(s.pieSize(), 0.0);
116 s.setPieSize(0.0);
118 s.setPieSize(0.0);
117 s.setPieSize(0.9);
119 s.setPieSize(0.9);
118 s.setPieSize(2.0);
120 s.setPieSize(2.0);
119 QCOMPARE(s.pieSize(), 1.0);
121 QCOMPARE(s.pieSize(), 1.0);
120 QCOMPARE(sizeSpy.count(), 3);
122 QCOMPARE(sizeSpy.count(), 3);
121
123
122 s.setPieStartAngle(0);
124 s.setPieStartAngle(0);
123 s.setPieStartAngle(-180);
125 s.setPieStartAngle(-180);
124 s.setPieStartAngle(180);
126 s.setPieStartAngle(180);
125 QCOMPARE(startAngleSpy.count(), 2);
127 QCOMPARE(startAngleSpy.count(), 2);
126
128
127 s.setPieEndAngle(360);
129 s.setPieEndAngle(360);
128 s.setPieEndAngle(-180);
130 s.setPieEndAngle(-180);
129 s.setPieEndAngle(180);
131 s.setPieEndAngle(180);
130 QCOMPARE(endAngleSpy.count(), 2);
132 QCOMPARE(endAngleSpy.count(), 2);
131
133
132 s.setHorizontalPosition(0.5);
134 s.setHorizontalPosition(0.5);
133 s.setHorizontalPosition(-1.0);
135 s.setHorizontalPosition(-1.0);
134 QCOMPARE(s.horizontalPosition(), 0.0);
136 QCOMPARE(s.horizontalPosition(), 0.0);
135 s.setHorizontalPosition(1.0);
137 s.setHorizontalPosition(1.0);
136 s.setHorizontalPosition(2.0);
138 s.setHorizontalPosition(2.0);
137 QCOMPARE(s.horizontalPosition(), 1.0);
139 QCOMPARE(s.horizontalPosition(), 1.0);
138 QCOMPARE(horPosSpy.count(), 2);
140 QCOMPARE(horPosSpy.count(), 2);
139
141
140 s.setVerticalPosition(0.5);
142 s.setVerticalPosition(0.5);
141 s.setVerticalPosition(-1.0);
143 s.setVerticalPosition(-1.0);
142 QCOMPARE(s.verticalPosition(), 0.0);
144 QCOMPARE(s.verticalPosition(), 0.0);
143 s.setVerticalPosition(1.0);
145 s.setVerticalPosition(1.0);
144 s.setVerticalPosition(2.0);
146 s.setVerticalPosition(2.0);
145 QCOMPARE(s.verticalPosition(), 1.0);
147 QCOMPARE(s.verticalPosition(), 1.0);
146 QCOMPARE(verPosSpy.count(), 2);
148 QCOMPARE(verPosSpy.count(), 2);
147 }
149 }
148
150
149 void tst_qpieseries::append()
151 void tst_qpieseries::append()
150 {
152 {
151 QPieSeries s;
153 QPieSeries s;
154 QSignalSpy addedSpy(&s, SIGNAL(added(QList<QPieSlice*>)));
152
155
153 // append pointer
156 // append pointer
154 QPieSlice *slice1 = 0;
157 QPieSlice *slice1 = 0;
155 QVERIFY(!s.append(slice1));
158 QVERIFY(!s.append(slice1));
156 slice1 = new QPieSlice("slice 1", 1);
159 slice1 = new QPieSlice("slice 1", 1);
157 QVERIFY(s.append(slice1));
160 QVERIFY(s.append(slice1));
158 QVERIFY(!s.append(slice1));
161 QVERIFY(!s.append(slice1));
159 QCOMPARE(s.count(), 1);
162 QCOMPARE(s.count(), 1);
163 QCOMPARE(addedSpy.count(), 1);
164 QList<QPieSlice*> added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(0).at(0));
165 QCOMPARE(added.count(), 1);
166 QCOMPARE(added.first(), slice1);
160
167
161 // append pointer list
168 // append pointer list
162 QList<QPieSlice *> list;
169 QList<QPieSlice *> list;
163 QVERIFY(!s.append(list));
170 QVERIFY(!s.append(list));
164 list << (QPieSlice *) 0;
171 list << (QPieSlice *) 0;
165 QVERIFY(!s.append(list));
172 QVERIFY(!s.append(list));
166 list.clear();
173 list.clear();
167 list << new QPieSlice("slice 2", 2);
174 list << new QPieSlice("slice 2", 2);
168 list << new QPieSlice("slice 3", 3);
175 list << new QPieSlice("slice 3", 3);
169 QVERIFY(s.append(list));
176 QVERIFY(s.append(list));
170 QVERIFY(!s.append(list));
177 QVERIFY(!s.append(list));
171 QCOMPARE(s.count(), 3);
178 QCOMPARE(s.count(), 3);
179 QCOMPARE(addedSpy.count(), 2);
180 added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(1).at(0));
181 QCOMPARE(added.count(), 2);
182 QCOMPARE(added, list);
172
183
173 // append operator
184 // append operator
174 s << new QPieSlice("slice 4", 4);
185 QPieSlice *slice4 = new QPieSlice("slice 4", 4);
186 s << slice4;
175 s << slice1; // fails because already added
187 s << slice1; // fails because already added
176 QCOMPARE(s.count(), 4);
188 QCOMPARE(s.count(), 4);
189 QCOMPARE(addedSpy.count(), 3);
190 added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(2).at(0));
191 QCOMPARE(added.count(), 1);
192 QCOMPARE(added.first(), slice4);
177
193
178 // append with params
194 // append with params
179 QPieSlice *slice5 = s.append("slice 5", 5);
195 QPieSlice *slice5 = s.append("slice 5", 5);
180 QVERIFY(slice5 != 0);
196 QVERIFY(slice5 != 0);
181 QCOMPARE(slice5->value(), 5.0);
197 QCOMPARE(slice5->value(), 5.0);
182 QCOMPARE(slice5->label(), QString("slice 5"));
198 QCOMPARE(slice5->label(), QString("slice 5"));
183 QCOMPARE(s.count(), 5);
199 QCOMPARE(s.count(), 5);
200 QCOMPARE(addedSpy.count(), 4);
201 added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(3).at(0));
202 QCOMPARE(added.count(), 1);
203 QCOMPARE(added.first(), slice5);
184
204
185 // check slices
205 // check slices
186 QVERIFY(!s.isEmpty());
206 QVERIFY(!s.isEmpty());
187 for (int i=0; i<s.count(); i++) {
207 for (int i=0; i<s.count(); i++) {
188 QCOMPARE(s.slices().at(i)->value(), (qreal) i+1);
208 QCOMPARE(s.slices().at(i)->value(), (qreal) i+1);
189 QCOMPARE(s.slices().at(i)->label(), QString("slice ") + QString::number(i+1));
209 QCOMPARE(s.slices().at(i)->label(), QString("slice ") + QString::number(i+1));
190 }
210 }
191 }
211 }
192
212
193 void tst_qpieseries::insert()
213 void tst_qpieseries::insert()
194 {
214 {
195 QPieSeries s;
215 QPieSeries s;
216 QSignalSpy addedSpy(&s, SIGNAL(added(QList<QPieSlice*>)));
196
217
197 // insert one slice
218 // insert one slice
198 QPieSlice *slice1 = 0;
219 QPieSlice *slice1 = 0;
199 QVERIFY(!s.insert(0, slice1));
220 QVERIFY(!s.insert(0, slice1));
200 slice1 = new QPieSlice("slice 1", 1);
221 slice1 = new QPieSlice("slice 1", 1);
201 QVERIFY(!s.insert(-1, slice1));
222 QVERIFY(!s.insert(-1, slice1));
202 QVERIFY(!s.insert(5, slice1));
223 QVERIFY(!s.insert(5, slice1));
203 QVERIFY(s.insert(0, slice1));
224 QVERIFY(s.insert(0, slice1));
204 QVERIFY(!s.insert(0, slice1));
225 QVERIFY(!s.insert(0, slice1));
205 QCOMPARE(s.count(), 1);
226 QCOMPARE(s.count(), 1);
227 QCOMPARE(addedSpy.count(), 1);
228 QList<QPieSlice*> added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(0).at(0));
229 QCOMPARE(added.count(), 1);
230 QCOMPARE(added.first(), slice1);
206
231
207 // add some more slices
232 // add some more slices
208 s.append("slice 2", 2);
233 QPieSlice *slice2 = s.append("slice 2", 2);
209 s.append("slice 4", 4);
234 QPieSlice *slice4 = s.append("slice 4", 4);
210 QCOMPARE(s.count(), 3);
235 QCOMPARE(s.count(), 3);
236 QCOMPARE(addedSpy.count(), 3);
237 added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(1).at(0));
238 QCOMPARE(added.count(), 1);
239 QCOMPARE(added.first(), slice2);
240 added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(2).at(0));
241 QCOMPARE(added.count(), 1);
242 QCOMPARE(added.first(), slice4);
211
243
212 // insert between slices
244 // insert between slices
213 s.insert(2, new QPieSlice("slice 3", 3));
245 QPieSlice *slice3 = new QPieSlice("slice 3", 3);
246 s.insert(2, slice3);
214 QCOMPARE(s.count(), 4);
247 QCOMPARE(s.count(), 4);
248 QCOMPARE(addedSpy.count(), 4);
249 added = qvariant_cast<QList<QPieSlice*> >(addedSpy.at(3).at(0));
250 QCOMPARE(added.count(), 1);
251 QCOMPARE(added.first(), slice3);
215
252
216 // check slices
253 // check slices
217 for (int i=0; i<s.count(); i++) {
254 for (int i=0; i<s.count(); i++) {
218 QCOMPARE(s.slices().at(i)->value(), (qreal) i+1);
255 QCOMPARE(s.slices().at(i)->value(), (qreal) i+1);
219 QCOMPARE(s.slices().at(i)->label(), QString("slice ") + QString::number(i+1));
256 QCOMPARE(s.slices().at(i)->label(), QString("slice ") + QString::number(i+1));
220 }
257 }
221 }
258 }
222
259
223 void tst_qpieseries::remove()
260 void tst_qpieseries::remove()
224 {
261 {
225 QPieSeries s;
262 QPieSeries s;
263 QSignalSpy removedSpy(&s, SIGNAL(removed(QList<QPieSlice*>)));
226
264
227 // add some slices
265 // add some slices
228 QPieSlice *slice1 = s.append("slice 1", 1);
266 QPieSlice *slice1 = s.append("slice 1", 1);
229 QPieSlice *slice2 = s.append("slice 2", 2);
267 QPieSlice *slice2 = s.append("slice 2", 2);
230 QPieSlice *slice3 = s.append("slice 3", 3);
268 QPieSlice *slice3 = s.append("slice 3", 3);
231 QSignalSpy spy1(slice1, SIGNAL(destroyed()));
269 QSignalSpy spy1(slice1, SIGNAL(destroyed()));
232 QSignalSpy spy2(slice2, SIGNAL(destroyed()));
270 QSignalSpy spy2(slice2, SIGNAL(destroyed()));
233 QSignalSpy spy3(slice3, SIGNAL(destroyed()));
271 QSignalSpy spy3(slice3, SIGNAL(destroyed()));
234 QCOMPARE(s.count(), 3);
272 QCOMPARE(s.count(), 3);
235
273
236 // null pointer remove
274 // null pointer remove
237 QVERIFY(!s.remove(0));
275 QVERIFY(!s.remove(0));
238
276
239 // remove first
277 // remove first
240 QVERIFY(s.remove(slice1));
278 QVERIFY(s.remove(slice1));
241 QVERIFY(!s.remove(slice1));
279 QVERIFY(!s.remove(slice1));
242 QCOMPARE(s.count(), 2);
280 QCOMPARE(s.count(), 2);
243 QCOMPARE(s.slices().at(0)->label(), slice2->label());
281 QCOMPARE(s.slices().at(0)->label(), slice2->label());
282 QCOMPARE(removedSpy.count(), 1);
283 QList<QPieSlice*> removed = qvariant_cast<QList<QPieSlice*> >(removedSpy.at(0).at(0));
284 QCOMPARE(removed.count(), 1);
285 QCOMPARE(removed.first(), slice1);
244
286
245 // remove all
287 // remove all
246 s.clear();
288 s.clear();
247 QVERIFY(s.isEmpty());
289 QVERIFY(s.isEmpty());
248 QVERIFY(s.slices().isEmpty());
290 QVERIFY(s.slices().isEmpty());
249 QCOMPARE(s.count(), 0);
291 QCOMPARE(s.count(), 0);
292 QCOMPARE(removedSpy.count(), 2);
293 removed = qvariant_cast<QList<QPieSlice*> >(removedSpy.at(1).at(0));
294 QCOMPARE(removed.count(), 2);
295 QCOMPARE(removed.first(), slice2);
296 QCOMPARE(removed.last(), slice3);
250
297
251 // check that slices were actually destroyed
298 // check that slices were actually destroyed
252 TRY_COMPARE(spy1.count(), 1);
299 TRY_COMPARE(spy1.count(), 1);
253 TRY_COMPARE(spy2.count(), 1);
300 TRY_COMPARE(spy2.count(), 1);
254 TRY_COMPARE(spy3.count(), 1);
301 TRY_COMPARE(spy3.count(), 1);
255 }
302 }
256
303
257 void tst_qpieseries::calculatedValues()
304 void tst_qpieseries::calculatedValues()
258 {
305 {
259 bool ok;
306 bool ok;
260 QPieSeries s;
307 QPieSeries s;
261
308
262 QPieSlice *slice1 = new QPieSlice("slice 1", 1);
309 QPieSlice *slice1 = new QPieSlice("slice 1", 1);
263 QSignalSpy percentageSpy(slice1, SIGNAL(percentageChanged()));
310 QSignalSpy percentageSpy(slice1, SIGNAL(percentageChanged()));
264 QSignalSpy startAngleSpy(slice1, SIGNAL(startAngleChanged()));
311 QSignalSpy startAngleSpy(slice1, SIGNAL(startAngleChanged()));
265 QSignalSpy angleSpanSpy(slice1, SIGNAL(angleSpanChanged()));
312 QSignalSpy angleSpanSpy(slice1, SIGNAL(angleSpanChanged()));
266
313
267 // add a slice
314 // add a slice
268 s.append(slice1);
315 s.append(slice1);
269 verifyCalculatedData(s, &ok);
316 verifyCalculatedData(s, &ok);
270 if (!ok)
317 if (!ok)
271 return;
318 return;
272 QCOMPARE(percentageSpy.count(), 1);
319 QCOMPARE(percentageSpy.count(), 1);
273 QCOMPARE(startAngleSpy.count(), 0);
320 QCOMPARE(startAngleSpy.count(), 0);
274 QCOMPARE(angleSpanSpy.count(), 1);
321 QCOMPARE(angleSpanSpy.count(), 1);
275
322
276 // add some more slices
323 // add some more slices
277 QList<QPieSlice *> list;
324 QList<QPieSlice *> list;
278 list << new QPieSlice("slice 2", 2);
325 list << new QPieSlice("slice 2", 2);
279 list << new QPieSlice("slice 3", 3);
326 list << new QPieSlice("slice 3", 3);
280 s.append(list);
327 s.append(list);
281 verifyCalculatedData(s, &ok);
328 verifyCalculatedData(s, &ok);
282 if (!ok)
329 if (!ok)
283 return;
330 return;
284 QCOMPARE(percentageSpy.count(), 2);
331 QCOMPARE(percentageSpy.count(), 2);
285 QCOMPARE(startAngleSpy.count(), 0);
332 QCOMPARE(startAngleSpy.count(), 0);
286 QCOMPARE(angleSpanSpy.count(), 2);
333 QCOMPARE(angleSpanSpy.count(), 2);
287
334
288 // remove a slice
335 // remove a slice
289 s.remove(list.first()); // remove slice 2
336 s.remove(list.first()); // remove slice 2
290 verifyCalculatedData(s, &ok);
337 verifyCalculatedData(s, &ok);
291 if (!ok)
338 if (!ok)
292 return;
339 return;
293 QCOMPARE(percentageSpy.count(), 3);
340 QCOMPARE(percentageSpy.count(), 3);
294 QCOMPARE(startAngleSpy.count(), 0);
341 QCOMPARE(startAngleSpy.count(), 0);
295 QCOMPARE(angleSpanSpy.count(), 3);
342 QCOMPARE(angleSpanSpy.count(), 3);
296
343
297 // insert a slice
344 // insert a slice
298 s.insert(0, new QPieSlice("Slice 4", 4));
345 s.insert(0, new QPieSlice("Slice 4", 4));
299 verifyCalculatedData(s, &ok);
346 verifyCalculatedData(s, &ok);
300 if (!ok)
347 if (!ok)
301 return;
348 return;
302 QCOMPARE(percentageSpy.count(), 4);
349 QCOMPARE(percentageSpy.count(), 4);
303 QCOMPARE(startAngleSpy.count(), 1);
350 QCOMPARE(startAngleSpy.count(), 1);
304 QCOMPARE(angleSpanSpy.count(), 4);
351 QCOMPARE(angleSpanSpy.count(), 4);
305
352
306 // modify pie angles
353 // modify pie angles
307 s.setPieStartAngle(-90);
354 s.setPieStartAngle(-90);
308 s.setPieEndAngle(90);
355 s.setPieEndAngle(90);
309 verifyCalculatedData(s, &ok);
356 verifyCalculatedData(s, &ok);
310 if (!ok)
357 if (!ok)
311 return;
358 return;
312 QCOMPARE(percentageSpy.count(), 4);
359 QCOMPARE(percentageSpy.count(), 4);
313 QCOMPARE(startAngleSpy.count(), 3);
360 QCOMPARE(startAngleSpy.count(), 3);
314 QCOMPARE(angleSpanSpy.count(), 6);
361 QCOMPARE(angleSpanSpy.count(), 6);
315
362
316 // clear all
363 // clear all
317 s.clear();
364 s.clear();
318 verifyCalculatedData(s, &ok);
365 verifyCalculatedData(s, &ok);
319 QCOMPARE(percentageSpy.count(), 4);
366 QCOMPARE(percentageSpy.count(), 4);
320 QCOMPARE(startAngleSpy.count(), 3);
367 QCOMPARE(startAngleSpy.count(), 3);
321 QCOMPARE(angleSpanSpy.count(), 6);
368 QCOMPARE(angleSpanSpy.count(), 6);
322 }
369 }
323
370
324 void tst_qpieseries::verifyCalculatedData(const QPieSeries &series, bool *ok)
371 void tst_qpieseries::verifyCalculatedData(const QPieSeries &series, bool *ok)
325 {
372 {
326 *ok = false;
373 *ok = false;
327
374
328 qreal sum = 0;
375 qreal sum = 0;
329 foreach (const QPieSlice *slice, series.slices())
376 foreach (const QPieSlice *slice, series.slices())
330 sum += slice->value();
377 sum += slice->value();
331 QCOMPARE(series.sum(), sum);
378 QCOMPARE(series.sum(), sum);
332
379
333 qreal startAngle = series.pieStartAngle();
380 qreal startAngle = series.pieStartAngle();
334 qreal pieAngleSpan = series.pieEndAngle() - series.pieStartAngle();
381 qreal pieAngleSpan = series.pieEndAngle() - series.pieStartAngle();
335 foreach (const QPieSlice *slice, series.slices()) {
382 foreach (const QPieSlice *slice, series.slices()) {
336 qreal ratio = slice->value() / sum;
383 qreal ratio = slice->value() / sum;
337 qreal sliceSpan = pieAngleSpan * ratio;
384 qreal sliceSpan = pieAngleSpan * ratio;
338 QCOMPARE(slice->startAngle(), startAngle);
385 QCOMPARE(slice->startAngle(), startAngle);
339 QCOMPARE(slice->angleSpan(), sliceSpan);
386 QCOMPARE(slice->angleSpan(), sliceSpan);
340 QCOMPARE(slice->percentage(), ratio);
387 QCOMPARE(slice->percentage(), ratio);
341 startAngle += sliceSpan;
388 startAngle += sliceSpan;
342 }
389 }
343
390
344 if (!series.isEmpty())
391 if (!series.isEmpty())
345 QCOMPARE(series.slices().last()->startAngle() + series.slices().last()->angleSpan(), series.pieEndAngle());
392 QCOMPARE(series.slices().last()->startAngle() + series.slices().last()->angleSpan(), series.pieEndAngle());
346
393
347 *ok = true;
394 *ok = true;
348 }
395 }
349
396
350
397
351 void tst_qpieseries::clickedSignal()
398 void tst_qpieseries::clickedSignal()
352 {
399 {
353 // create a pie series
400 // create a pie series
354 QPieSeries *series = new QPieSeries();
401 QPieSeries *series = new QPieSeries();
355 QPieSlice *s1 = series->append("slice 1", 1);
402 QPieSlice *s1 = series->append("slice 1", 1);
356 QPieSlice *s2 = series->append("slice 2", 1);
403 QPieSlice *s2 = series->append("slice 2", 1);
357 QPieSlice *s3 = series->append("slice 3", 1);
404 QPieSlice *s3 = series->append("slice 3", 1);
358 QPieSlice *s4 = series->append("slice 4", 1);
405 QPieSlice *s4 = series->append("slice 4", 1);
359 QSignalSpy clickSpy(series, SIGNAL(clicked(QPieSlice*)));
406 QSignalSpy clickSpy(series, SIGNAL(clicked(QPieSlice*)));
360
407
361 // add series to the chart
408 // add series to the chart
362 QChartView view(new QChart());
409 QChartView view(new QChart());
363 view.chart()->legend()->setVisible(false);
410 view.chart()->legend()->setVisible(false);
364 view.resize(200, 200);
411 view.resize(200, 200);
365 view.chart()->addSeries(series);
412 view.chart()->addSeries(series);
366 view.show();
413 view.show();
367 QTest::qWaitForWindowShown(&view);
414 QTest::qWaitForWindowShown(&view);
368
415
369 // if you devide the chart in four equal tiles these
416 // if you devide the chart in four equal tiles these
370 // are the center points of those tiles
417 // are the center points of those tiles
371 QPoint p1(90.25, 90);
418 QPoint p1(90.25, 90);
372 QPoint p2(150, 90);
419 QPoint p2(150, 90);
373 QPoint p3(90, 150);
420 QPoint p3(90, 150);
374 QPoint p4(150, 150);
421 QPoint p4(150, 150);
375
422
376 QPoint center(120, 120);
423 QPoint center(120, 120);
377
424
378 series->setPieSize(1.0);
425 series->setPieSize(1.0);
379 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
426 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
380 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
427 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
381 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
428 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
382 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
429 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
383 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
430 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
384 TRY_COMPARE(clickSpy.count(), 5); // all hit
431 TRY_COMPARE(clickSpy.count(), 5); // all hit
385 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s4);
432 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s4);
386 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(1).at(0)), s1);
433 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(1).at(0)), s1);
387 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(2).at(0)), s3);
434 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(2).at(0)), s3);
388 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(3).at(0)), s2);
435 QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(3).at(0)), s2);
389 clickSpy.clear();
436 clickSpy.clear();
390
437
391 series->setPieSize(0.5);
438 series->setPieSize(0.5);
392 series->setVerticalPosition(0.25);
439 series->setVerticalPosition(0.25);
393 series->setHorizontalPosition(0.25);
440 series->setHorizontalPosition(0.25);
394 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1); // hits
441 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1); // hits
395 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
442 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
396 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
443 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
397 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
444 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
398 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
445 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
399 TRY_COMPARE(clickSpy.count(), 1);
446 TRY_COMPARE(clickSpy.count(), 1);
400 clickSpy.clear();
447 clickSpy.clear();
401
448
402 series->setVerticalPosition(0.25);
449 series->setVerticalPosition(0.25);
403 series->setHorizontalPosition(0.75);
450 series->setHorizontalPosition(0.75);
404 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
451 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
405 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2); // hits
452 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2); // hits
406 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
453 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
407 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
454 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
408 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
455 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
409 TRY_COMPARE(clickSpy.count(), 1);
456 TRY_COMPARE(clickSpy.count(), 1);
410 clickSpy.clear();
457 clickSpy.clear();
411
458
412 series->setVerticalPosition(0.75);
459 series->setVerticalPosition(0.75);
413 series->setHorizontalPosition(0.25);
460 series->setHorizontalPosition(0.25);
414 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
461 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
415 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
462 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
416 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3); // hits
463 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3); // hits
417 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
464 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4);
418 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
465 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
419 TRY_COMPARE(clickSpy.count(), 1);
466 TRY_COMPARE(clickSpy.count(), 1);
420 clickSpy.clear();
467 clickSpy.clear();
421
468
422 series->setVerticalPosition(0.75);
469 series->setVerticalPosition(0.75);
423 series->setHorizontalPosition(0.75);
470 series->setHorizontalPosition(0.75);
424 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
471 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p1);
425 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
472 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p2);
426 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
473 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p3);
427 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4); // hits
474 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p4); // hits
428 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
475 QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, center);
429 TRY_COMPARE(clickSpy.count(), 1);
476 TRY_COMPARE(clickSpy.count(), 1);
430 clickSpy.clear();
477 clickSpy.clear();
431 }
478 }
432
479
433 void tst_qpieseries::hoverSignal()
480 void tst_qpieseries::hoverSignal()
434 {
481 {
435 // create a pie series
482 // create a pie series
436 QPieSeries *series = new QPieSeries();
483 QPieSeries *series = new QPieSeries();
437 series->setPieSize(1.0);
484 series->setPieSize(1.0);
438 QPieSlice *s1 = series->append("slice 1", 1);
485 QPieSlice *s1 = series->append("slice 1", 1);
439 series->append("slice 2", 2);
486 series->append("slice 2", 2);
440 series->append("slice 3", 3);
487 series->append("slice 3", 3);
441
488
442 // add series to the chart
489 // add series to the chart
443 QChartView view(new QChart());
490 QChartView view(new QChart());
444 view.chart()->legend()->setVisible(false);
491 view.chart()->legend()->setVisible(false);
445 view.resize(200, 200);
492 view.resize(200, 200);
446 view.chart()->addSeries(series);
493 view.chart()->addSeries(series);
447 view.show();
494 view.show();
448 QTest::qWaitForWindowShown(&view);
495 QTest::qWaitForWindowShown(&view);
449
496
450 // first move to right top corner
497 // first move to right top corner
451 QTest::mouseMove(view.viewport(), QPoint(200, 0));
498 QTest::mouseMove(view.viewport(), QPoint(200, 0));
452 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
499 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
453
500
454 // move inside the slice
501 // move inside the slice
455 // pie rectangle: QRectF(60,60 121x121)
502 // pie rectangle: QRectF(60,60 121x121)
456 QSignalSpy hoverSpy(series, SIGNAL(hovered(QPieSlice*,bool)));
503 QSignalSpy hoverSpy(series, SIGNAL(hovered(QPieSlice*,bool)));
457 QTest::mouseMove(view.viewport(), QPoint(139, 85));
504 QTest::mouseMove(view.viewport(), QPoint(139, 85));
458 TRY_COMPARE(hoverSpy.count(), 1);
505 TRY_COMPARE(hoverSpy.count(), 1);
459 QCOMPARE(qvariant_cast<QPieSlice*>(hoverSpy.at(0).at(0)), s1);
506 QCOMPARE(qvariant_cast<QPieSlice*>(hoverSpy.at(0).at(0)), s1);
460 QCOMPARE(qvariant_cast<bool>(hoverSpy.at(0).at(1)), true);
507 QCOMPARE(qvariant_cast<bool>(hoverSpy.at(0).at(1)), true);
461
508
462 // move outside the slice
509 // move outside the slice
463 QTest::mouseMove(view.viewport(), QPoint(200, 0));
510 QTest::mouseMove(view.viewport(), QPoint(200, 0));
464 TRY_COMPARE(hoverSpy.count(), 2);
511 TRY_COMPARE(hoverSpy.count(), 2);
465 QCOMPARE(qvariant_cast<QPieSlice*>(hoverSpy.at(1).at(0)), s1);
512 QCOMPARE(qvariant_cast<QPieSlice*>(hoverSpy.at(1).at(0)), s1);
466 QCOMPARE(qvariant_cast<bool>(hoverSpy.at(1).at(1)), false);
513 QCOMPARE(qvariant_cast<bool>(hoverSpy.at(1).at(1)), false);
467 }
514 }
468
515
469 QTEST_MAIN(tst_qpieseries)
516 QTEST_MAIN(tst_qpieseries)
470
517
471 #include "tst_qpieseries.moc"
518 #include "tst_qpieseries.moc"
472
519
General Comments 0
You need to be logged in to leave comments. Login now