diff options
Diffstat (limited to 'tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp')
-rw-r--r-- | tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp | 71 |
1 files changed, 31 insertions, 40 deletions
diff --git a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp index 176001b599..a9027f86bb 100644 --- a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp +++ b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp @@ -32,9 +32,11 @@ #include <QByteArray> #include <private/qquickshadereffect_p.h> #include <QMatrix4x4> -#include <QtQuick/QQuickView> #include <QtQml/QQmlEngine> +#include <QtQuick/QQuickView> +#include <QtQuick/private/qquickshadereffectsource_p.h> #include <QtQuickTestUtils/private/qmlutils_p.h> +#include <QtQuickTestUtils/private/viewtestutils_p.h> class TestShaderEffect : public QQuickShaderEffect { @@ -119,17 +121,17 @@ void tst_qquickshadereffect::cleanupTestCase() void tst_qquickshadereffect::testConnection() { // verify that the property notify signal is connected - QQuickView *view = new QQuickView(nullptr); - view->setSource(QUrl(QStringLiteral("qrc:/data/connections.qml"))); + QQuickView view; + QVERIFY(QQuickTest::initView(view, QStringLiteral("qrc:/data/connections.qml"))); - auto *shaderEffectItem = qobject_cast<TestShaderEffect*>(view->rootObject()); + auto *shaderEffectItem = qobject_cast<TestShaderEffect*>(view.rootObject()); QVERIFY(shaderEffectItem); QCOMPARE(shaderEffectItem->signalsConnected, 0); - view->show(); - QVERIFY(QTest::qWaitForWindowExposed(view)); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); - QSGRendererInterface *rif = view->rendererInterface(); + QSGRendererInterface *rif = view.rendererInterface(); if (rif && rif->graphicsApi() != QSGRendererInterface::Software) QCOMPARE(shaderEffectItem->signalsConnected, 1); } @@ -137,66 +139,55 @@ void tst_qquickshadereffect::testConnection() void tst_qquickshadereffect::deleteSourceItem() { // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash - QQuickView *view = new QQuickView(nullptr); - view->setSource(QUrl(QStringLiteral("qrc:/data/deleteSourceItem.qml"))); - view->show(); - QVERIFY(QTest::qWaitForWindowExposed(view)); - QVERIFY(view); - QObject *obj = view->rootObject(); + QQuickView view; + QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/deleteSourceItem.qml"))); + QObject *obj = view.rootObject(); QVERIFY(obj); QMetaObject::invokeMethod(obj, "setDeletedSourceItem"); - QTest::qWait(50); - delete view; + const auto shaderEffectSource = obj->findChild<QQuickShaderEffectSource*>(); + QVERIFY(shaderEffectSource); + QTRY_VERIFY(!shaderEffectSource->sourceItem()); } void tst_qquickshadereffect::deleteShaderEffectSource() { - // purely to ensure that deleting the sourceItem of a shader doesn't cause a crash - QQuickView *view = new QQuickView(nullptr); - view->setSource(QUrl(QStringLiteral("qrc:/data/deleteShaderEffectSource.qml"))); - view->show(); - QVERIFY(QTest::qWaitForWindowExposed(view)); - QVERIFY(view); - QObject *obj = view->rootObject(); + // purely to ensure that deleting the ShaderEffectSource doesn't cause a crash + QQuickView view; + QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/deleteShaderEffectSource.qml"))); + QObject *obj = view.rootObject(); QVERIFY(obj); + const QPointer<QQuickShaderEffectSource> shaderEffectSource = obj->findChild<QQuickShaderEffectSource*>(); + QVERIFY(shaderEffectSource); QMetaObject::invokeMethod(obj, "setDeletedShaderEffectSource"); - QTest::qWait(50); - delete view; + QTRY_VERIFY(shaderEffectSource); } void tst_qquickshadereffect::twoImagesOneShaderEffect() { // Don't crash when having a ShaderEffect and an Image sharing the texture via supportsAtlasTextures - QQuickView *view = new QQuickView(nullptr); - view->setSource(QUrl(QStringLiteral("qrc:/data/twoImagesOneShaderEffect.qml"))); - view->show(); - QVERIFY(QTest::qWaitForWindowExposed(view)); - QVERIFY(view); - QObject *obj = view->rootObject(); + QQuickView view; + QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/twoImagesOneShaderEffect.qml"))); + QObject *obj = view.rootObject(); QVERIFY(obj); - delete view; } void tst_qquickshadereffect::withoutQmlEngine() { // using a shader without QML engine used to crash - auto window = new QQuickWindow; - auto shaderEffect = new TestShaderEffect(window->contentItem()); + const QQuickWindow window; + auto shaderEffect = new TestShaderEffect(window.contentItem()); shaderEffect->setVertexShader(QUrl()); QVERIFY(shaderEffect->isComponentComplete()); - delete window; } // QTBUG-86402: hiding the parent of an item that uses an effect should not cause a crash. void tst_qquickshadereffect::hideParent() { - QScopedPointer<QQuickView> view(new QQuickView); - view->setSource(QUrl(QStringLiteral("qrc:/data/hideParent.qml"))); - QCOMPARE(view->status(), QQuickView::Ready); - view->show(); - QVERIFY(QTest::qWaitForWindowExposed(view.data())); + QQuickView view; + view.setSource(QUrl(QStringLiteral("qrc:/data/hideParent.qml"))); + QVERIFY(QQuickTest::showView(view, QStringLiteral("qrc:/data/hideParent.qml"))); // Should finish without crashing. - QTRY_VERIFY(view->rootObject()->property("finished").toBool()); + QTRY_VERIFY(view.rootObject()->property("finished").toBool()); } QTEST_MAIN(tst_qquickshadereffect) |