diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2012-04-03 13:13:49 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-13 11:09:14 +0200 |
commit | f19e6d72ac4fd2a606c9208dc61d6ce1520e1f18 (patch) | |
tree | e0df7b0bcd67cd5420ddc3c98916e56f6158395f /tests/auto | |
parent | a2b388203922ca18e3e7a3171cf8d7f51b195483 (diff) |
Extra tests for ShaderEffect and CustomParticle
Change-Id: Ieafa97f1f11337c8beac89a05fc5b5706ba6c215
Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
Diffstat (limited to 'tests/auto')
7 files changed, 285 insertions, 1 deletions
diff --git a/tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml b/tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml new file mode 100644 index 0000000000..a68373e7e4 --- /dev/null +++ b/tests/auto/particles/qquickcustomparticle/data/deleteSourceItem.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +Rectangle { + color: "black" + width: 320 + height: 320 + + ParticleSystem { + id: sys + objectName: "system" + anchors.fill: parent + + CustomParticle { + id: cp + property variant source + } + + Emitter{ + //0,0 position + size: 32 + emitRate: 1000 + lifeSpan: 500 + } + } + + ShaderEffectSource { + id: doomedses + hideSource: true + sourceItem: Image { + id: doomed + source: "../../shared/star.png" + } + } + + function setDeletedSourceItem() { + doomed.destroy(); + cp.source = doomedses; + } +} diff --git a/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp b/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp index a54e10afc6..a81edca35e 100644 --- a/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp +++ b/tests/auto/particles/qquickcustomparticle/tst_qquickcustomparticle.cpp @@ -55,6 +55,7 @@ public: private slots: void initTestCase(); void test_basic(); + void test_deleteSourceItem(); }; void tst_qquickcustomparticle::initTestCase() @@ -94,6 +95,20 @@ void tst_qquickcustomparticle::test_basic() QVERIFY(oneNonZero);//Zero is a valid value, but it also needs to be set to a random number } +void tst_qquickcustomparticle::test_deleteSourceItem() +{ + // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash + QQuickView* view = createView(testFileUrl("deleteSourceItem.qml"), 600); + QVERIFY(view); + QObject *obj = view->rootObject(); + QVERIFY(obj); + QQuickParticleSystem* system = view->rootObject()->findChild<QQuickParticleSystem*>("system"); + ensureAnimTime(200, system->m_animation); + QMetaObject::invokeMethod(obj, "setDeletedSourceItem"); + ensureAnimTime(200, system->m_animation); + delete view; +} + QTEST_MAIN(tst_qquickcustomparticle); #include "tst_qquickcustomparticle.moc" diff --git a/tests/auto/quick/qquickshadereffect/data/deleteShaderEffectSource.qml b/tests/auto/quick/qquickshadereffect/data/deleteShaderEffectSource.qml new file mode 100644 index 0000000000..4e0eb4eb17 --- /dev/null +++ b/tests/auto/quick/qquickshadereffect/data/deleteShaderEffectSource.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +Rectangle { + color: "black" + width: 320 + height: 320 + + ShaderEffect { + id: sei + property variant source + } + + ShaderEffectSource { + id: doomed + hideSource: true + sourceItem: Image { + source: "star.png" + } + } + + function setDeletedShaderEffectSource() { + sei.source = doomed; + doomed.destroy(); + // now set a fragment shader to trigger source texture detection. + sei.fragmentShader = "varying highp vec2 qt_TexCoord0;\ + uniform sampler2D source;\ + uniform lowp float qt_Opacity;\ + void main() {\ + gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;\ + }"; + } +} diff --git a/tests/auto/quick/qquickshadereffect/data/deleteSourceItem.qml b/tests/auto/quick/qquickshadereffect/data/deleteSourceItem.qml new file mode 100644 index 0000000000..ecf4cbd4bb --- /dev/null +++ b/tests/auto/quick/qquickshadereffect/data/deleteSourceItem.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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, Nokia gives you certain additional +** rights. These rights are described in the Nokia 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. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Particles 2.0 + +Rectangle { + color: "black" + width: 320 + height: 320 + + ShaderEffect { + id: sei + property variant source + } + + ShaderEffectSource { + id: doomedses + hideSource: true + sourceItem: Image { + id: doomed + source: "star.png" + } + } + + function setDeletedSourceItem() { + doomed.destroy(); + sei.source = doomedses; + // now set a fragment shader to trigger source texture detection. + sei.fragmentShader = "varying highp vec2 qt_TexCoord0;\ + uniform sampler2D source;\ + uniform lowp float qt_Opacity;\ + void main() {\ + gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;\ + }"; + } +} diff --git a/tests/auto/quick/qquickshadereffect/data/star.png b/tests/auto/quick/qquickshadereffect/data/star.png Binary files differnew file mode 100644 index 0000000000..0d592cfa87 --- /dev/null +++ b/tests/auto/quick/qquickshadereffect/data/star.png diff --git a/tests/auto/quick/qquickshadereffect/qquickshadereffect.pro b/tests/auto/quick/qquickshadereffect/qquickshadereffect.pro index 142d368aed..10aa3daecb 100644 --- a/tests/auto/quick/qquickshadereffect/qquickshadereffect.pro +++ b/tests/auto/quick/qquickshadereffect/qquickshadereffect.pro @@ -2,6 +2,7 @@ CONFIG += testcase TARGET = tst_qquickshadereffect SOURCES += tst_qquickshadereffect.cpp +include (../../shared/util.pri) macx:CONFIG -= app_bundle CONFIG += parallel_test diff --git a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp index 1edf511ebf..2816fe62ea 100644 --- a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp +++ b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp @@ -45,6 +45,10 @@ #include <QByteArray> #include <private/qquickshadereffect_p.h> +#include <QtQuick/QQuickView> +#include "../../shared/util.h" + + class TestShaderEffect : public QQuickShaderEffect { Q_OBJECT @@ -68,7 +72,7 @@ private: QList<QByteArray> m_signals; }; -class tst_qquickshadereffect : public QObject +class tst_qquickshadereffect : public QQmlDataTest { Q_OBJECT public: @@ -81,6 +85,9 @@ private slots: void lookThroughShaderCode_data(); void lookThroughShaderCode(); + void deleteSourceItem(); + void deleteShaderEffectSource(); + private: enum PresenceFlags { VertexPresent = 0x01, @@ -97,6 +104,7 @@ tst_qquickshadereffect::tst_qquickshadereffect() void tst_qquickshadereffect::initTestCase() { + QQmlDataTest::initTestCase(); } void tst_qquickshadereffect::cleanupTestCase() @@ -269,6 +277,36 @@ void tst_qquickshadereffect::lookThroughShaderCode() QCOMPARE(item.isConnected(SIGNAL(dummyChanged())), (presenceFlags & PropertyPresent) != 0); } +void tst_qquickshadereffect::deleteSourceItem() +{ + // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash + QQuickView *view = new QQuickView(0); + view->setSource(QUrl::fromLocalFile(testFile("deleteSourceItem.qml"))); + view->show(); + QTest::qWaitForWindowShown(view); + QVERIFY(view); + QObject *obj = view->rootObject(); + QVERIFY(obj); + QMetaObject::invokeMethod(obj, "setDeletedSourceItem"); + QTest::qWait(50); + delete view; +} + +void tst_qquickshadereffect::deleteShaderEffectSource() +{ + // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash + QQuickView *view = new QQuickView(0); + view->setSource(QUrl::fromLocalFile(testFile("deleteShaderEffectSource.qml"))); + view->show(); + QTest::qWaitForWindowShown(view); + QVERIFY(view); + QObject *obj = view->rootObject(); + QVERIFY(obj); + QMetaObject::invokeMethod(obj, "setDeletedShaderEffectSource"); + QTest::qWait(50); + delete view; +} + QTEST_MAIN(tst_qquickshadereffect) #include "tst_qquickshadereffect.moc" |