File indexing completed on 2024-05-05 16:07:08
0001 /* 0002 This file is part of the test suite of the Qt Toolkit. 0003 SPDX-FileCopyrightText: 2014 Digia Plc and/or its subsidiary(-ies) <http://www.qt-project.org/legal> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LGPL-3.0-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial 0006 */ 0007 0008 #include "util.h" 0009 #include <QDebug> 0010 #include <QQmlComponent> 0011 #include <QQmlContext> 0012 #include <QQmlEngine> 0013 #include <QQuickItem> 0014 #include <QQuickView> 0015 #include <QSignalSpy> 0016 #include <QTest> 0017 #include <QWindow> 0018 #include <quickviewsharedengine.h> 0019 0020 class QuickViewSharedEngineTest : public QQmlDataTest 0021 { 0022 Q_OBJECT 0023 public: 0024 QuickViewSharedEngineTest(); 0025 0026 private Q_SLOTS: 0027 void resizemodeitem(); 0028 void errors(); 0029 void engine(); 0030 }; 0031 0032 QuickViewSharedEngineTest::QuickViewSharedEngineTest() 0033 { 0034 } 0035 0036 void QuickViewSharedEngineTest::resizemodeitem() 0037 { 0038 QWindow window; 0039 window.setGeometry(0, 0, 400, 400); 0040 0041 KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine(&window); 0042 QVERIFY(view); 0043 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); 0044 QCOMPARE(QSize(0, 0), view->initialSize()); 0045 view->setSource(testFileUrl("resizemodeitem.qml")); 0046 QQuickItem *item = qobject_cast<QQuickItem *>(view->rootObject()); 0047 QVERIFY(item); 0048 window.show(); 0049 0050 view->showNormal(); 0051 0052 // initial size from root object 0053 QCOMPARE(item->width(), 200.0); 0054 QCOMPARE(item->height(), 200.0); 0055 QCOMPARE(view->size(), QSize(200, 200)); 0056 QCOMPARE(view->size(), view->sizeHint()); 0057 QCOMPARE(view->size(), view->initialSize()); 0058 0059 // size update from view 0060 view->resize(QSize(80, 100)); 0061 0062 QTRY_COMPARE(item->width(), 80.0); 0063 QCOMPARE(item->height(), 100.0); 0064 QCOMPARE(view->size(), QSize(80, 100)); 0065 QCOMPARE(view->size(), view->sizeHint()); 0066 0067 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeViewToRootObject); 0068 0069 // size update from view disabled 0070 view->resize(QSize(60, 80)); 0071 QCOMPARE(item->width(), 80.0); 0072 QCOMPARE(item->height(), 100.0); 0073 QTest::qWait(50); 0074 QCOMPARE(view->size(), QSize(60, 80)); 0075 0076 // size update from root object 0077 item->setWidth(250); 0078 item->setHeight(350); 0079 QCOMPARE(item->width(), 250.0); 0080 QCOMPARE(item->height(), 350.0); 0081 QTRY_COMPARE(view->size(), QSize(250, 350)); 0082 QCOMPARE(view->size(), QSize(250, 350)); 0083 QCOMPARE(view->size(), view->sizeHint()); 0084 0085 // reset window 0086 window.hide(); 0087 delete view; 0088 view = new KQuickAddons::QuickViewSharedEngine(&window); 0089 QVERIFY(view); 0090 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeViewToRootObject); 0091 view->setSource(testFileUrl("resizemodeitem.qml")); 0092 item = qobject_cast<QQuickItem *>(view->rootObject()); 0093 QVERIFY(item); 0094 window.show(); 0095 0096 view->showNormal(); 0097 0098 // initial size for root object 0099 QCOMPARE(item->width(), 200.0); 0100 QCOMPARE(item->height(), 200.0); 0101 QCOMPARE(view->size(), view->sizeHint()); 0102 QCOMPARE(view->size(), view->initialSize()); 0103 0104 // size update from root object 0105 item->setWidth(80); 0106 item->setHeight(100); 0107 QCOMPARE(item->width(), 80.0); 0108 QCOMPARE(item->height(), 100.0); 0109 QTRY_COMPARE(view->size(), QSize(80, 100)); 0110 QCOMPARE(view->size(), QSize(80, 100)); 0111 QCOMPARE(view->size(), view->sizeHint()); 0112 0113 // size update from root object disabled 0114 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); 0115 item->setWidth(60); 0116 item->setHeight(80); 0117 QCOMPARE(view->width(), 80); 0118 QCOMPARE(view->height(), 100); 0119 QCOMPARE(QSize(item->width(), item->height()), view->sizeHint()); 0120 0121 // size update from view 0122 view->resize(QSize(200, 300)); 0123 QTRY_COMPARE(item->width(), 200.0); 0124 QCOMPARE(item->height(), 300.0); 0125 QCOMPARE(view->size(), QSize(200, 300)); 0126 QCOMPARE(view->size(), view->sizeHint()); 0127 0128 delete view; 0129 0130 // if we set a specific size for the view then it should keep that size 0131 // for SizeRootObjectToView mode. 0132 view = new KQuickAddons::QuickViewSharedEngine(&window); 0133 view->resize(300, 300); 0134 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); 0135 QCOMPARE(QSize(0, 0), view->initialSize()); 0136 view->setSource(testFileUrl("resizemodeitem.qml")); 0137 qWarning() << "bbb" << view->size(); 0138 view->resize(300, 300); 0139 qWarning() << "ccc" << view->size(); 0140 item = qobject_cast<QQuickItem *>(view->rootObject()); 0141 QVERIFY(item); 0142 0143 view->showNormal(); 0144 QTest::qWait(50); 0145 0146 // initial size from root object 0147 QCOMPARE(item->width(), 300.0); 0148 QCOMPARE(item->height(), 300.0); 0149 QCOMPARE(view->size(), QSize(300, 300)); 0150 QCOMPARE(view->size(), view->sizeHint()); 0151 QCOMPARE(view->initialSize(), QSize(200, 200)); // initial object size 0152 0153 delete view; 0154 } 0155 0156 void QuickViewSharedEngineTest::errors() 0157 { 0158 KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine; 0159 QVERIFY(view); 0160 QQmlTestMessageHandler messageHandler; 0161 view->setSource(testFileUrl("error1.qml")); 0162 QCOMPARE(view->status(), QQmlComponent::Error); 0163 QCOMPARE(view->errors().count(), 1); 0164 delete view; 0165 } 0166 0167 void QuickViewSharedEngineTest::engine() 0168 { 0169 // test if engines are actually shared 0170 // test if the engine gets deleted when the last view dies 0171 KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine(); 0172 QQmlEngine *engine = view->engine(); 0173 0174 KQuickAddons::QuickViewSharedEngine *view2 = new KQuickAddons::QuickViewSharedEngine(); 0175 QQmlEngine *engine2 = view2->engine(); 0176 0177 QCOMPARE(engine, engine2); 0178 QSignalSpy engineDestroyedSpy(engine, &QObject::destroyed); 0179 0180 delete view; 0181 delete view2; 0182 0183 QCOMPARE(engineDestroyedSpy.count(), 1); 0184 } 0185 0186 QTEST_MAIN(QuickViewSharedEngineTest) 0187 0188 #include "quickviewsharedengine.moc"