1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Data Visualization module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 or (at your option) any later version
20** approved by the KDE Free Qt Foundation. The licenses are as published by
21** the Free Software Foundation and appearing in the file LICENSE.GPL3
22** included in the packaging of this file. Please review the following
23** information to ensure the GNU General Public License requirements will
24** be met: https://www.gnu.org/licenses/gpl-3.0.html.
25**
26** $QT_END_LICENSE$
27**
28****************************************************************************/
29
30#include <QtTest/QtTest>
31
32#include <QtDataVisualization/Q3DSurface>
33
34#include "cpptestutil.h"
35
36using namespace QtDataVisualization;
37
38class tst_surface: public QObject
39{
40 Q_OBJECT
41
42private slots:
43 void initTestCase();
44 void cleanupTestCase();
45 void init();
46 void cleanup();
47
48 void construct();
49
50 void initialProperties();
51 void initializeProperties();
52 void invalidProperties();
53
54 void addSeries();
55 void addMultipleSeries();
56 void selectSeries();
57 void removeSeries();
58 void removeMultipleSeries();
59
60private:
61 Q3DSurface *m_graph;
62};
63
64QSurface3DSeries *newSeries()
65{
66 QSurface3DSeries *series = new QSurface3DSeries;
67 QSurfaceDataArray *data = new QSurfaceDataArray;
68 QSurfaceDataRow *dataRow1 = new QSurfaceDataRow;
69 QSurfaceDataRow *dataRow2 = new QSurfaceDataRow;
70 *dataRow1 << QVector3D(0.0f, 0.1f, 0.5f) << QVector3D(1.0f, 0.5f, 0.5f);
71 *dataRow2 << QVector3D(0.0f, 1.8f, 1.0f) << QVector3D(1.0f, 1.2f, 1.0f);
72 *data << dataRow1 << dataRow2;
73 series->dataProxy()->resetArray(newArray: data);
74
75 return series;
76}
77
78void tst_surface::initTestCase()
79{
80 if (!CpptestUtil::isOpenGLSupported())
81 QSKIP("OpenGL not supported on this platform");
82}
83
84void tst_surface::cleanupTestCase()
85{
86}
87
88void tst_surface::init()
89{
90 m_graph = new Q3DSurface();
91}
92
93void tst_surface::cleanup()
94{
95 delete m_graph;
96}
97
98void tst_surface::construct()
99{
100 Q3DSurface *graph = new Q3DSurface();
101 QVERIFY(graph);
102 delete graph;
103
104 QSurfaceFormat format;
105 graph = new Q3DSurface(&format);
106 QVERIFY(graph);
107 delete graph;
108}
109
110void tst_surface::initialProperties()
111{
112 QVERIFY(m_graph);
113 QCOMPARE(m_graph->seriesList().length(), 0);
114 QVERIFY(!m_graph->selectedSeries());
115 QCOMPARE(m_graph->flipHorizontalGrid(), false);
116 QCOMPARE(m_graph->axisX()->orientation(), QAbstract3DAxis::AxisOrientationX);
117 QCOMPARE(m_graph->axisY()->orientation(), QAbstract3DAxis::AxisOrientationY);
118 QCOMPARE(m_graph->axisZ()->orientation(), QAbstract3DAxis::AxisOrientationZ);
119
120 // Common properties
121 QCOMPARE(m_graph->activeTheme()->type(), Q3DTheme::ThemeQt);
122 QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
123 QCOMPARE(m_graph->shadowQuality(), QAbstract3DGraph::ShadowQualityMedium);
124 QVERIFY(m_graph->scene());
125 QCOMPARE(m_graph->measureFps(), false);
126 QCOMPARE(m_graph->isOrthoProjection(), false);
127 QCOMPARE(m_graph->selectedElement(), QAbstract3DGraph::ElementNone);
128 QCOMPARE(m_graph->aspectRatio(), 2.0);
129 QCOMPARE(m_graph->optimizationHints(), QAbstract3DGraph::OptimizationDefault);
130 QCOMPARE(m_graph->isPolar(), false);
131 QCOMPARE(m_graph->radialLabelOffset(), 1.0);
132 QCOMPARE(m_graph->horizontalAspectRatio(), 0.0);
133 QCOMPARE(m_graph->isReflection(), false);
134 QCOMPARE(m_graph->reflectivity(), 0.5);
135 QCOMPARE(m_graph->locale(), QLocale("C"));
136 QCOMPARE(m_graph->queriedGraphPosition(), QVector3D(0, 0, 0));
137 QCOMPARE(m_graph->margin(), -1.0);
138}
139
140void tst_surface::initializeProperties()
141{
142 m_graph->setFlipHorizontalGrid(true);
143
144 QCOMPARE(m_graph->flipHorizontalGrid(), true);
145
146 Q3DTheme *theme = new Q3DTheme(Q3DTheme::ThemeDigia);
147 m_graph->setActiveTheme(theme);
148 m_graph->setSelectionMode(QAbstract3DGraph::SelectionItem | QAbstract3DGraph::SelectionRow | QAbstract3DGraph::SelectionSlice);
149 m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftHigh);
150 QCOMPARE(m_graph->shadowQuality(), QAbstract3DGraph::ShadowQualitySoftHigh);
151 m_graph->setMeasureFps(true);
152 m_graph->setOrthoProjection(true);
153 m_graph->setAspectRatio(1.0);
154 m_graph->setOptimizationHints(QAbstract3DGraph::OptimizationStatic);
155 m_graph->setPolar(true);
156 m_graph->setRadialLabelOffset(0.1f);
157 m_graph->setHorizontalAspectRatio(1.0);
158 m_graph->setReflection(true);
159 m_graph->setReflectivity(0.1);
160 m_graph->setLocale(QLocale("FI"));
161 m_graph->setMargin(1.0);
162
163 QCOMPARE(m_graph->activeTheme()->type(), Q3DTheme::ThemeDigia);
164 QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem | QAbstract3DGraph::SelectionRow | QAbstract3DGraph::SelectionSlice);
165 QCOMPARE(m_graph->shadowQuality(), QAbstract3DGraph::ShadowQualityNone); // Ortho disables shadows
166 QCOMPARE(m_graph->measureFps(), true);
167 QCOMPARE(m_graph->isOrthoProjection(), true);
168 QCOMPARE(m_graph->aspectRatio(), 1.0);
169 QCOMPARE(m_graph->optimizationHints(), QAbstract3DGraph::OptimizationStatic);
170 QCOMPARE(m_graph->isPolar(), true);
171 QCOMPARE(m_graph->radialLabelOffset(), 0.1f);
172 QCOMPARE(m_graph->horizontalAspectRatio(), 1.0);
173 QCOMPARE(m_graph->isReflection(), true);
174 QCOMPARE(m_graph->reflectivity(), 0.1);
175 QCOMPARE(m_graph->locale(), QLocale("FI"));
176 QCOMPARE(m_graph->margin(), 1.0);
177}
178
179void tst_surface::invalidProperties()
180{
181 m_graph->setSelectionMode(QAbstract3DGraph::SelectionColumn | QAbstract3DGraph::SelectionRow | QAbstract3DGraph::SelectionSlice);
182 m_graph->setAspectRatio(-1.0);
183 m_graph->setHorizontalAspectRatio(-1.0);
184 m_graph->setReflectivity(-1.0);
185 m_graph->setLocale(QLocale("XX"));
186
187 QCOMPARE(m_graph->selectionMode(), QAbstract3DGraph::SelectionItem);
188 QCOMPARE(m_graph->aspectRatio(), -1.0/*2.0*/); // TODO: Fix once QTRD-3367 is done
189 QCOMPARE(m_graph->horizontalAspectRatio(), -1.0/*0.0*/); // TODO: Fix once QTRD-3367 is done
190 QCOMPARE(m_graph->reflectivity(), -1.0/*0.5*/); // TODO: Fix once QTRD-3367 is done
191 QCOMPARE(m_graph->locale(), QLocale("C"));
192}
193
194void tst_surface::addSeries()
195{
196 m_graph->addSeries(series: newSeries());
197
198 QCOMPARE(m_graph->seriesList().length(), 1);
199 QVERIFY(!m_graph->selectedSeries());
200}
201
202void tst_surface::addMultipleSeries()
203{
204 QSurface3DSeries *series = newSeries();
205 QSurface3DSeries *series2 = newSeries();
206 QSurface3DSeries *series3 = newSeries();
207
208 m_graph->addSeries(series);
209 m_graph->addSeries(series: series2);
210 m_graph->addSeries(series: series3);
211
212 QCOMPARE(m_graph->seriesList().length(), 3);
213}
214
215void tst_surface::selectSeries()
216{
217 QSurface3DSeries *series = newSeries();
218
219 m_graph->addSeries(series);
220 m_graph->seriesList()[0]->setSelectedPoint(QPoint(0, 0));
221
222 QCOMPARE(m_graph->seriesList().length(), 1);
223 QCOMPARE(m_graph->selectedSeries(), series);
224
225 m_graph->clearSelection();
226 QVERIFY(!m_graph->selectedSeries());
227}
228
229void tst_surface::removeSeries()
230{
231 QSurface3DSeries *series = newSeries();
232
233 m_graph->addSeries(series);
234 m_graph->removeSeries(series);
235 QCOMPARE(m_graph->seriesList().length(), 0);
236
237 delete series;
238}
239
240void tst_surface::removeMultipleSeries()
241{
242 QSurface3DSeries *series = newSeries();
243 QSurface3DSeries *series2 = newSeries();
244 QSurface3DSeries *series3 = newSeries();
245
246 m_graph->addSeries(series);
247 m_graph->addSeries(series: series2);
248 m_graph->addSeries(series: series3);
249
250 m_graph->seriesList()[0]->setSelectedPoint(QPoint(0, 0));
251 QCOMPARE(m_graph->selectedSeries(), series);
252
253 m_graph->removeSeries(series);
254 QCOMPARE(m_graph->seriesList().length(), 2);
255 QVERIFY(!m_graph->selectedSeries());
256
257 m_graph->removeSeries(series: series2);
258 QCOMPARE(m_graph->seriesList().length(), 1);
259
260 m_graph->removeSeries(series: series3);
261 QCOMPARE(m_graph->seriesList().length(), 0);
262
263 delete series;
264 delete series2;
265 delete series3;
266}
267
268QTEST_MAIN(tst_surface)
269#include "tst_surface.moc"
270

source code of qtdatavis3d/tests/auto/cpptest/q3dsurface/tst_surface.cpp