diff options
Diffstat (limited to 'tests/auto/quick')
-rw-r--r-- | tests/auto/quick/dialogs/data/RectWithFileDialog.qml | 33 | ||||
-rw-r--r-- | tests/auto/quick/dialogs/dialogs.pro | 17 | ||||
-rw-r--r-- | tests/auto/quick/dialogs/tst_dialogs.cpp | 156 | ||||
-rw-r--r-- | tests/auto/quick/qquickcanvasitem/data/CanvasComponent.qml | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 1 | ||||
-rw-r--r-- | tests/auto/quick/quick.pro | 1 |
6 files changed, 210 insertions, 1 deletions
diff --git a/tests/auto/quick/dialogs/data/RectWithFileDialog.qml b/tests/auto/quick/dialogs/data/RectWithFileDialog.qml new file mode 100644 index 0000000000..ca7ecc948a --- /dev/null +++ b/tests/auto/quick/dialogs/data/RectWithFileDialog.qml @@ -0,0 +1,33 @@ +import QtQuick 2.0 +import QtQuick.Dialogs 1.0 + +Rectangle { + width: 1024 + height: 320 + property alias fileDialog: fileDialog + property alias label: label + property alias mouseArea: mouseArea + + FileDialog { + id: fileDialog + title: "Choose some files" + selectMultiple: true + nameFilters: [ "QML files (*.qml)", "All files (*)" ] + selectedNameFilter: "QML files (*.qml)" + onAccepted: label.text = fileDialog.filePaths + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: fileDialog.visible = !fileDialog.visible + } + + Text { + id: label + text: "Click to open a file dialog" + wrapMode: Text.Wrap + anchors.fill: parent + anchors.margins: 10 + } +} diff --git a/tests/auto/quick/dialogs/dialogs.pro b/tests/auto/quick/dialogs/dialogs.pro new file mode 100644 index 0000000000..d28c623a1f --- /dev/null +++ b/tests/auto/quick/dialogs/dialogs.pro @@ -0,0 +1,17 @@ +CONFIG += testcase +TARGET = tst_dialogs +SOURCES += tst_dialogs.cpp + +include (../../shared/util.pri) + +macx:CONFIG -= app_bundle + +CONFIG += parallel_test +QT += core-private gui-private qml-private quick-private v8-private testlib + +TESTDATA = data/* + +OTHER_FILES += \ + data/FileDialog.qml \ + +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/quick/dialogs/tst_dialogs.cpp b/tests/auto/quick/dialogs/tst_dialogs.cpp new file mode 100644 index 0000000000..9f0dc8ec18 --- /dev/null +++ b/tests/auto/quick/dialogs/tst_dialogs.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <qtest.h> +#include "../../shared/util.h" +#include <QtQuick/QQuickItem> +#include <QtQuick/QQuickView> +#include <QSignalSpy> + +class tst_dialogs : public QQmlDataTest +{ + Q_OBJECT +public: + +private slots: + void initTestCase() + { + QQmlDataTest::initTestCase(); + } + + // FileDialog + void fileDialogDefaultModality(); + void fileDialogNonModal(); + void fileDialogNameFilters(); + +private: +}; + +void tst_dialogs::fileDialogDefaultModality() +{ + QQuickView *window = new QQuickView; + QScopedPointer<QQuickWindow> cleanup(window); + + window->setSource(testFileUrl("RectWithFileDialog.qml")); + window->setGeometry(240,240,1024,320); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window)); + + // Click to show + QObject *dlg = qvariant_cast<QObject *>(window->rootObject()->property("fileDialog")); + QSignalSpy spyVisibilityChanged(dlg, SIGNAL(visibilityChanged())); + QTest::mouseClick(window, Qt::LeftButton, 0, QPoint(1000, 100)); // show + QTRY_VERIFY(spyVisibilityChanged.count() > 0); + int visibilityChangedCount = spyVisibilityChanged.count(); + // Can't hide by clicking the main window, because dialog is modal. + QTest::mouseClick(window, Qt::LeftButton, 0, QPoint(1000, 100)); +#ifdef Q_OS_MAC + /* + On the Mac, if you send an event directly to a window, the modal dialog + doesn't block the event, so the window will process it normally. This + is a different code path compared to having a user click the mouse and + generate a native event; in that case the OS does the filtering itself, + and Qt will not even see the event. But simulating real events in the + test framework is generally unstable. So there isn't a good way to test + modality on the mac. + */ + QSKIP("Modality test doesn't work on Mac OS"); +#endif + // So we expect no change in visibility. + QCOMPARE(spyVisibilityChanged.count(), visibilityChangedCount); + + QCOMPARE(dlg->property("visible").toBool(), true); + QMetaObject::invokeMethod(dlg, "close"); + QTRY_VERIFY(spyVisibilityChanged.count() > visibilityChangedCount); + visibilityChangedCount = spyVisibilityChanged.count(); + QCOMPARE(dlg->property("visible").toBool(), false); + QMetaObject::invokeMethod(dlg, "open"); + QTRY_VERIFY(spyVisibilityChanged.count() > visibilityChangedCount); + QCOMPARE(dlg->property("visible").toBool(), true); + QCOMPARE(dlg->property("modality").toInt(), (int)Qt::WindowModal); +} + +void tst_dialogs::fileDialogNonModal() +{ + QQuickView *window = new QQuickView; + QScopedPointer<QQuickWindow> cleanup(window); + + window->setSource(testFileUrl("RectWithFileDialog.qml")); + window->setGeometry(240,240,1024,320); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window)); + + // Click to toggle visibility + QObject *dlg = qvariant_cast<QObject *>(window->rootObject()->property("fileDialog")); + dlg->setProperty("modality", QVariant((int)Qt::NonModal)); + QSignalSpy spyVisibilityChanged(dlg, SIGNAL(visibilityChanged())); + QTest::mouseClick(window, Qt::LeftButton, 0, QPoint(1000, 100)); // show + int visibilityChangedCount = spyVisibilityChanged.count(); + QTRY_VERIFY(visibilityChangedCount > 0); + QCOMPARE(dlg->property("visible").toBool(), true); + QTest::mouseClick(window, Qt::LeftButton, 0, QPoint(1000, 100)); // hide + QTRY_VERIFY(spyVisibilityChanged.count() > visibilityChangedCount); + QCOMPARE(dlg->property("visible").toBool(), false); + QCOMPARE(dlg->property("modality").toInt(), (int)Qt::NonModal); +} + +void tst_dialogs::fileDialogNameFilters() +{ + QQuickView *window = new QQuickView; + QScopedPointer<QQuickWindow> cleanup(window); + + window->setSource(testFileUrl("RectWithFileDialog.qml")); + window->setGeometry(240,240,1024,320); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window)); + + QObject *dlg = qvariant_cast<QObject *>(window->rootObject()->property("fileDialog")); + QStringList filters; + filters << "QML files (*.qml)"; + filters << "Image files (*.jpg, *.png, *.gif)"; + filters << "All files (*)"; + dlg->setProperty("nameFilters", QVariant(filters)); + QCOMPARE(dlg->property("selectedNameFilter").toString(), filters.first()); +} + +QTEST_MAIN(tst_dialogs) + +#include "tst_dialogs.moc" diff --git a/tests/auto/quick/qquickcanvasitem/data/CanvasComponent.qml b/tests/auto/quick/qquickcanvasitem/data/CanvasComponent.qml index b9e8d75f5a..000888a36f 100644 --- a/tests/auto/quick/qquickcanvasitem/data/CanvasComponent.qml +++ b/tests/auto/quick/qquickcanvasitem/data/CanvasComponent.qml @@ -5,6 +5,7 @@ Component { id:canvas Canvas { id:c + antialiasing: false; width:100;height:100 onPaint :{} //this line is needed for some tests (make sure onPaint handler always called property alias paintCount:spyPaint.count @@ -27,4 +28,4 @@ Component { SignalSpy {id: spyImageLoaded;target:c;signalName: "imageLoaded"} SignalSpy {id: spyAvailableChanged;target:c;signalName: "availableChanged"} } -}
\ No newline at end of file +} diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp index b2e07e4c13..2d3c8f7ca7 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -366,6 +366,7 @@ void tst_qquickwindow::constantUpdatesOnWindow_data() void tst_qquickwindow::constantUpdatesOnWindow() { + QSKIP("This test fails frequently on the present overworked CI mac machines"); QFETCH(bool, blockedGui); QFETCH(QByteArray, signal); diff --git a/tests/auto/quick/quick.pro b/tests/auto/quick/quick.pro index aa1e1ec701..81d4fd3348 100644 --- a/tests/auto/quick/quick.pro +++ b/tests/auto/quick/quick.pro @@ -69,6 +69,7 @@ QUICKTESTS = \ qquickcanvasitem \ qquickscreen \ touchmouse \ + dialogs \ SUBDIRS += $$PUBLICTESTS |