diff options
Diffstat (limited to 'tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp')
-rw-r--r-- | tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp b/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp new file mode 100644 index 000000000..37d8ff566 --- /dev/null +++ b/tests/auto/quick3d/quick3dnodeinstantiator/tst_quick3dnodeinstantiator.cpp @@ -0,0 +1,223 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Research In Motion. +** Copyright (C) 2014 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:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later 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 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../../shared/util.h" +#include "stringmodel.h" + +#include <qtest.h> +#include <QSignalSpy> +#include <QDebug> + +#include <Qt3DQuick/private/quick3dnodeinstantiator_p.h> + +#include <QtQml/qqmlengine.h> +#include <QtQml/qqmlcomponent.h> +#include <QtQml/qqmlcontext.h> + +using namespace Qt3D::Quick; + +class tst_quick3dnodeinstantiator: public QQmlDataTest +{ + Q_OBJECT + +private slots: + void createNone(); + void createSingle(); + void createMultiple(); + void stringModel(); + void activeProperty(); + void intModelChange(); + void createAndRemove(); +}; + +void tst_quick3dnodeinstantiator::createNone() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createNone.qml")); + Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create()); + QVERIFY(instantiator != 0); + QCOMPARE(instantiator->isActive(), true); + QCOMPARE(instantiator->count(), 0); + QCOMPARE(instantiator->property("success").toBool(), true); + QVERIFY(instantiator->delegate()->isReady()); +} + +void tst_quick3dnodeinstantiator::createSingle() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createSingle.qml")); + Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create()); + QVERIFY(instantiator != 0); + QCOMPARE(instantiator->isActive(), true); + QCOMPARE(instantiator->count(), 1); + QVERIFY(instantiator->delegate()->isReady()); + + QObject *object = instantiator->object(); + QVERIFY(object); + QCOMPARE(object->parent(), instantiator); + QCOMPARE(object->property("success").toBool(), true); + QCOMPARE(object->property("idx").toInt(), 0); +} + +void tst_quick3dnodeinstantiator::createMultiple() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createMultiple.qml")); + Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create()); + QVERIFY(instantiator != 0); + QCOMPARE(instantiator->isActive(), true); + QCOMPARE(instantiator->count(), 10); + + for (int i = 0; i < 10; i++) { + QObject *object = instantiator->objectAt(i); + QVERIFY(object); + QCOMPARE(object->parent(), instantiator); + QCOMPARE(object->property("success").toBool(), true); + QCOMPARE(object->property("idx").toInt(), i); + } +} + +void tst_quick3dnodeinstantiator::stringModel() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("stringModel.qml")); + Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create()); + QVERIFY(instantiator != 0); + QCOMPARE(instantiator->isActive(), true); + QCOMPARE(instantiator->count(), 4); + + for (int i = 0; i < 4; i++) { + QObject *object = instantiator->objectAt(i); + QVERIFY(object); + QCOMPARE(object->parent(), instantiator); + QCOMPARE(object->property("success").toBool(), true); + } +} + +void tst_quick3dnodeinstantiator::activeProperty() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("inactive.qml")); + Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create()); + QVERIFY(instantiator != 0); + QSignalSpy activeSpy(instantiator, SIGNAL(activeChanged())); + QSignalSpy countSpy(instantiator, SIGNAL(countChanged())); + QSignalSpy objectSpy(instantiator, SIGNAL(objectChanged())); + QSignalSpy modelSpy(instantiator, SIGNAL(modelChanged())); + QCOMPARE(instantiator->isActive(), false); + QCOMPARE(instantiator->count(), 0); + QVERIFY(instantiator->delegate()->isReady()); + + QCOMPARE(activeSpy.count(), 0); + QCOMPARE(countSpy.count(), 0); + QCOMPARE(objectSpy.count(), 0); + QCOMPARE(modelSpy.count(), 0); + + instantiator->setActive(true); + QCOMPARE(instantiator->isActive(), true); + QCOMPARE(instantiator->count(), 1); + + QCOMPARE(activeSpy.count(), 1); + QCOMPARE(countSpy.count(), 1); + QCOMPARE(objectSpy.count(), 1); + QCOMPARE(modelSpy.count(), 0); + + QObject *object = instantiator->object(); + QVERIFY(object); + QCOMPARE(object->parent(), instantiator); + QCOMPARE(object->property("success").toBool(), true); + QCOMPARE(object->property("idx").toInt(), 0); +} + +void tst_quick3dnodeinstantiator::intModelChange() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createMultiple.qml")); + Quick3DNodeInstantiator *instantiator = qobject_cast<Quick3DNodeInstantiator*>(component.create()); + QVERIFY(instantiator != 0); + QSignalSpy activeSpy(instantiator, SIGNAL(activeChanged())); + QSignalSpy countSpy(instantiator, SIGNAL(countChanged())); + QSignalSpy objectSpy(instantiator, SIGNAL(objectChanged())); + QSignalSpy modelSpy(instantiator, SIGNAL(modelChanged())); + QCOMPARE(instantiator->count(), 10); + + QCOMPARE(activeSpy.count(), 0); + QCOMPARE(countSpy.count(), 0); + QCOMPARE(objectSpy.count(), 0); + QCOMPARE(modelSpy.count(), 0); + + instantiator->setModel(QVariant(2)); + QCOMPARE(instantiator->count(), 2); + + QCOMPARE(activeSpy.count(), 0); + QCOMPARE(countSpy.count(), 1); + QCOMPARE(objectSpy.count(), 2); + QCOMPARE(modelSpy.count(), 1); + + for (int i = 0; i < 2; i++) { + QObject *object = instantiator->objectAt(i); + QVERIFY(object); + QCOMPARE(object->parent(), instantiator); + QCOMPARE(object->property("success").toBool(), true); + QCOMPARE(object->property("idx").toInt(), i); + } +} + +void tst_quick3dnodeinstantiator::createAndRemove() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createAndRemove.qml")); + StringModel *model = new StringModel("model1"); + engine.rootContext()->setContextProperty("model1", model); + QObject *rootObject = component.create(); + QVERIFY(rootObject != 0); + + Quick3DNodeInstantiator *instantiator = + qobject_cast<Quick3DNodeInstantiator*>(rootObject->findChild<QObject*>("instantiator1")); + QVERIFY(instantiator != 0); + model->drop(1); + QVector<QString> names; + names << "Beta" << "Gamma" << "Delta"; + for (int i = 0; i < 3; i++) { + QObject *object = instantiator->objectAt(i); + QVERIFY(object); + QCOMPARE(object->property("datum").toString(), names[i]); + } +} +QTEST_MAIN(tst_quick3dnodeinstantiator) + +#include "tst_quick3dnodeinstantiator.moc" |