From b9dcab64904c762a9a652cb4a3882bda21027565 Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Wed, 21 Jan 2015 16:44:00 +0100 Subject: Add QAspectFactory class, creates aspects by name Change-Id: I91480d9a61accf313d10f5ddb21100fdc13481c2 Reviewed-by: Giuseppe D'Angelo --- tests/auto/core/core.pro | 1 + tests/auto/core/qaspectfactory/qaspectfactory.pro | 7 ++ .../core/qaspectfactory/tst_qaspectfactory.cpp | 131 +++++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 tests/auto/core/qaspectfactory/qaspectfactory.pro create mode 100644 tests/auto/core/qaspectfactory/tst_qaspectfactory.cpp (limited to 'tests') 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 +#include +#include + +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 jobsToExecute(qint64) Q_DECL_OVERRIDE \ + { \ + return QVector(); \ + } \ +}; + +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(aspect) != Q_NULLPTR); + QVERIFY(aspect->parent() == Q_NULLPTR); + } + + void shouldRegisterFactories() + { + // GIVEN + QAspectFactory factory; + + // WHEN + factory.addFactory(QStringLiteral("another"), + QAspectFactory::functionHelper); + + // THEN + QCOMPARE(factory.availableFactories().size(), 2); + QVERIFY(factory.availableFactories().contains(QStringLiteral("another"))); + + // WHEN + QAbstractAspect *aspect = factory.createAspect(QStringLiteral("another"), this); + + // THEN + QVERIFY(qobject_cast(aspect) != Q_NULLPTR); + QCOMPARE(aspect->parent(), this); + } + + void shouldGracefulyHandleMissingFactories() + { + // GIVEN + QAspectFactory factory; + + // WHEN + QAbstractAspect *aspect = factory.createAspect(QStringLiteral("missing"), this); + + // THEN + QVERIFY(qobject_cast(aspect) == Q_NULLPTR); + } +}; + +QTEST_MAIN(tst_QAspectFactory) + +#include "tst_qaspectfactory.moc" -- cgit v1.2.3