diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-08-05 12:33:56 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-05 15:59:59 +0000 |
commit | 3f4b3d1a30da20f36101aa5505eafb90f3dd72c6 (patch) | |
tree | 4aa2876b7303b259bc9f4d51be97e385081abc60 /tests | |
parent | d6fdc93bb085d64d1817b20f787e25b7bb911e5c (diff) |
Fix graphics api filter compatibility test and add unit test
Also needed to properly specify namespace and class name for
signal arguments so they are picked up in old style connections.
Task-number: QTBUG-54711
Change-Id: Id752a3dd0703aa6bf02da4ec4252c6207fa60acb
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/render/qgraphicsapifilter/qgraphicsapifilter.pro | 13 | ||||
-rw-r--r-- | tests/auto/render/qgraphicsapifilter/tst_qgraphicsapifilter.cpp | 220 | ||||
-rw-r--r-- | tests/auto/render/render.pro | 3 |
3 files changed, 235 insertions, 1 deletions
diff --git a/tests/auto/render/qgraphicsapifilter/qgraphicsapifilter.pro b/tests/auto/render/qgraphicsapifilter/qgraphicsapifilter.pro new file mode 100644 index 000000000..ce2d9ac12 --- /dev/null +++ b/tests/auto/render/qgraphicsapifilter/qgraphicsapifilter.pro @@ -0,0 +1,13 @@ +TEMPLATE = app + +TARGET = tst_qgraphicsapifilter + +QT += 3dcore 3dcore-private 3drender 3drender-private testlib + +CONFIG += testcase + +SOURCES += \ + tst_qgraphicsapifilter.cpp + +include(../../core/common/common.pri) +include(../commons/commons.pri) diff --git a/tests/auto/render/qgraphicsapifilter/tst_qgraphicsapifilter.cpp b/tests/auto/render/qgraphicsapifilter/tst_qgraphicsapifilter.cpp new file mode 100644 index 000000000..00a55655b --- /dev/null +++ b/tests/auto/render/qgraphicsapifilter/tst_qgraphicsapifilter.cpp @@ -0,0 +1,220 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QTest> +#include <QObject> +#include <Qt3DRender/qgraphicsapifilter.h> +#include <QtGui/qopenglcontext.h> +#include <QtCore/qsharedpointer.h> +#include <QSignalSpy> + +class tst_QGraphicsApiFilter : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void defaultConstruction() + { + // WHEN + Qt3DRender::QGraphicsApiFilter apiFilter; + + // THEN + const auto api = (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) + ? Qt3DRender::QGraphicsApiFilter::OpenGL + : Qt3DRender::QGraphicsApiFilter::OpenGLES; + QCOMPARE(apiFilter.api(), api); + QCOMPARE(apiFilter.profile(), Qt3DRender::QGraphicsApiFilter::NoProfile); + QCOMPARE(apiFilter.majorVersion(), 0); + QCOMPARE(apiFilter.minorVersion(), 0); + QCOMPARE(apiFilter.extensions(), QStringList()); + QCOMPARE(apiFilter.vendor(), QString()); + } + + void properties() + { + // GIVEN + Qt3DRender::QGraphicsApiFilter apiFilter; + + { + // WHEN + QSignalSpy spy(&apiFilter, SIGNAL(apiChanged(Qt3DRender::QGraphicsApiFilter::Api))); + apiFilter.setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + + // THEN + QCOMPARE(apiFilter.api(), Qt3DRender::QGraphicsApiFilter::OpenGL); + bool shouldEmitSignal = (QOpenGLContext::openGLModuleType() != QOpenGLContext::LibGL); + QCOMPARE(spy.isEmpty(), !shouldEmitSignal); + } + + { + // WHEN + QSignalSpy spy(&apiFilter, SIGNAL(profileChanged(Qt3DRender::QGraphicsApiFilter::OpenGLProfile))); + apiFilter.setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + + // THEN + QCOMPARE(apiFilter.profile(), Qt3DRender::QGraphicsApiFilter::CoreProfile); + QCOMPARE(spy.count(), 1); + } + + { + // WHEN + QSignalSpy spy(&apiFilter, SIGNAL(majorVersionChanged(int))); + apiFilter.setMajorVersion(4); + + // THEN + QCOMPARE(apiFilter.majorVersion(), 4); + QCOMPARE(spy.count(), 1); + } + + { + // WHEN + QSignalSpy spy(&apiFilter, SIGNAL(minorVersionChanged(int))); + apiFilter.setMinorVersion(5); + + // THEN + QCOMPARE(apiFilter.minorVersion(), 5); + QCOMPARE(spy.count(), 1); + } + + { + // WHEN + QSignalSpy spy(&apiFilter, SIGNAL(extensionsChanged(QStringList))); + const auto extensions = (QStringList() << QLatin1String("extension1") << QLatin1String("extension2")); + apiFilter.setExtensions(extensions); + + // THEN + QCOMPARE(apiFilter.extensions(), extensions); + QCOMPARE(spy.count(), 1); + } + + { + // WHEN + QSignalSpy spy(&apiFilter, SIGNAL(vendorChanged(QString))); + const QLatin1String vendor("Triangles McTriangleFace"); + apiFilter.setVendor(vendor); + + // THEN + QCOMPARE(apiFilter.vendor(), vendor); + QCOMPARE(spy.count(), 1); + } + } + + void shouldDetermineCompatibility_data() + { + QTest::addColumn<QSharedPointer<Qt3DRender::QGraphicsApiFilter>>("required"); + QTest::addColumn<QSharedPointer<Qt3DRender::QGraphicsApiFilter>>("actual"); + QTest::addColumn<bool>("expected"); + + auto required = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + required->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + required->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + required->setMajorVersion(4); + required->setMinorVersion(5); + auto actual = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + actual->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + actual->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + actual->setMajorVersion(4); + actual->setMinorVersion(5); + bool expected = true; + QTest::newRow("exact_match") << required << actual << expected; + + required = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + required->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + required->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + required->setMajorVersion(3); + required->setMinorVersion(2); + actual = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + actual->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + actual->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + actual->setMajorVersion(4); + actual->setMinorVersion(5); + expected = true; + QTest::newRow("actual_is_higher_version") << required << actual << expected; + + required = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + required->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + required->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + required->setMajorVersion(4); + required->setMinorVersion(5); + actual = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + actual->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + actual->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + actual->setMajorVersion(3); + actual->setMinorVersion(2); + expected = false; + QTest::newRow("actual_is_lower_version") << required << actual << expected; + + required = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + required->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + required->setProfile(Qt3DRender::QGraphicsApiFilter::CompatibilityProfile); + required->setMajorVersion(4); + required->setMinorVersion(5); + actual = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + actual->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + actual->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + actual->setMajorVersion(4); + actual->setMinorVersion(5); + expected = false; + QTest::newRow("wrong_profile") << required << actual << expected; + + required = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + required->setApi(Qt3DRender::QGraphicsApiFilter::OpenGL); + required->setProfile(Qt3DRender::QGraphicsApiFilter::CoreProfile); + required->setMajorVersion(3); + required->setMinorVersion(2); + actual = QSharedPointer<Qt3DRender::QGraphicsApiFilter>::create(); + actual->setApi(Qt3DRender::QGraphicsApiFilter::OpenGLES); + actual->setProfile(Qt3DRender::QGraphicsApiFilter::NoProfile); + actual->setMajorVersion(3); + actual->setMinorVersion(2); + expected = false; + QTest::newRow("wrong_api") << required << actual << expected; + } + + void shouldDetermineCompatibility() + { + // GIVEN + QFETCH(QSharedPointer<Qt3DRender::QGraphicsApiFilter>, required); + QFETCH(QSharedPointer<Qt3DRender::QGraphicsApiFilter>, actual); + QFETCH(bool, expected); + + // WHEN + const auto isCompatible = (*actual == *required); + + // THEN + QCOMPARE(isCompatible, expected); + } + + // TODO: Add equality test in 5.8 when we can add new api to + // test for compatibility and properly use operator == to really + // test for equality. +}; + + +QTEST_APPLESS_MAIN(tst_QGraphicsApiFilter) + +#include "tst_qgraphicsapifilter.moc" diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index be5a39d2c..bfd2abe09 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -48,5 +48,6 @@ contains(QT_CONFIG, private_tests) { shadercache \ layerfiltering \ filterentitybycomponent \ - genericlambdajob + genericlambdajob \ + qgraphicsapifilter } |