File indexing completed on 2024-05-12 05:46:52
0001 /**************************************************************************** 0002 ** 0003 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). 0004 ** Contact: http://www.qt-project.org/legal 0005 ** 0006 ** This file is part of the test suite of the Qt Toolkit. 0007 ** 0008 ** $QT_BEGIN_LICENSE:LGPL21$ 0009 ** Commercial License Usage 0010 ** Licensees holding valid commercial Qt licenses may use this file in 0011 ** accordance with the commercial license agreement provided with the 0012 ** Software or, alternatively, in accordance with the terms contained in 0013 ** a written agreement between you and Digia. For licensing terms and 0014 ** conditions see http://qt.digia.com/licensing. For further information 0015 ** use the contact form at http://qt.digia.com/contact-us. 0016 ** 0017 ** GNU Lesser General Public License Usage 0018 ** Alternatively, this file may be used under the terms of the GNU Lesser 0019 ** General Public License version 2.1 or version 3 as published by the Free 0020 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and 0021 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the 0022 ** following information to ensure the GNU Lesser General Public License 0023 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 0024 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 0025 ** 0026 ** In addition, as a special exception, Digia gives you certain additional 0027 ** rights. These rights are described in the Digia Qt LGPL Exception 0028 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 0029 ** 0030 ** $QT_END_LICENSE$ 0031 ** 0032 ****************************************************************************/ 0033 #include <quickviewsharedengine.h> 0034 #include <qtest.h> 0035 #include <qqmlcomponent.h> 0036 #include <qqmlcontext.h> 0037 #include <qquickview.h> 0038 #include <qquickitem.h> 0039 #include "util.h" 0040 #include <QWindow> 0041 #include <QDebug> 0042 #include <qqmlengine.h> 0043 0044 class QuickViewSharedEngineTest : public QQmlDataTest 0045 { 0046 Q_OBJECT 0047 public: 0048 QuickViewSharedEngineTest(); 0049 0050 private Q_SLOTS: 0051 void resizemodeitem(); 0052 void errors(); 0053 void engine(); 0054 }; 0055 0056 0057 QuickViewSharedEngineTest::QuickViewSharedEngineTest() 0058 { 0059 } 0060 0061 void QuickViewSharedEngineTest::resizemodeitem() 0062 { 0063 QWindow window; 0064 window.setGeometry(0, 0, 400, 400); 0065 0066 KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine(&window); 0067 QVERIFY(view); 0068 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); 0069 QCOMPARE(QSize(0,0), view->initialSize()); 0070 view->setSource(testFileUrl("resizemodeitem.qml")); 0071 QQuickItem* item = qobject_cast<QQuickItem*>(view->rootObject()); 0072 QVERIFY(item); 0073 window.show(); 0074 0075 view->showNormal(); 0076 0077 // initial size from root object 0078 QCOMPARE(item->width(), 200.0); 0079 QCOMPARE(item->height(), 200.0); 0080 QCOMPARE(view->size(), QSize(200, 200)); 0081 QCOMPARE(view->size(), view->sizeHint()); 0082 QCOMPARE(view->size(), view->initialSize()); 0083 0084 // size update from view 0085 view->resize(QSize(80,100)); 0086 0087 QTRY_COMPARE(item->width(), 80.0); 0088 QCOMPARE(item->height(), 100.0); 0089 QCOMPARE(view->size(), QSize(80, 100)); 0090 QCOMPARE(view->size(), view->sizeHint()); 0091 0092 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeViewToRootObject); 0093 0094 // size update from view disabled 0095 view->resize(QSize(60,80)); 0096 QCOMPARE(item->width(), 80.0); 0097 QCOMPARE(item->height(), 100.0); 0098 QTest::qWait(50); 0099 QCOMPARE(view->size(), QSize(60, 80)); 0100 0101 // size update from root object 0102 item->setWidth(250); 0103 item->setHeight(350); 0104 QCOMPARE(item->width(), 250.0); 0105 QCOMPARE(item->height(), 350.0); 0106 QTRY_COMPARE(view->size(), QSize(250, 350)); 0107 QCOMPARE(view->size(), QSize(250, 350)); 0108 QCOMPARE(view->size(), view->sizeHint()); 0109 0110 // reset window 0111 window.hide(); 0112 delete view; 0113 view = new KQuickAddons::QuickViewSharedEngine(&window); 0114 QVERIFY(view); 0115 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeViewToRootObject); 0116 view->setSource(testFileUrl("resizemodeitem.qml")); 0117 item = qobject_cast<QQuickItem*>(view->rootObject()); 0118 QVERIFY(item); 0119 window.show(); 0120 0121 view->showNormal(); 0122 0123 // initial size for root object 0124 QCOMPARE(item->width(), 200.0); 0125 QCOMPARE(item->height(), 200.0); 0126 QCOMPARE(view->size(), view->sizeHint()); 0127 QCOMPARE(view->size(), view->initialSize()); 0128 0129 // size update from root object 0130 item->setWidth(80); 0131 item->setHeight(100); 0132 QCOMPARE(item->width(), 80.0); 0133 QCOMPARE(item->height(), 100.0); 0134 QTRY_COMPARE(view->size(), QSize(80, 100)); 0135 QCOMPARE(view->size(), QSize(80, 100)); 0136 QCOMPARE(view->size(), view->sizeHint()); 0137 0138 // size update from root object disabled 0139 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); 0140 item->setWidth(60); 0141 item->setHeight(80); 0142 QCOMPARE(view->width(), 80); 0143 QCOMPARE(view->height(), 100); 0144 QCOMPARE(QSize(item->width(), item->height()), view->sizeHint()); 0145 0146 // size update from view 0147 view->resize(QSize(200,300)); 0148 QTRY_COMPARE(item->width(), 200.0); 0149 QCOMPARE(item->height(), 300.0); 0150 QCOMPARE(view->size(), QSize(200, 300)); 0151 QCOMPARE(view->size(), view->sizeHint()); 0152 0153 delete view; 0154 0155 // if we set a specific size for the view then it should keep that size 0156 // for SizeRootObjectToView mode. 0157 view = new KQuickAddons::QuickViewSharedEngine(&window); 0158 view->resize(300, 300); 0159 view->setResizeMode(KQuickAddons::QuickViewSharedEngine::SizeRootObjectToView); 0160 QCOMPARE(QSize(0,0), view->initialSize()); 0161 view->setSource(testFileUrl("resizemodeitem.qml"));qWarning()<<"bbb"<<view->size(); 0162 view->resize(300, 300);qWarning()<<"ccc"<<view->size(); 0163 item = qobject_cast<QQuickItem*>(view->rootObject()); 0164 QVERIFY(item); 0165 0166 view->showNormal(); 0167 QTest::qWait(50); 0168 0169 // initial size from root object 0170 QCOMPARE(item->width(), 300.0); 0171 QCOMPARE(item->height(), 300.0); 0172 QCOMPARE(view->size(), QSize(300, 300)); 0173 QCOMPARE(view->size(), view->sizeHint()); 0174 QCOMPARE(view->initialSize(), QSize(200, 200)); // initial object size 0175 0176 delete view; 0177 } 0178 0179 void QuickViewSharedEngineTest::errors() 0180 { 0181 KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine; 0182 QVERIFY(view); 0183 QQmlTestMessageHandler messageHandler; 0184 view->setSource(testFileUrl("error1.qml")); 0185 QCOMPARE(view->status(), QQmlComponent::Error); 0186 QCOMPARE(view->errors().count(), 1); 0187 delete view; 0188 } 0189 0190 void QuickViewSharedEngineTest::engine() 0191 { 0192 //test if engines are actually shared 0193 //test if the engine gets deleted when the last view dies 0194 KQuickAddons::QuickViewSharedEngine *view = new KQuickAddons::QuickViewSharedEngine(); 0195 QQmlEngine *engine = view->engine(); 0196 0197 KQuickAddons::QuickViewSharedEngine *view2 = new KQuickAddons::QuickViewSharedEngine(); 0198 QQmlEngine *engine2 = view2->engine(); 0199 0200 delete view; 0201 delete view2; 0202 0203 view = new KQuickAddons::QuickViewSharedEngine(); 0204 QQmlEngine *engine3 = view->engine(); 0205 0206 QCOMPARE(engine, engine2); 0207 QVERIFY(engine != engine3); 0208 } 0209 0210 QTEST_MAIN(QuickViewSharedEngineTest) 0211 0212 #include "quickviewsharedengine.moc"