aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickview
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquickview')
-rw-r--r--tests/auto/quick/qquickview/CMakeLists.txt16
-rw-r--r--tests/auto/quick/qquickview/data/TestQml.qml3
-rw-r--r--tests/auto/quick/qquickview/data/overlay.qml17
-rw-r--r--tests/auto/quick/qquickview/tst_qquickview.cpp85
4 files changed, 120 insertions, 1 deletions
diff --git a/tests/auto/quick/qquickview/CMakeLists.txt b/tests/auto/quick/qquickview/CMakeLists.txt
index d5d248481a..658d957de5 100644
--- a/tests/auto/quick/qquickview/CMakeLists.txt
+++ b/tests/auto/quick/qquickview/CMakeLists.txt
@@ -7,6 +7,14 @@
## tst_qquickview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qquickview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_policy(SET QTP0001 NEW)
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -26,6 +34,14 @@ qt_internal_add_test(tst_qquickview
TESTDATA ${test_data}
)
+
+qt_add_qml_module(
+ tst_qquickview
+ URI test
+ QML_FILES
+ "data/TestQml.qml"
+)
+
## Scopes:
#####################################################################
diff --git a/tests/auto/quick/qquickview/data/TestQml.qml b/tests/auto/quick/qquickview/data/TestQml.qml
new file mode 100644
index 0000000000..3052615aef
--- /dev/null
+++ b/tests/auto/quick/qquickview/data/TestQml.qml
@@ -0,0 +1,3 @@
+import QtQuick
+
+Item {}
diff --git a/tests/auto/quick/qquickview/data/overlay.qml b/tests/auto/quick/qquickview/data/overlay.qml
new file mode 100644
index 0000000000..cefaaed8bd
--- /dev/null
+++ b/tests/auto/quick/qquickview/data/overlay.qml
@@ -0,0 +1,17 @@
+// RootItem.qml
+import QtQuick
+import QtQuick.Controls.Basic
+
+Item {
+ id: root
+ width: 640
+ height: 480
+
+ property double scaleFactor: 2.0
+ Scale {
+ id: scale
+ xScale: root.scaleFactor
+ yScale: root.scaleFactor
+ }
+ Overlay.overlay.transform: scale
+}
diff --git a/tests/auto/quick/qquickview/tst_qquickview.cpp b/tests/auto/quick/qquickview/tst_qquickview.cpp
index e226cfdca7..91a45077fb 100644
--- a/tests/auto/quick/qquickview/tst_qquickview.cpp
+++ b/tests/auto/quick/qquickview/tst_qquickview.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qtest.h>
#include <QtTest/QSignalSpy>
#include <QtQml/qqmlcomponent.h>
@@ -10,9 +10,13 @@
#include <QtGui/QWindow>
#include <QtCore/QDebug>
#include <QtQml/qqmlengine.h>
+#include <private/qv4engine_p.h>
+#include <private/qv4mm_p.h>
#include <QtQuickTestUtils/private/geometrytestutils_p.h>
+using namespace Qt::StringLiterals;
+
class tst_QQuickView : public QQmlDataTest
{
Q_OBJECT
@@ -20,11 +24,16 @@ public:
tst_QQuickView();
private slots:
+ void gc();
void resizemodeitem();
void errors();
void engine();
void findChild();
void setInitialProperties();
+ void fromModuleCtor();
+ void loadFromModule_data();
+ void loadFromModule();
+ void overlay();
};
@@ -33,6 +42,36 @@ tst_QQuickView::tst_QQuickView()
{
}
+void tst_QQuickView::gc()
+{
+ QQuickView view;
+ QQmlEngine *engine = view.engine();
+ QV4::ExecutionEngine *v4 = engine->handle();
+
+ v4->memoryManager->gcStateMachine->deadline = QDeadlineTimer(QDeadlineTimer::Forever);
+ auto sm = v4->memoryManager->gcStateMachine.get();
+ sm->reset();
+ while (sm->state != QV4::GCState::CallDestroyObjects) {
+ QV4::GCStateInfo& stateInfo = sm->stateInfoMap[int(sm->state)];
+ sm->state = stateInfo.execute(sm, sm->stateData);
+ }
+ view.loadFromModule("test", "TestQml");
+ auto root = view.rootObject();
+ QVERIFY(root);
+ auto ddata = QQmlData::get(root, false);
+ while (sm->state != QV4::GCState::DoSweep) {
+ if (sm->state > QV4::GCState::InitCallDestroyObjects) {
+ sm->mm->collectFromJSStack(sm->mm->markStack());
+ sm->mm->m_markStack->drain();
+ }
+ QV4::GCStateInfo& stateInfo = sm->stateInfoMap[int(sm->state)];
+ sm->state = stateInfo.execute(sm, sm->stateData);
+ }
+ QVERIFY(ddata);
+ QVERIFY(ddata->jsWrapper.asManaged());
+ QVERIFY(ddata->jsWrapper.asManaged()->markBit());
+}
+
void tst_QQuickView::resizemodeitem()
{
QWindow window;
@@ -270,6 +309,50 @@ void tst_QQuickView::setInitialProperties()
QCOMPARE(rootObject->property("width").toInt(), 100);
}
+void tst_QQuickView::fromModuleCtor()
+{
+ QQuickView view("QtQuick", "Rectangle");
+ // creation is always synchronous for C++ defined types, so we don't need _TRY
+ QObject *rootObject = view.rootObject();
+ QVERIFY(rootObject);
+ QCOMPARE(rootObject->metaObject()->className(), "QQuickRectangle");
+}
+
+void tst_QQuickView::loadFromModule_data()
+{
+ QTest::addColumn<QString>("module");
+ QTest::addColumn<QString>("typeName");
+ QTest::addColumn<QUrl>("url");
+ QTest::addColumn<QQuickView::Status>("status");
+
+ QTest::addRow("Item") << u"QtQuick"_s << u"Item"_s << QUrl() << QQuickView::Ready;
+ QTest::addRow("composite") << u"test"_s << u"TestQml"_s << QUrl("qrc:/qt/qml/test/data/TestQml.qml") << QQuickView::Ready;
+ QTest::addRow("nonexistent") << u"missing"_s << u"Type"_s << QUrl() << QQuickView::Error;
+}
+
+void tst_QQuickView::loadFromModule()
+{
+ QFETCH(QString, module);
+ QFETCH(QString, typeName);
+ QFETCH(QUrl, url);
+ QFETCH(QQuickView::Status, status);
+
+ QQuickView view;
+ view.loadFromModule(module, typeName);
+ QTRY_COMPARE(view.status(), status);
+ QCOMPARE(view.source(), url);
+}
+
+void tst_QQuickView::overlay()
+{
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(".*: Cannot set properties on overlay as it is null"));
+ QQuickView view;
+ view.setSource(testFileUrl("overlay.qml"));
+ QObject *rootObject = view.rootObject();
+ QVERIFY(!rootObject);
+}
+
QTEST_MAIN(tst_QQuickView)
#include "tst_qquickview.moc"