diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-11-03 13:27:13 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-11-03 13:27:13 +0100 |
commit | f2244103ff7a9b61fc7bcb7e920d8cc6b2f5f226 (patch) | |
tree | 8fe753743c46d4a652f582a7a2a49e5709eaa6e0 /tests | |
parent | 57430b2bdad32150e0ed8ceb6893430363ee6670 (diff) | |
parent | 164af37710e5721cbc7d79a0af20f2387181c59c (diff) |
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
tools/qmlprofiler/qmlprofilerclient.cpp
Change-Id: I1de8832fefd0e45fea16ca072b6c7ae44fa376d4
Diffstat (limited to 'tests')
22 files changed, 374 insertions, 3 deletions
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index f62d2f3bdb..4b9fbe75ac 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -13,3 +13,5 @@ test_module_includes( Qml QQmlEngine Quick QQuickWindow ) + +expect_pass(test_plugins) diff --git a/tests/auto/cmake/test_plugins/CMakeLists.txt b/tests/auto/cmake/test_plugins/CMakeLists.txt new file mode 100644 index 0000000000..9cbfbb657e --- /dev/null +++ b/tests/auto/cmake/test_plugins/CMakeLists.txt @@ -0,0 +1,14 @@ +project(test_plugins) + +cmake_minimum_required(VERSION 2.8) +cmake_policy(SET CMP0056 NEW) + +find_package(Qt5Qml REQUIRED) + +# See QTBUG-43438 +if (NOT TARGET Qt5::QTcpServerConnectionFactory) + message(SEND_ERROR "Qt5::QTcpServerConnectionFactory does not exist") +endif() +if (NOT TARGET Qt5::QLocalClientConnectionFactory) + message(SEND_ERROR "Qt5::QLocalClientConnectionFactory does not exist") +endif() diff --git a/tests/auto/qml/qml.pro b/tests/auto/qml/qml.pro index 3a97bf655d..5e798f3b48 100644 --- a/tests/auto/qml/qml.pro +++ b/tests/auto/qml/qml.pro @@ -71,7 +71,10 @@ qtHaveModule(widgets) { SUBDIRS += $$PUBLICTESTS SUBDIRS += $$METATYPETESTS -!winrt:!contains(QT_CONFIG, no-qml-debug): SUBDIRS += debugger # no QProcess on winrt +!winrt { # no QProcess on winrt + !contains(QT_CONFIG, no-qml-debug): SUBDIRS += debugger + SUBDIRS += qmllint +} contains(QT_CONFIG, private_tests) { SUBDIRS += $$PRIVATETESTS diff --git a/tests/auto/qml/qmllint/data/QTBUG-45916.js b/tests/auto/qml/qmllint/data/QTBUG-45916.js new file mode 100644 index 0000000000..1947b5aa80 --- /dev/null +++ b/tests/auto/qml/qmllint/data/QTBUG-45916.js @@ -0,0 +1,6 @@ +.pragma library +.import QtQuick 2.4 as JSQtQuick + +function foo(url) +{ +} diff --git a/tests/auto/qml/qmllint/data/Simple.qml b/tests/auto/qml/qmllint/data/Simple.qml new file mode 100644 index 0000000000..db54cff477 --- /dev/null +++ b/tests/auto/qml/qmllint/data/Simple.qml @@ -0,0 +1,4 @@ +import QtQuick 2.2 + +Item { +} diff --git a/tests/auto/qml/qmllint/data/failure1.js b/tests/auto/qml/qmllint/data/failure1.js new file mode 100644 index 0000000000..6a62accf06 --- /dev/null +++ b/tests/auto/qml/qmllint/data/failure1.js @@ -0,0 +1,5 @@ +function foo() +{ + var hello + returm 0 // Typo +} diff --git a/tests/auto/qml/qmllint/data/failure1.qml b/tests/auto/qml/qmllint/data/failure1.qml new file mode 100644 index 0000000000..56f0f746a9 --- /dev/null +++ b/tests/auto/qml/qmllint/data/failure1.qml @@ -0,0 +1,5 @@ +import QtQuick 1.0 + +Item { + id root # // Missing : +} diff --git a/tests/auto/qml/qmllint/data/importing_js.qml b/tests/auto/qml/qmllint/data/importing_js.qml new file mode 100644 index 0000000000..fa6cf797db --- /dev/null +++ b/tests/auto/qml/qmllint/data/importing_js.qml @@ -0,0 +1,5 @@ +import "QTBUG-45916.js" as JSTest + +Item { + id: root +} diff --git a/tests/auto/qml/qmllint/main.cpp b/tests/auto/qml/qmllint/main.cpp new file mode 100644 index 0000000000..a6dadd7178 --- /dev/null +++ b/tests/auto/qml/qmllint/main.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Sergio Martins <sergio.martins@kdab.com> +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QtTest> +#include <QProcess> +#include <QString> + +class TestQmllint: public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void initTestCase(); + void test(); + void test_data(); +private: + QString m_qmllintPath; +}; + +void TestQmllint::initTestCase() +{ + m_qmllintPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmllint"); +#ifdef Q_OS_WIN + m_qmllintPath += QLatin1String(".exe"); +#endif + if (!QFileInfo(m_qmllintPath).exists()) { + QString message = QStringLiteral("qmllint executable not found (looked for %0)").arg(m_qmllintPath); + QFAIL(qPrintable(message)); + } +} + +void TestQmllint::test_data() +{ + QTest::addColumn<QString>("filename"); + QTest::addColumn<bool>("isValid"); + + // Valid files: + QTest::newRow("Simple_QML") << QStringLiteral("Simple.qml") << true; + QTest::newRow("QML_importing_JS") << QStringLiteral("importing_js.qml") << true; + QTest::newRow("QTBUG-45916_JS_with_pragma_and_import") << QStringLiteral("QTBUG-45916.js") << true; + + // Invalid files: + QTest::newRow("Invalid_syntax_QML") << QStringLiteral("failure1.qml") << false; + QTest::newRow("Invalid_syntax_JS") << QStringLiteral("failure1.js") << false; +} + +void TestQmllint::test() +{ + QFETCH(QString, filename); + QFETCH(bool, isValid); + filename = QStringLiteral("data/") + filename; + QStringList args; + args << QStringLiteral("--silent") << filename; + + bool success = QProcess::execute(m_qmllintPath, args) == 0; + QCOMPARE(success, isValid); +} + +QTEST_MAIN(TestQmllint) +#include "main.moc" diff --git a/tests/auto/qml/qmllint/qmllint.pro b/tests/auto/qml/qmllint/qmllint.pro new file mode 100644 index 0000000000..b53a6f6877 --- /dev/null +++ b/tests/auto/qml/qmllint/qmllint.pro @@ -0,0 +1,6 @@ +TEMPLATE = app +TARGET = testqmllint +INCLUDEPATH += . + +SOURCES += main.cpp +QT += testlib diff --git a/tests/auto/qml/qmlmin/tst_qmlmin.cpp b/tests/auto/qml/qmlmin/tst_qmlmin.cpp index d2e8526896..6d2fba3f46 100644 --- a/tests/auto/qml/qmlmin/tst_qmlmin.cpp +++ b/tests/auto/qml/qmlmin/tst_qmlmin.cpp @@ -87,6 +87,7 @@ void tst_qmlmin::initTestCase() excludedDirs << "doc/src/snippets/qtquick1/qtbinding"; excludedDirs << "doc/src/snippets/qtquick1/imports"; excludedDirs << "tests/manual/v4"; + excludedDirs << "tests/auto/qml/qmllint"; // Add invalid files (i.e. files with syntax errors) invalidFiles << "tests/auto/quick/qquickloader/data/InvalidSourceComponent.qml"; diff --git a/tests/auto/qml/qqmlengine/data/TypeofQmlProperty.qml b/tests/auto/qml/qqmlengine/data/TypeofQmlProperty.qml new file mode 100644 index 0000000000..2196543dc8 --- /dev/null +++ b/tests/auto/qml/qqmlengine/data/TypeofQmlProperty.qml @@ -0,0 +1,6 @@ +import QtQuick 2.5 + +Item { + property var someProp: 1 + Component.onCompleted: console.log("typeof someProp:", typeof(someProp)); +} diff --git a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp index cb911d0115..486a0b4e87 100644 --- a/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp +++ b/tests/auto/qml/qqmlengine/tst_qqmlengine.cpp @@ -75,6 +75,8 @@ private slots: void urlInterceptor_data(); void urlInterceptor(); + void qmlContextProperties(); + public slots: QObject *createAQObjectForOwnershipTest () { @@ -778,6 +780,18 @@ void tst_qqmlengine::urlInterceptor() QCOMPARE(o->property("absoluteUrl").toString(), expectedAbsoluteUrl); } +void tst_qqmlengine::qmlContextProperties() +{ + QQmlEngine e; + + QQmlComponent c(&e, testFileUrl("TypeofQmlProperty.qml")); + QObject *o = c.create(); + if (!o) { + qDebug() << c.errorString(); + } + QVERIFY(o); +} + QTEST_MAIN(tst_qqmlengine) #include "tst_qqmlengine.moc" diff --git a/tests/auto/qml/qqmltypeloader/data/load_synchronous.qml b/tests/auto/qml/qqmltypeloader/data/load_synchronous.qml new file mode 100644 index 0000000000..5e9c4c2bdc --- /dev/null +++ b/tests/auto/qml/qqmltypeloader/data/load_synchronous.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQml 2.2 + +QtObject { + id: top + + Component.onCompleted: { + Qt.createQmlObject('QtObject {}', top, 'nonprotocol:'); + } +} diff --git a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp index 77cdaae9f0..4c5b1f7e63 100644 --- a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp +++ b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp @@ -43,6 +43,7 @@ class tst_QQMLTypeLoader : public QQmlDataTest private slots: void testLoadComplete(); + void loadComponentSynchronously(); }; void tst_QQMLTypeLoader::testLoadComplete() @@ -62,6 +63,16 @@ void tst_QQMLTypeLoader::testLoadComplete() delete window; } +void tst_QQMLTypeLoader::loadComponentSynchronously() +{ + QQmlEngine engine; + QTest::ignoreMessage(QtWarningMsg, QRegularExpression( + QLatin1String(".*nonprotocol::1:1: QtObject is not a type.*"))); + QQmlComponent component(&engine, testFileUrl("load_synchronous.qml")); + QObject *o = component.create(); + QVERIFY(o); +} + QTEST_MAIN(tst_QQMLTypeLoader) #include "tst_qqmltypeloader.moc" diff --git a/tests/auto/quick/qquickitem2/data/childrenRectBottomRightCorner.qml b/tests/auto/quick/qquickitem2/data/childrenRectBottomRightCorner.qml new file mode 100644 index 0000000000..0b83e20b20 --- /dev/null +++ b/tests/auto/quick/qquickitem2/data/childrenRectBottomRightCorner.qml @@ -0,0 +1,47 @@ +import QtQuick 2.0 + +Item { + width: 300 + height: 300 + + Item { + anchors.centerIn: parent + + Rectangle { + objectName: "childrenRectProxy" + x: container.childrenRect.x + y: container.childrenRect.y + width: container.childrenRect.width + height: container.childrenRect.height + color: "red" + opacity: 0.5 + } + + Item { + id: container + + Rectangle { + x: -100 + y: -100 + width: 10 + height: 10 + color: "red" + } + + Rectangle { + x: -60 + y: -60 + width: 10 + height: 10 + color: "red" + } + } + + Rectangle { + id: origin + width: 5 + height: 5 + color: "black" + } + } +} diff --git a/tests/auto/quick/qquickitem2/data/keynavigationtest_loop.qml b/tests/auto/quick/qquickitem2/data/keynavigationtest_loop.qml new file mode 100644 index 0000000000..dfac1549f9 --- /dev/null +++ b/tests/auto/quick/qquickitem2/data/keynavigationtest_loop.qml @@ -0,0 +1,37 @@ +import QtQuick 2.0 + +Column { + width: 50; height: 200 + Rectangle { + id: item1 + objectName: "item1" + focus: true + width: 50; height: 50 + color: focus ? "red" : "lightgray" + KeyNavigation.down: item2 + } + Rectangle { + id: item2 + objectName: "item2" + enabled: false + width: 50; height: 50 + color: focus ? "red" : "lightgray" + KeyNavigation.down: item3 + } + Rectangle { + id: item3 + objectName: "item3" + enabled: false + width: 50; height: 50 + color: focus ? "red" : "lightgray" + KeyNavigation.down: item4 + } + Rectangle { + id: item4 + objectName: "item4" + enabled: false + width: 50; height: 50 + color: focus ? "red" : "lightgray" + KeyNavigation.down: item3 + } +} diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp index f3351fcc4e..c7717b9cca 100644 --- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp @@ -87,6 +87,7 @@ private slots: void keyNavigation_skipNotVisible(); void keyNavigation_implicitSetting(); void keyNavigation_focusReason(); + void keyNavigation_loop(); void layoutMirroring(); void layoutMirroringIllegalParent(); void smooth(); @@ -103,6 +104,7 @@ private slots: void childrenRectBug(); void childrenRectBug2(); void childrenRectBug3(); + void childrenRectBottomRightCorner(); void childrenProperty(); void resourcesProperty(); @@ -2102,6 +2104,31 @@ void tst_QQuickItem::keyNavigation_focusReason() delete window; } +void tst_QQuickItem::keyNavigation_loop() +{ + // QTBUG-47229 + QQuickView *window = new QQuickView(0); + window->setBaseSize(QSize(240,320)); + + window->setSource(testFileUrl("keynavigationtest_loop.qml")); + window->show(); + window->requestActivate(); + + QVERIFY(QTest::qWaitForWindowActive(window)); + QCOMPARE(QGuiApplication::focusWindow(), window); + + QQuickItem *item = findItem<QQuickItem>(window->rootObject(), "item1"); + QVERIFY(item); + QVERIFY(item->hasActiveFocus()); + + QKeyEvent key = QKeyEvent(QEvent::KeyPress, Qt::Key_Down, Qt::NoModifier, "", false, 1); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + QVERIFY(item->hasActiveFocus()); + + delete window; +} + void tst_QQuickItem::smooth() { QQmlComponent component(&engine); @@ -2569,6 +2596,22 @@ void tst_QQuickItem::childrenRectBug3() delete window; } +// QTBUG-38732 +void tst_QQuickItem::childrenRectBottomRightCorner() +{ + QQuickView *window = new QQuickView(0); + window->setSource(testFileUrl("childrenRectBottomRightCorner.qml")); + window->show(); + + QQuickItem *rect = window->rootObject()->findChild<QQuickItem*>("childrenRectProxy"); + QCOMPARE(rect->x(), qreal(-100)); + QCOMPARE(rect->y(), qreal(-100)); + QCOMPARE(rect->width(), qreal(50)); + QCOMPARE(rect->height(), qreal(50)); + + delete window; +} + // QTBUG-13893 void tst_QQuickItem::transformCrash() { @@ -2721,7 +2764,10 @@ void tst_QQuickItem::parentLoop() { QQuickView *window = new QQuickView(0); - QTest::ignoreMessage(QtWarningMsg, "QQuickItem::setParentItem: Parent is already part of this items subtree."); +#ifndef QT_NO_REGULAREXPRESSION + QRegularExpression msgRegexp = QRegularExpression("QQuickItem::setParentItem: Parent QQuickItem\\(.*\\) is already part of the subtree of QQuickItem\\(.*\\)"); + QTest::ignoreMessage(QtWarningMsg, msgRegexp); +#endif window->setSource(testFileUrl("parentLoop.qml")); QQuickItem *root = qobject_cast<QQuickItem*>(window->rootObject()); diff --git a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp index eed947bfcd..fc5dd3bbca 100644 --- a/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp +++ b/tests/auto/quick/qquickpathview/tst_qquickpathview.cpp @@ -1113,6 +1113,15 @@ void tst_QQuickPathView::setCurrentIndex() QCOMPARE(pathview->currentItem(), firstItem); QCOMPARE(firstItem->property("onPath"), QVariant(true)); + // check for bogus currentIndexChanged() signals + QSignalSpy currentIndexSpy(pathview, SIGNAL(currentIndexChanged())); + QVERIFY(currentIndexSpy.isValid()); + pathview->setHighlightMoveDuration(100); + pathview->setHighlightRangeMode(QQuickPathView::StrictlyEnforceRange); + pathview->setSnapMode(QQuickPathView::SnapToItem); + pathview->setCurrentIndex(3); + QTRY_COMPARE(pathview->currentIndex(), 3); + QCOMPARE(currentIndexSpy.count(), 1); } void tst_QQuickPathView::resetModel() diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp index 6042c08891..3f37cf233b 100644 --- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp @@ -38,6 +38,7 @@ #include <QtQuick/private/qquicktext_p.h> #include <QtQuick/private/qquickmousearea_p.h> #include <private/qquicktext_p_p.h> +#include <private/qquicktextdocument_p.h> #include <private/qquickvaluetypes_p.h> #include <QFontMetrics> #include <qmath.h> diff --git a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp index 27a02377bd..12fcbfda0e 100644 --- a/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp +++ b/tests/auto/quick/qquicktextdocument/tst_qquicktextdocument.cpp @@ -36,6 +36,7 @@ #include <QtQuick/QQuickTextDocument> #include <QtQuick/QQuickItem> #include <QtQuick/private/qquicktextedit_p.h> +#include <QtQuick/private/qquicktextdocument_p.h> #include <QtGui/QTextDocument> #include <QtGui/QTextDocumentWriter> #include <QtQml/QQmlEngine> @@ -47,6 +48,7 @@ class tst_qquicktextdocument : public QQmlDataTest Q_OBJECT private slots: void textDocumentWriter(); + void textDocumentWithImage(); }; QString text = QStringLiteral("foo bar"); @@ -74,6 +76,20 @@ void tst_qquicktextdocument::textDocumentWriter() delete o; } +void tst_qquicktextdocument::textDocumentWithImage() +{ + QQuickTextDocumentWithImageResources document(0); + QImage image(1, 1, QImage::Format_Mono); + image.fill(1); + + QString name = "image"; + document.addResource(QTextDocument::ImageResource, name, image); + QTextImageFormat format; + format.setName(name); + QCOMPARE(image, document.image(format)); + QCOMPARE(image, document.resource(QTextDocument::ImageResource, name).value<QImage>()); +} + QTEST_MAIN(tst_qquicktextdocument) #include "tst_qquicktextdocument.moc" diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index e4473b9540..b0ab58538a 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -43,7 +43,8 @@ #include <QtGui/qguiapplication.h> #include <private/qquicktextedit_p.h> #include <private/qquicktextedit_p_p.h> -#include <private/qquicktext_p_p.h> +#include <private/qquicktext_p.h> +#include <private/qquicktextdocument_p.h> #include <QFontMetrics> #include <QtQuick/QQuickView> #include <QDir> |