1/****************************************************************************
2**
3** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB).
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt3D module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
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 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29#include <QtTest/QTest>
30#include <Qt3DCore/private/qaspectfactory_p.h>
31#include <Qt3DCore/QAbstractAspect>
32
33using namespace QT_PREPEND_NAMESPACE(Qt3DCore);
34
35#define FAKE_ASPECT(ClassName) \
36class ClassName : public QAbstractAspect \
37{ \
38 Q_OBJECT \
39public: \
40 explicit ClassName(QObject *parent = 0) \
41 : QAbstractAspect(parent) {} \
42\
43private: \
44 void onRegistered() override {} \
45 void onEngineStartup() override {} \
46 void onEngineShutdown() override {} \
47\
48 QVector<QAspectJobPtr> jobsToExecute(qint64) override \
49 { \
50 return QVector<QAspectJobPtr>(); \
51 } \
52};
53
54FAKE_ASPECT(DefaultFakeAspect)
55FAKE_ASPECT(AnotherFakeAspect)
56
57QT3D_REGISTER_ASPECT("default", DefaultFakeAspect)
58
59class tst_QAspectFactory : public QObject
60{
61 Q_OBJECT
62private Q_SLOTS:
63 void shoulHaveDefaultState()
64 {
65 // GIVEN
66 QAspectFactory factory;
67
68 // THEN
69 QCOMPARE(factory.availableFactories().size(), 1);
70 QCOMPARE(factory.availableFactories().first(), QLatin1String("default"));
71
72 // WHEN
73 QAbstractAspect *aspect = factory.createAspect(aspect: QLatin1String("default"));
74
75 // THEN
76 QVERIFY(qobject_cast<DefaultFakeAspect*>(aspect) != nullptr);
77 QVERIFY(aspect->parent() == nullptr);
78 }
79
80 void shouldKnowAspectNames()
81 {
82 // GIVEN
83 QAspectFactory factory;
84
85 // WHEN
86 DefaultFakeAspect fake;
87 AnotherFakeAspect missing;
88
89 // THEN
90 QCOMPARE(factory.aspectName(&fake), QLatin1String("default"));
91 QCOMPARE(factory.aspectName(&missing), QLatin1String());
92 }
93
94 void shouldGracefulyHandleMissingFactories()
95 {
96 // GIVEN
97 QAspectFactory factory;
98
99 // WHEN
100 QAbstractAspect *aspect = factory.createAspect(aspect: QLatin1String("missing"), parent: this);
101
102 // THEN
103 QVERIFY(qobject_cast<AnotherFakeAspect*>(aspect) == nullptr);
104 }
105};
106
107QTEST_MAIN(tst_QAspectFactory)
108
109#include "tst_qaspectfactory.moc"
110

source code of qt3d/tests/auto/core/qaspectfactory/tst_qaspectfactory.cpp