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"