diff options
author | Alan Alpert <aalpert@rim.com> | 2012-12-23 22:57:10 -0800 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-20 10:32:55 +0100 |
commit | 969dc839c3b0028e821d15015f99bd70d76fbc03 (patch) | |
tree | 31169cef3a2f39e46ea5982856c559c3be37b3f6 /tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp | |
parent | f513e88403b66c4a5efe4c62c160dfce151efb33 (diff) |
Add Instantiator type to QtQml
Provides a dynamic instantiation type which is not tied to visual items.
Change-Id: I42f7332b29b752dcc94979b6e0ec191fc76b96ef
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp')
-rw-r--r-- | tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp b/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp new file mode 100644 index 0000000000..3e90eb2cbe --- /dev/null +++ b/tests/auto/qml/qqmlinstantiator/tst_qqmlinstantiator.cpp @@ -0,0 +1,198 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Research In Motion. +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite 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 <qtest.h> +#include <QSignalSpy> +#include <QDebug> + +#include <QtQml/qqmlengine.h> +#include <QtQml/qqmlcomponent.h> +#include <QtQml/private/qqmlinstantiator_p.h> +#include "../../shared/util.h" + +class tst_qqmlinstantiator: public QQmlDataTest +{ + Q_OBJECT + +private slots: + void createNone(); + void createSingle(); + void createMultiple(); + void stringModel(); + void activeProperty(); + void intModelChange(); +}; + +void tst_qqmlinstantiator::createNone() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createNone.qml")); + QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(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_qqmlinstantiator::createSingle() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createSingle.qml")); + QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(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_qqmlinstantiator::createMultiple() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createMultiple.qml")); + QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(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_qqmlinstantiator::stringModel() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("stringModel.qml")); + QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(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_qqmlinstantiator::activeProperty() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("inactive.qml")); + QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(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_qqmlinstantiator::intModelChange() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("createMultiple.qml")); + QQmlInstantiator *instantiator = qobject_cast<QQmlInstantiator*>(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); + } +} + +QTEST_MAIN(tst_qqmlinstantiator) + +#include "tst_qqmlinstantiator.moc" |