diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2015-01-21 16:44:00 +0100 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2015-01-23 18:03:49 +0100 |
commit | b9dcab64904c762a9a652cb4a3882bda21027565 (patch) | |
tree | e43abcab5ed3eb48d8ad47c68f17a8d761336f31 /tests | |
parent | 05e704725bfe1f094d45677738173feec855e915 (diff) |
Add QAspectFactory class, creates aspects by name
Change-Id: I91480d9a61accf313d10f5ddb21100fdc13481c2
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/core/core.pro | 1 | ||||
-rw-r--r-- | tests/auto/core/qaspectfactory/qaspectfactory.pro | 7 | ||||
-rw-r--r-- | tests/auto/core/qaspectfactory/tst_qaspectfactory.cpp | 131 |
3 files changed, 139 insertions, 0 deletions
diff --git a/tests/auto/core/core.pro b/tests/auto/core/core.pro index 47cc2760c..785f05ca9 100644 --- a/tests/auto/core/core.pro +++ b/tests/auto/core/core.pro @@ -10,6 +10,7 @@ SUBDIRS = \ nodes \ qentity \ qaspectengine \ + qaspectfactory \ qchangearbiter \ qscene \ diff --git a/tests/auto/core/qaspectfactory/qaspectfactory.pro b/tests/auto/core/qaspectfactory/qaspectfactory.pro new file mode 100644 index 000000000..d1ec63d3d --- /dev/null +++ b/tests/auto/core/qaspectfactory/qaspectfactory.pro @@ -0,0 +1,7 @@ +TARGET = tst_qaspectfactory +CONFIG += testcase +TEMPLATE = app + +SOURCES += tst_qaspectfactory.cpp + +QT += testlib 3dcore diff --git a/tests/auto/core/qaspectfactory/tst_qaspectfactory.cpp b/tests/auto/core/qaspectfactory/tst_qaspectfactory.cpp new file mode 100644 index 000000000..db8e6f820 --- /dev/null +++ b/tests/auto/core/qaspectfactory/tst_qaspectfactory.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QTest> +#include <Qt3DCore/QAspectFactory> +#include <Qt3DCore/QAbstractAspect> + +using namespace QT_PREPEND_NAMESPACE(Qt3D); + +#define FAKE_ASPECT(ClassName) \ +class ClassName : public QAbstractAspect \ +{ \ + Q_OBJECT \ +public: \ + explicit ClassName(QObject *parent = 0) \ + : QAbstractAspect(QAbstractAspect::AspectOther, parent) {} \ +\ +private: \ + void setRootEntity(QEntity *) Q_DECL_OVERRIDE {} \ + void onInitialize(const QVariantMap &) Q_DECL_OVERRIDE {} \ + void onCleanup() Q_DECL_OVERRIDE {} \ + void sceneNodeAdded(QSceneChangePtr &) Q_DECL_OVERRIDE {} \ + void sceneNodeRemoved(QSceneChangePtr &) Q_DECL_OVERRIDE {} \ +\ + QVector<QAspectJobPtr> jobsToExecute(qint64) Q_DECL_OVERRIDE \ + { \ + return QVector<QAspectJobPtr>(); \ + } \ +}; + +FAKE_ASPECT(DefaultFakeAspect) +FAKE_ASPECT(AnotherFakeAspect) + +QT3D_REGISTER_ASPECT("default", DefaultFakeAspect) + +class tst_QAspectFactory : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void shoulHaveDefaultState() + { + // GIVEN + QAspectFactory factory; + + // THEN + QCOMPARE(factory.availableFactories().size(), 1); + QCOMPARE(factory.availableFactories().first(), QString("default")); + + // WHEN + QAbstractAspect *aspect = factory.createAspect(QStringLiteral("default")); + + // THEN + QVERIFY(qobject_cast<DefaultFakeAspect*>(aspect) != Q_NULLPTR); + QVERIFY(aspect->parent() == Q_NULLPTR); + } + + void shouldRegisterFactories() + { + // GIVEN + QAspectFactory factory; + + // WHEN + factory.addFactory(QStringLiteral("another"), + QAspectFactory::functionHelper<AnotherFakeAspect>); + + // THEN + QCOMPARE(factory.availableFactories().size(), 2); + QVERIFY(factory.availableFactories().contains(QStringLiteral("another"))); + + // WHEN + QAbstractAspect *aspect = factory.createAspect(QStringLiteral("another"), this); + + // THEN + QVERIFY(qobject_cast<AnotherFakeAspect*>(aspect) != Q_NULLPTR); + QCOMPARE(aspect->parent(), this); + } + + void shouldGracefulyHandleMissingFactories() + { + // GIVEN + QAspectFactory factory; + + // WHEN + QAbstractAspect *aspect = factory.createAspect(QStringLiteral("missing"), this); + + // THEN + QVERIFY(qobject_cast<AnotherFakeAspect*>(aspect) == Q_NULLPTR); + } +}; + +QTEST_MAIN(tst_QAspectFactory) + +#include "tst_qaspectfactory.moc" |