diff --git a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp index 7d7fa0dec0..93d74ea88c 100644 --- a/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp +++ b/src/plugins/qmltooling/qmldbg_preview/qqmlpreviewhandler.cpp @@ -119,6 +119,7 @@ void QQmlPreviewHandler::loadUrl(const QUrl &url) m_lastPosition.loadWindowPositionSettings(url); QQmlEngine *engine = m_engines.front(); + engine->clearSingletons(); engine->clearComponentCache(); m_component.reset(new QQmlComponent(engine, url, this)); diff --git a/tests/auto/qml/debugger/qqmlpreview/data/M/S.qml b/tests/auto/qml/debugger/qqmlpreview/data/M/S.qml new file mode 100644 index 0000000000..095986f565 --- /dev/null +++ b/tests/auto/qml/debugger/qqmlpreview/data/M/S.qml @@ -0,0 +1,6 @@ +pragma Singleton +import QtQml + +QtObject { + property int col: 0 +} diff --git a/tests/auto/qml/debugger/qqmlpreview/data/M/qmldir b/tests/auto/qml/debugger/qqmlpreview/data/M/qmldir new file mode 100644 index 0000000000..621664fb8d --- /dev/null +++ b/tests/auto/qml/debugger/qqmlpreview/data/M/qmldir @@ -0,0 +1,2 @@ +module M +singleton S 1.0 S.qml diff --git a/tests/auto/qml/debugger/qqmlpreview/data/singletonUser.qml b/tests/auto/qml/debugger/qqmlpreview/data/singletonUser.qml new file mode 100644 index 0000000000..b04299473b --- /dev/null +++ b/tests/auto/qml/debugger/qqmlpreview/data/singletonUser.qml @@ -0,0 +1,7 @@ +import QtQuick +import M + +Window { + objectName: S.col + Component.onCompleted: console.log("col", objectName) +} diff --git a/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp b/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp index fb47d69d20..201d57663a 100644 --- a/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp +++ b/tests/auto/qml/debugger/qqmlpreview/tst_qqmlpreview.cpp @@ -54,6 +54,7 @@ private slots: void unhandledFiles(); void updateFile(); void qqcStyleSelection(); + void singleton(); }; tst_QQmlPreview::tst_QQmlPreview() @@ -443,6 +444,30 @@ void tst_QQmlPreview::qqcStyleSelection() QVERIFY(m_serviceErrors.isEmpty()); } +void tst_QQmlPreview::singleton() +{ + const QString file("singletonUser.qml"); + QCOMPARE(startQmlProcess(file, {"QML_IMPORT_PATH=" + dataDirectory()}), ConnectSuccess); + QVERIFY(m_client); + QTRY_COMPARE(m_client->state(), QQmlDebugClient::Enabled); + m_client->triggerLoad(testFileUrl(file)); + QTRY_VERIFY(m_files.contains(testFile(file))); + verifyProcessOutputContains("col 0"); + + QFile input(testFile("M/S.qml")); + QVERIFY(input.open(QIODevice::ReadOnly)); + QByteArray contents = input.readAll(); + contents.replace("0", "5"); + + serveFile(testFile("M/S.qml"), contents); + m_client->triggerLoad(testFileUrl(file)); + verifyProcessOutputContains("col 5"); + + m_process->stop(); + QTRY_COMPARE(m_client->state(), QQmlDebugClient::NotConnected); + QVERIFY(m_serviceErrors.isEmpty()); +} + QTEST_MAIN(tst_QQmlPreview) #include "tst_qqmlpreview.moc"