diff options
author | João Abecasis <joao.abecasis@nokia.com> | 2012-01-16 17:52:29 +0100 |
---|---|---|
committer | João Abecasis <joao.abecasis@nokia.com> | 2012-01-16 17:53:41 +0100 |
commit | 5b250d497fd798c476765b22a2906e1c0ff1e432 (patch) | |
tree | fd4215ca375cc2402e536bf670c2977cf64ae2ef /tests/auto/gui/kernel | |
parent | 2c52e9a5c1d6ef6cbf4577430e14027375465c96 (diff) | |
parent | 7a0099183a1c107126bda3b59a47651aac612426 (diff) |
Merge remote-tracking branch 'gerrit/master' into containers
Change-Id: I2d358b912f1055ee6021d13de2f66fd459aaa355
Diffstat (limited to 'tests/auto/gui/kernel')
21 files changed, 715 insertions, 137 deletions
diff --git a/tests/auto/gui/kernel/qclipboard/copier/copier.pro b/tests/auto/gui/kernel/qclipboard/copier/copier.pro index d345d33eb5..1c188ca7de 100644 --- a/tests/auto/gui/kernel/qclipboard/copier/copier.pro +++ b/tests/auto/gui/kernel/qclipboard/copier/copier.pro @@ -3,7 +3,6 @@ TARGET = DEPENDPATH += . INCLUDEPATH += . CONFIG -= app_bundle -QT += widgets win32: DESTDIR = ../copier # Input SOURCES += main.cpp diff --git a/tests/auto/gui/kernel/qclipboard/copier/main.cpp b/tests/auto/gui/kernel/qclipboard/copier/main.cpp index e4417352ff..7e3efa03ba 100644 --- a/tests/auto/gui/kernel/qclipboard/copier/main.cpp +++ b/tests/auto/gui/kernel/qclipboard/copier/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -38,17 +38,19 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#include <QApplication> -#include <QClipboard> -#include <QStringList> +#include <QtGui/QGuiApplication> +#include <QtGui/QClipboard> +#include <QtCore/QStringList> + int main(int argc, char **argv) { - QApplication app(argc, argv); - QClipboard *board = QApplication::clipboard(); -#ifdef Q_OS_WINCE - board->setText(QLatin1String("testString.!")); -#else - board->setText(app.arguments().at(1)); + QGuiApplication app(argc, argv); + QString paste = QStringLiteral("testString.!"); +#ifndef Q_OS_WINCE + const QStringList arguments = app.arguments(); + if (arguments.size() > 1) + paste = arguments.at(1); #endif + QGuiApplication::clipboard()->setText(paste); return 0; } diff --git a/tests/auto/gui/kernel/qclipboard/paster/main.cpp b/tests/auto/gui/kernel/qclipboard/paster/main.cpp index 4df4d7fb45..3ca4886f0b 100644 --- a/tests/auto/gui/kernel/qclipboard/paster/main.cpp +++ b/tests/auto/gui/kernel/qclipboard/paster/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -38,17 +38,18 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#include <QApplication> -#include <QClipboard> -#include <QStringList> +#include <QtGui/QGuiApplication> +#include <QtGui/QClipboard> +#include <QtCore/QStringList> int main(int argc, char **argv) { - QApplication app(argc, argv); - QClipboard *board = QApplication::clipboard(); -#ifdef Q_OS_WINCE - return (board->text() == QLatin1String("testString.!")) ? 0 : 1; -#else - return (board->text() == app.arguments().at(1)) ? 0 : 1; + QGuiApplication app(argc, argv); + QString expected = QStringLiteral("testString.!"); +#ifndef Q_OS_WINCE + const QStringList arguments = app.arguments(); + if (arguments.size() > 1) + expected = arguments.at(1); #endif + return QGuiApplication::clipboard()->text() == expected ? 0 : 1; } diff --git a/tests/auto/gui/kernel/qclipboard/paster/paster.pro b/tests/auto/gui/kernel/qclipboard/paster/paster.pro index d214c9e90a..2f50eefb1e 100644 --- a/tests/auto/gui/kernel/qclipboard/paster/paster.pro +++ b/tests/auto/gui/kernel/qclipboard/paster/paster.pro @@ -4,7 +4,6 @@ DEPENDPATH += . INCLUDEPATH += . win32: DESTDIR = ../paster CONFIG -= app_bundle -QT += widgets # Input SOURCES += main.cpp diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp index 29fabefc72..fcba0958e7 100644 --- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp +++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -42,7 +42,9 @@ #include <QtTest/QtTest> #include <QtCore/QDebug> -#include <QtWidgets/QApplication> +#include <QtCore/QFileInfo> +#include <QtCore/QDir> +#include <QtGui/QGuiApplication> #include <QtGui/QClipboard> #ifdef Q_WS_MAC #include <Carbon/Carbon.h> @@ -52,8 +54,9 @@ class tst_QClipboard : public QObject { Q_OBJECT private slots: + void init(); void copy_exit_paste(); - void capabiliyFunctions(); + void capabilityFunctions(); void modes(); void testSignals(); void setMimeData(); @@ -63,6 +66,11 @@ private: bool nativeClipboardWorking(); }; +void tst_QClipboard::init() +{ + const QString testdataDir = QFileInfo(QFINDTESTDATA("copier")).absolutePath(); + QVERIFY2(QDir::setCurrent(testdataDir), qPrintable("Could not chdir to " + testdataDir)); +} bool tst_QClipboard::nativeClipboardWorking() { @@ -82,9 +90,9 @@ Q_DECLARE_METATYPE(QClipboard::Mode) Tests that the capability functions are implemented on all platforms. */ -void tst_QClipboard::capabiliyFunctions() +void tst_QClipboard::capabilityFunctions() { - QClipboard * const clipboard = QApplication::clipboard(); + QClipboard * const clipboard = QGuiApplication::clipboard(); clipboard->supportsSelection(); clipboard->supportsFindBuffer(); @@ -99,7 +107,7 @@ void tst_QClipboard::capabiliyFunctions() */ void tst_QClipboard::modes() { - QClipboard * const clipboard = QApplication::clipboard(); + QClipboard * const clipboard = QGuiApplication::clipboard(); if (!nativeClipboardWorking()) QSKIP("Native clipboard not working in this setup"); @@ -124,7 +132,7 @@ void tst_QClipboard::modes() } /* - Test that the appropriate signals are emitted when the cliboard + Test that the appropriate signals are emitted when the clipboard contents is changed by calling the qt functions. */ void tst_QClipboard::testSignals() @@ -134,7 +142,7 @@ void tst_QClipboard::testSignals() if (!nativeClipboardWorking()) QSKIP("Native clipboard not working in this setup"); - QClipboard * const clipboard = QApplication::clipboard(); + QClipboard * const clipboard = QGuiApplication::clipboard(); QSignalSpy changedSpy(clipboard, SIGNAL(changed(QClipboard::Mode))); QSignalSpy dataChangedSpy(clipboard, SIGNAL(dataChanged())); @@ -182,6 +190,44 @@ void tst_QClipboard::testSignals() QCOMPARE(dataChangedSpy.count(), 1); } +static bool runHelper(const QString &program, const QStringList &arguments, QByteArray *errorMessage) +{ + QProcess process; + process.setReadChannelMode(QProcess::ForwardedChannels); + process.start(program, arguments); + if (!process.waitForStarted()) { + *errorMessage = "Unable to start '" + program.toLocal8Bit() + " ': " + + process.errorString().toLocal8Bit(); + return false; + } + + // Windows: Due to implementation changes, the event loop needs + // to be spun since we ourselves also need to answer the + // WM_DRAWCLIPBOARD message as we are in the chain of clipboard + // viewers. + bool running = true; + for (int i = 0; i < 60 && running; ++i) { + QGuiApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + if (process.waitForFinished(500)) + running = false; + } + if (running) { + process.kill(); + *errorMessage = "Timeout running '" + program.toLocal8Bit() + '\''; + return false; + } + if (process.exitStatus() != QProcess::NormalExit) { + *errorMessage = "Process '" + program.toLocal8Bit() + "' crashed."; + return false; + } + if (process.exitCode()) { + *errorMessage = "Process '" + program.toLocal8Bit() + "' returns " + + QByteArray::number(process.exitCode()); + return false; + } + return true; +} + // Test that pasted text remains on the clipboard after a Qt application exits. void tst_QClipboard::copy_exit_paste() { @@ -192,13 +238,16 @@ void tst_QClipboard::copy_exit_paste() #endif if (!nativeClipboardWorking()) QSKIP("Native clipboard not working in this setup"); - const QStringList stringArgument = QStringList() << "Test string."; - QCOMPARE(QProcess::execute("copier/copier", stringArgument), 0); + const QStringList stringArgument(QStringLiteral("Test string.")); + QByteArray errorMessage; + QVERIFY2(runHelper(QStringLiteral("copier/copier"), stringArgument, &errorMessage), + errorMessage.constData()); #ifdef Q_OS_MAC // The Pasteboard needs a moment to breathe (at least on older Macs). QTest::qWait(100); #endif - QCOMPARE(QProcess::execute("paster/paster", stringArgument), 0); + QVERIFY2(runHelper(QStringLiteral("paster/paster"), stringArgument, &errorMessage), + errorMessage.constData()); #endif } @@ -214,33 +263,33 @@ void tst_QClipboard::setMimeData() mimeData->setText(QLatin1String("Qt/CE foo")); #endif - QApplication::clipboard()->setMimeData(mimeData); - QCOMPARE(QApplication::clipboard()->mimeData(), (const QMimeData *)mimeData); - QCOMPARE(QApplication::clipboard()->mimeData()->objectName(), TestName); + QGuiApplication::clipboard()->setMimeData(mimeData); + QCOMPARE(QGuiApplication::clipboard()->mimeData(), (const QMimeData *)mimeData); + QCOMPARE(QGuiApplication::clipboard()->mimeData()->objectName(), TestName); // set it to the same data again, it shouldn't delete mimeData (and crash as a result) - QApplication::clipboard()->setMimeData(mimeData); - QCOMPARE(QApplication::clipboard()->mimeData(), (const QMimeData *)mimeData); - QCOMPARE(QApplication::clipboard()->mimeData()->objectName(), TestName); - QApplication::clipboard()->clear(); - const QMimeData *appMimeData = QApplication::clipboard()->mimeData(); + QGuiApplication::clipboard()->setMimeData(mimeData); + QCOMPARE(QGuiApplication::clipboard()->mimeData(), (const QMimeData *)mimeData); + QCOMPARE(QGuiApplication::clipboard()->mimeData()->objectName(), TestName); + QGuiApplication::clipboard()->clear(); + const QMimeData *appMimeData = QGuiApplication::clipboard()->mimeData(); QVERIFY(appMimeData != mimeData || appMimeData->objectName() != TestName); // check for crash when using the same mimedata object on several clipboards QMimeData *data = new QMimeData; data->setText("foo"); - QApplication::clipboard()->setMimeData(data, QClipboard::Clipboard); - QApplication::clipboard()->setMimeData(data, QClipboard::Selection); - QApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); + QGuiApplication::clipboard()->setMimeData(data, QClipboard::Clipboard); + QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection); + QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); - QSignalSpy spySelection(QApplication::clipboard(), SIGNAL(selectionChanged())); - QSignalSpy spyData(QApplication::clipboard(), SIGNAL(dataChanged())); - QSignalSpy spyFindBuffer(QApplication::clipboard(), SIGNAL(findBufferChanged())); + QSignalSpy spySelection(QGuiApplication::clipboard(), SIGNAL(selectionChanged())); + QSignalSpy spyData(QGuiApplication::clipboard(), SIGNAL(dataChanged())); + QSignalSpy spyFindBuffer(QGuiApplication::clipboard(), SIGNAL(findBufferChanged())); - QApplication::clipboard()->clear(QClipboard::Clipboard); - QApplication::clipboard()->clear(QClipboard::Selection); // used to crash on X11 - QApplication::clipboard()->clear(QClipboard::FindBuffer); + QGuiApplication::clipboard()->clear(QClipboard::Clipboard); + QGuiApplication::clipboard()->clear(QClipboard::Selection); // used to crash on X11 + QGuiApplication::clipboard()->clear(QClipboard::FindBuffer); #if defined(Q_WS_X11) QCOMPARE(spySelection.count(), 1); @@ -260,9 +309,9 @@ void tst_QClipboard::setMimeData() data = new QMimeData; data->setText("foo"); - QApplication::clipboard()->setMimeData(data, QClipboard::Clipboard); - QApplication::clipboard()->setMimeData(data, QClipboard::Selection); - QApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); + QGuiApplication::clipboard()->setMimeData(data, QClipboard::Clipboard); + QGuiApplication::clipboard()->setMimeData(data, QClipboard::Selection); + QGuiApplication::clipboard()->setMimeData(data, QClipboard::FindBuffer); QMimeData *newData = new QMimeData; newData->setText("bar"); @@ -271,9 +320,9 @@ void tst_QClipboard::setMimeData() spyData.clear(); spyFindBuffer.clear(); - QApplication::clipboard()->setMimeData(newData, QClipboard::Clipboard); - QApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11 - QApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer); + QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Clipboard); + QGuiApplication::clipboard()->setMimeData(newData, QClipboard::Selection); // used to crash on X11 + QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer); #if defined(Q_WS_X11) QCOMPARE(spySelection.count(), 1); @@ -292,7 +341,7 @@ void tst_QClipboard::setMimeData() void tst_QClipboard::clearBeforeSetText() { - QApplication::processEvents(); + QGuiApplication::processEvents(); if (!nativeClipboardWorking()) QSKIP("Native clipboard not working in this setup"); @@ -300,30 +349,30 @@ void tst_QClipboard::clearBeforeSetText() const QString text = "tst_QClipboard::clearBeforeSetText()"; // setText() should work after processEvents() - QApplication::clipboard()->setText(text); - QCOMPARE(QApplication::clipboard()->text(), text); - QApplication::processEvents(); - QCOMPARE(QApplication::clipboard()->text(), text); + QGuiApplication::clipboard()->setText(text); + QCOMPARE(QGuiApplication::clipboard()->text(), text); + QGuiApplication::processEvents(); + QCOMPARE(QGuiApplication::clipboard()->text(), text); // same with clear() - QApplication::clipboard()->clear(); - QVERIFY(QApplication::clipboard()->text().isEmpty()); - QApplication::processEvents(); - QVERIFY(QApplication::clipboard()->text().isEmpty()); + QGuiApplication::clipboard()->clear(); + QVERIFY(QGuiApplication::clipboard()->text().isEmpty()); + QGuiApplication::processEvents(); + QVERIFY(QGuiApplication::clipboard()->text().isEmpty()); // setText() again - QApplication::clipboard()->setText(text); - QCOMPARE(QApplication::clipboard()->text(), text); - QApplication::processEvents(); - QCOMPARE(QApplication::clipboard()->text(), text); + QGuiApplication::clipboard()->setText(text); + QCOMPARE(QGuiApplication::clipboard()->text(), text); + QGuiApplication::processEvents(); + QCOMPARE(QGuiApplication::clipboard()->text(), text); // clear() immediately followed by setText() should still return the text - QApplication::clipboard()->clear(); - QVERIFY(QApplication::clipboard()->text().isEmpty()); - QApplication::clipboard()->setText(text); - QCOMPARE(QApplication::clipboard()->text(), text); - QApplication::processEvents(); - QCOMPARE(QApplication::clipboard()->text(), text); + QGuiApplication::clipboard()->clear(); + QVERIFY(QGuiApplication::clipboard()->text().isEmpty()); + QGuiApplication::clipboard()->setText(text); + QCOMPARE(QGuiApplication::clipboard()->text(), text); + QGuiApplication::processEvents(); + QCOMPARE(QGuiApplication::clipboard()->text(), text); } QTEST_MAIN(tst_QClipboard) diff --git a/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp b/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp index 8723c6614b..47ff1b05f1 100644 --- a/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp +++ b/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/gui/kernel/qevent/tst_qevent.cpp b/tests/auto/gui/kernel/qevent/tst_qevent.cpp index 7e39c11e2c..f0771330f7 100644 --- a/tests/auto/gui/kernel/qevent/tst_qevent.cpp +++ b/tests/auto/gui/kernel/qevent/tst_qevent.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp b/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp index 5d1a6a390f..0c0bff551b 100644 --- a/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp +++ b/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp b/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp index 00008a80f0..207356fe84 100644 --- a/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp +++ b/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -163,11 +163,11 @@ void tst_qfileopenevent::handleLifetime() qFile.close(); // check the content - QFile check("testHandleLifetime"); - check.open(QFile::ReadOnly); - QString content(check.readAll()); + QFile checkContent("testHandleLifetime"); + checkContent.open(QFile::ReadOnly); + QString content(checkContent.readAll()); QCOMPARE(content, QLatin1String("test content+closed original handles")); - check.close(); + checkContent.close(); QFile::remove(QLatin1String("testHandleLifetime")); } @@ -214,11 +214,11 @@ void tst_qfileopenevent::sendAndReceive() QCoreApplication::instance()->sendPostedEvents(); // check the content - QFile check("testSendAndReceive"); - QCOMPARE(check.open(QFile::ReadOnly), true); - QString content(check.readAll()); + QFile checkContent("testSendAndReceive"); + QCOMPARE(checkContent.open(QFile::ReadOnly), true); + QString content(checkContent.readAll()); QCOMPARE(content, QLatin1String("sending+received")); - check.close(); + checkContent.close(); QFile::remove(QLatin1String("testSendAndReceive")); } diff --git a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp index 98314a9336..d0f12ea945 100644 --- a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp +++ b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -56,6 +56,8 @@ private slots: void createCopy(); void sizeOf_data(); void sizeOf(); + void flags_data(); + void flags(); void construct_data(); void construct(); void constructCopy_data(); @@ -320,6 +322,30 @@ struct TypeAlignment #endif }; +void tst_QGuiMetaType::flags_data() +{ + QTest::addColumn<int>("type"); + QTest::addColumn<bool>("isMovable"); + QTest::addColumn<bool>("isComplex"); + +#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \ + QTest::newRow(#RealType) << MetaTypeId << bool(!QTypeInfo<RealType>::isStatic) << bool(QTypeInfo<RealType>::isComplex); +QT_FOR_EACH_STATIC_GUI_CLASS(ADD_METATYPE_TEST_ROW) +#undef ADD_METATYPE_TEST_ROW +} + +void tst_QGuiMetaType::flags() +{ + QFETCH(int, type); + QFETCH(bool, isMovable); + QFETCH(bool, isComplex); + + QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::NeedsConstruction), isComplex); + QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::NeedsDestruction), isComplex); + QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::MovableType), isMovable); +} + + void tst_QGuiMetaType::construct_data() { create_data(); diff --git a/tests/auto/gui/kernel/qguivariant/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/tst_qguivariant.cpp index 988580b874..56a1fb0d8f 100644 --- a/tests/auto/gui/kernel/qguivariant/tst_qguivariant.cpp +++ b/tests/auto/gui/kernel/qguivariant/tst_qguivariant.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp b/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp index 26bde8aa19..b46899a84d 100644 --- a/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp +++ b/tests/auto/gui/kernel/qinputpanel/tst_qinputpanel.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -54,6 +54,8 @@ public: m_updateCallCount(0), m_resetCallCount(0), m_commitCallCount(0), + m_localeCallCount(0), + m_inputDirectionCallCount(0), m_lastQueries(Qt::ImhNone), m_action(QInputPanel::Click), m_cursorPosition(0), @@ -91,12 +93,24 @@ public: { return m_visible; } + virtual QLocale locale() const + { + m_localeCallCount++; + return QLocale::c(); + } + virtual Qt::LayoutDirection inputDirection() const + { + m_inputDirectionCallCount++; + return Qt::LeftToRight; + } bool m_animating; bool m_visible; int m_updateCallCount; int m_resetCallCount; int m_commitCallCount; + mutable int m_localeCallCount; + mutable int m_inputDirectionCallCount; Qt::InputMethodQueries m_lastQueries; QInputPanel::Action m_action; int m_cursorPosition; @@ -144,6 +158,7 @@ private slots: void commit(); void update(); void query(); + void inputDirection(); private: InputItem m_inputItem; PlatformInputContext m_platformInputContext; @@ -312,5 +327,16 @@ void tst_qinputpanel::query() QCOMPARE(cursorRectangle, QRect(1,2,3,4)); } +void tst_qinputpanel::inputDirection() +{ + QCOMPARE(m_platformInputContext.m_inputDirectionCallCount, 0); + qApp->inputPanel()->inputDirection(); + QCOMPARE(m_platformInputContext.m_inputDirectionCallCount, 1); + + QCOMPARE(m_platformInputContext.m_localeCallCount, 0); + qApp->inputPanel()->locale(); + QCOMPARE(m_platformInputContext.m_localeCallCount, 1); +} + QTEST_MAIN(tst_qinputpanel) #include "tst_qinputpanel.moc" diff --git a/tests/auto/gui/kernel/qkeysequence/qt_de.qm b/tests/auto/gui/kernel/qkeysequence/qt_de.qm Binary files differindex 595e4d7e8f..c22b8f6c38 100644 --- a/tests/auto/gui/kernel/qkeysequence/qt_de.qm +++ b/tests/auto/gui/kernel/qkeysequence/qt_de.qm diff --git a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp index 6fbd77c54f..fcc30a7afe 100644 --- a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp +++ b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -122,8 +122,12 @@ private slots: void mnemonic(); void toString_data(); void toString(); + void toStringFromKeycode_data(); + void toStringFromKeycode(); void streamOperators_data(); void streamOperators(); + void parseString_data(); + void parseString(); void fromString_data(); void fromString(); void ensureSorted(); @@ -474,6 +478,24 @@ void tst_QKeySequence::toString() } +void tst_QKeySequence::toStringFromKeycode_data() +{ + QTest::addColumn<QKeySequence>("keycode"); + QTest::addColumn<QString>("expectedString"); + + QTest::newRow("A") << QKeySequence(Qt::Key_A) << "A"; + QTest::newRow("-1") << QKeySequence(-1) << ""; + QTest::newRow("Unknown") << QKeySequence(Qt::Key_unknown) << ""; +} + +void tst_QKeySequence::toStringFromKeycode() +{ + QFETCH(QKeySequence, keycode); + QFETCH(QString, expectedString); + + QCOMPARE(QKeySequence(keycode).toString(), expectedString); +} + void tst_QKeySequence::streamOperators_data() { operatorQString_data(); @@ -501,6 +523,34 @@ void tst_QKeySequence::streamOperators() QVERIFY( orgK != copyOrgK ); } + +void tst_QKeySequence::parseString_data() +{ + QTest::addColumn<QString>("strSequence"); + QTest::addColumn<QKeySequence>("keycode"); + + QTest::newRow("A") << "A" << QKeySequence(Qt::Key_A); + QTest::newRow("a") << "a" << QKeySequence(Qt::Key_A); + QTest::newRow("Ctrl+Left") << "Ctrl+Left" << QKeySequence(Qt::CTRL + Qt::Key_Left); + QTest::newRow("Ctrl++") << "Ctrl++" << QKeySequence(Qt::CTRL + Qt::Key_Plus); + QTest::newRow("Meta+A") << "Meta+a" << QKeySequence(Qt::META + Qt::Key_A); + QTest::newRow("Win+A") << "Win+a" << QKeySequence(Qt::Key_unknown); + QTest::newRow("4+3=2") << "4+3=2" << QKeySequence(Qt::Key_unknown); + QTest::newRow("Super+Meta+A") << "Super+Meta+A" << QKeySequence(Qt::Key_unknown); + QTest::newRow("Meta+Trolls") << "Meta+Trolls" << QKeySequence(Qt::Key_unknown); + QTest::newRow("Alabama") << "Alabama" << QKeySequence(Qt::Key_unknown); + QTest::newRow("Simon+G") << "Simon+G" << QKeySequence(Qt::Key_unknown); +} + +void tst_QKeySequence::parseString() +{ + QFETCH( QString, strSequence ); + QFETCH( QKeySequence, keycode ); + + QCOMPARE( QKeySequence(strSequence).toString(), keycode.toString() ); + QVERIFY( QKeySequence(strSequence) == keycode ); +} + void tst_QKeySequence::fromString_data() { toString_data(); @@ -512,6 +562,9 @@ void tst_QKeySequence::fromString() QFETCH(QString, neutralString); QFETCH(QString, platformString); + if (strSequence == "Ctrly") // Key_Unknown gives empty string + return; + QKeySequence ks1(strSequence); QKeySequence ks2 = QKeySequence::fromString(ks1.toString()); QKeySequence ks3 = QKeySequence::fromString(neutralString, QKeySequence::PortableText); diff --git a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp index 370338d24a..aca3ffc9cb 100644 --- a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp +++ b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -72,7 +72,7 @@ protected: mousePressButton = e->button(); mousePressButtons = e->buttons(); mousePressModifiers = e->modifiers(); - mousePressEventRecieved = TRUE; + mousePressEventRecieved = true; e->accept(); } void mouseReleaseEvent(QMouseEvent *e) @@ -81,7 +81,7 @@ protected: mouseReleaseButton = e->button(); mouseReleaseButtons = e->buttons(); mouseReleaseModifiers = e->modifiers(); - mouseReleaseEventRecieved = TRUE; + mouseReleaseEventRecieved = true; e->accept(); } }; @@ -134,8 +134,8 @@ void tst_QMouseEvent::cleanupTestCase() void tst_QMouseEvent::init() { - testMouseWidget->mousePressEventRecieved = FALSE; - testMouseWidget->mouseReleaseEventRecieved = FALSE; + testMouseWidget->mousePressEventRecieved = false; + testMouseWidget->mouseReleaseEventRecieved = false; testMouseWidget->mousePressButton = 0; testMouseWidget->mousePressButtons = 0; testMouseWidget->mousePressModifiers = 0; diff --git a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp index 4dc8b58366..ce006eaa99 100644 --- a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp +++ b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp b/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp index 053e6d0a7e..5474c4097d 100644 --- a/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp +++ b/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp b/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp index 1d00032b56..ab798a7351 100644 --- a/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp +++ b/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -52,6 +52,7 @@ private slots: void angleBetween(); void transformBetween_data(); void transformBetween(); + void orientationChange(); }; void tst_QScreen::angleBetween_data() @@ -163,5 +164,16 @@ void tst_QScreen::transformBetween() QCOMPARE(QScreen::transformBetween(a, b, rect), expected); } +void tst_QScreen::orientationChange() +{ + QScreen *screen = QGuiApplication::primaryScreen(); + + QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::LandscapeOrientation); + QTRY_COMPARE(screen->currentOrientation(), Qt::LandscapeOrientation); + + QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::PortraitOrientation); + QTRY_COMPARE(screen->currentOrientation(), Qt::PortraitOrientation); +} + #include <tst_qscreen.moc> QTEST_MAIN(tst_QScreen); diff --git a/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp b/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp index d3a087eefc..228b73414e 100644 --- a/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp +++ b/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -152,12 +152,12 @@ protected: }; QT_BEGIN_NAMESPACE -template<> struct QMetaTypeId<tst_QShortcut::Widget> -{ enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } }; -template<> struct QMetaTypeId<tst_QShortcut::Result> -{ enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } }; -template<> struct QMetaTypeId<tst_QShortcut::Action> -{ enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } }; +template<> struct QMetaTypeId<tst_QShortcut::Widget> : public QMetaTypeId<int> +{ static inline int qt_metatype_id() { return QMetaType::Int; } }; +template<> struct QMetaTypeId<tst_QShortcut::Result> : public QMetaTypeId<int> +{ static inline int qt_metatype_id() { return QMetaType::Int; } }; +template<> struct QMetaTypeId<tst_QShortcut::Action> : public QMetaTypeId<int> +{ static inline int qt_metatype_id() { return QMetaType::Int; } }; QT_END_NAMESPACE class TestEdit : public QTextEdit @@ -1254,10 +1254,8 @@ void tst_QShortcut::testElement() if (action == ClearAll) { clearAllShortcuts(); - QCOMPARE(TRUE, TRUE); } else if (action == SetupAccel) { setupShortcut(testWidget, txt, k1, k2, k3, k4); - QCOMPARE(TRUE, TRUE); } else { sendKeyEvents(k1, c1, k2, c2, k3, c3, k4, c4); QCOMPARE(int(currentResult), result); diff --git a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp index 07afe4a89c..95e644987f 100644 --- a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp +++ b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -209,6 +209,8 @@ private slots: void deleteInRawEventTranslation(); void crashInQGraphicsSceneAfterNotHandlingTouchBegin(); void touchBeginWithGraphicsWidget(); + void testQGuiAppDelivery(); + void testMultiDevice(); private: QTouchDevice *touchScreenDevice; @@ -597,10 +599,12 @@ void tst_QTouchEvent::basicRawEventTranslation() rawPosList << QPointF(12, 34) << QPointF(56, 78); rawTouchPoint.setRawScreenPositions(rawPosList); const ulong timestamp = 1234; - qt_translateRawTouchEvent(&touchWidget, - touchScreenDevice, - QList<QTouchEvent::TouchPoint>() << rawTouchPoint, - timestamp); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + timestamp, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList( + QList<QTouchEvent::TouchPoint>() << rawTouchPoint)); + QCoreApplication::processEvents(); QVERIFY(touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -632,10 +636,11 @@ void tst_QTouchEvent::basicRawEventTranslation() rawTouchPoint.setState(Qt::TouchPointMoved); rawTouchPoint.setScreenPos(screenPos + delta); rawTouchPoint.setNormalizedPos(normalized(rawTouchPoint.pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, - touchScreenDevice, - QList<QTouchEvent::TouchPoint>() << rawTouchPoint, - 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(QList<QTouchEvent::TouchPoint>() << rawTouchPoint)); + QCoreApplication::processEvents(); QVERIFY(touchWidget.seenTouchBegin); QVERIFY(touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -664,10 +669,11 @@ void tst_QTouchEvent::basicRawEventTranslation() rawTouchPoint.setState(Qt::TouchPointReleased); rawTouchPoint.setScreenPos(screenPos + delta + delta); rawTouchPoint.setNormalizedPos(normalized(rawTouchPoint.pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, - touchScreenDevice, - QList<QTouchEvent::TouchPoint>() << rawTouchPoint, - 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(QList<QTouchEvent::TouchPoint>() << rawTouchPoint)); + QCoreApplication::processEvents(); QVERIFY(touchWidget.seenTouchBegin); QVERIFY(touchWidget.seenTouchUpdate); QVERIFY(touchWidget.seenTouchEnd); @@ -731,7 +737,11 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen() rawTouchPoints[1].setState(Qt::TouchPointPressed); rawTouchPoints[1].setScreenPos(rightScreenPos); rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, touchScreenDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(!touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -792,7 +802,11 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen() rawTouchPoints[1].setState(Qt::TouchPointMoved); rawTouchPoints[1].setScreenPos(centerScreenPos); rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, touchScreenDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(!touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -853,7 +867,11 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen() rawTouchPoints[1].setState(Qt::TouchPointReleased); rawTouchPoints[1].setScreenPos(centerScreenPos); rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, touchScreenDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(!touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -946,7 +964,11 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad() rawTouchPoints[1].setState(Qt::TouchPointPressed); rawTouchPoints[1].setScreenPos(rightScreenPos); rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, touchPadDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchPadDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(!touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -1007,7 +1029,11 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad() rawTouchPoints[1].setState(Qt::TouchPointMoved); rawTouchPoints[1].setScreenPos(centerScreenPos); rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, touchPadDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchPadDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(!touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -1068,7 +1094,11 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad() rawTouchPoints[1].setState(Qt::TouchPointReleased); rawTouchPoints[1].setScreenPos(centerScreenPos); rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry)); - qt_translateRawTouchEvent(&touchWidget, touchPadDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchPadDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(!touchWidget.seenTouchBegin); QVERIFY(!touchWidget.seenTouchUpdate); QVERIFY(!touchWidget.seenTouchEnd); @@ -1326,20 +1356,32 @@ void tst_QTouchEvent::deleteInRawEventTranslation() rawTouchPoints[2].setNormalizedPos(normalized(rawTouchPoints[2].pos(), screenGeometry)); // generate begin events on all widgets, the left widget should die - qt_translateRawTouchEvent(&touchWidget, touchScreenDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); QVERIFY(pl.isNull() && !pc.isNull() && !pr.isNull()); // generate update events on all widget, the center widget should die rawTouchPoints[0].setState(Qt::TouchPointMoved); rawTouchPoints[1].setState(Qt::TouchPointMoved); rawTouchPoints[2].setState(Qt::TouchPointMoved); - qt_translateRawTouchEvent(&touchWidget, touchScreenDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); // generate end events on all widget, the right widget should die rawTouchPoints[0].setState(Qt::TouchPointReleased); rawTouchPoints[1].setState(Qt::TouchPointReleased); rawTouchPoints[2].setState(Qt::TouchPointReleased); - qt_translateRawTouchEvent(&touchWidget, touchScreenDevice, rawTouchPoints, 0); + QWindowSystemInterface::handleTouchEvent(touchWidget.windowHandle(), + 0, + touchScreenDevice, + QTest::QTouchEventSequence::touchPointList(rawTouchPoints)); + QCoreApplication::processEvents(); } void tst_QTouchEvent::crashInQGraphicsSceneAfterNotHandlingTouchBegin() @@ -1390,12 +1432,12 @@ void tst_QTouchEvent::touchBeginWithGraphicsWidget() QTest::qWaitForWindowShown(&view); view.fitInView(scene.sceneRect()); - QTest::touchEvent(static_cast<QWindow *>(0), touchScreenDevice) + QTest::touchEvent(&view, touchScreenDevice) .press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()); - QTest::touchEvent(static_cast<QWindow *>(0), touchScreenDevice) + QTest::touchEvent(&view, touchScreenDevice) .stationary(0) .press(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); - QTest::touchEvent(static_cast<QWindow *>(0), touchScreenDevice) + QTest::touchEvent(&view, touchScreenDevice) .release(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()) .release(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); @@ -1407,12 +1449,12 @@ void tst_QTouchEvent::touchBeginWithGraphicsWidget() root->reset(); glassWidget->setWindowFlags(Qt::Window); // make the glassWidget a panel - QTest::touchEvent(static_cast<QWindow *>(0), touchScreenDevice) + QTest::touchEvent(&view, touchScreenDevice) .press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()); - QTest::touchEvent(static_cast<QWindow *>(0), touchScreenDevice) + QTest::touchEvent(&view, touchScreenDevice) .stationary(0) .press(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); - QTest::touchEvent(static_cast<QWindow *>(0), touchScreenDevice) + QTest::touchEvent(&view, touchScreenDevice) .release(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport()) .release(1, view.mapFromScene(root->mapToScene(6,6)), view.viewport()); @@ -1425,6 +1467,143 @@ void tst_QTouchEvent::touchBeginWithGraphicsWidget() delete glassWidget; } +class WindowTouchEventFilter : public QObject +{ + Q_OBJECT +public: + bool eventFilter(QObject *obj, QEvent *event); + struct TouchInfo { + QList<QTouchEvent::TouchPoint> points; + QEvent::Type lastSeenType; + }; + QMap<QTouchDevice *, TouchInfo> d; +}; + +bool WindowTouchEventFilter::eventFilter(QObject *, QEvent *event) +{ + if (event->type() == QEvent::TouchBegin + || event->type() == QEvent::TouchUpdate + || event->type() == QEvent::TouchEnd) { + QTouchEvent *te = static_cast<QTouchEvent *>(event); + TouchInfo &td = d[te->device()]; + if (event->type() == QEvent::TouchBegin) + td.points.clear(); + td.points.append(te->touchPoints()); + td.lastSeenType = event->type(); + } + return false; +} + +void tst_QTouchEvent::testQGuiAppDelivery() +{ + QTouchDevice *device = new QTouchDevice; + device->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(device); + + QWindow *w = new QWindow; + w->setGeometry(100, 100, 100, 100); + w->show(); + QTest::qWaitForWindowShown(w); + + WindowTouchEventFilter filter; + w->installEventFilter(&filter); + + QList<QWindowSystemInterface::TouchPoint> points; + + // Pass empty list, should be ignored. + QWindowSystemInterface::handleTouchEvent(w, 0, points); + QCoreApplication::processEvents(); + QCOMPARE(filter.d.isEmpty(), true); + + QWindowSystemInterface::TouchPoint tp; + tp.id = 0; + tp.state = Qt::TouchPointPressed; + tp.area = QRectF(120, 120, 20, 20); + points.append(tp); + + // Pass 0 as device, should be ignored. + QWindowSystemInterface::handleTouchEvent(w, 0, points); + QCoreApplication::processEvents(); + QCOMPARE(filter.d.isEmpty(), true); + + // Now the real thing. + QWindowSystemInterface::handleTouchEvent(w, device, points); // TouchBegin + QCoreApplication::processEvents(); + QCOMPARE(filter.d.count(), 1); + QCOMPARE(filter.d.contains(device), true); + QCOMPARE(filter.d.value(device).points.count(), 1); + QCOMPARE(filter.d.value(device).lastSeenType, QEvent::TouchBegin); + + points[0].state = Qt::TouchPointMoved; + QWindowSystemInterface::handleTouchEvent(w, device, points); // TouchUpdate + QCoreApplication::processEvents(); + QCOMPARE(filter.d.count(), 1); + QCOMPARE(filter.d.contains(device), true); + QCOMPARE(filter.d.value(device).points.count(), 2); + QCOMPARE(filter.d.value(device).lastSeenType, QEvent::TouchUpdate); + + points[0].state = Qt::TouchPointReleased; + QWindowSystemInterface::handleTouchEvent(w, device, points); // TouchEnd + QCoreApplication::processEvents(); + QCOMPARE(filter.d.count(), 1); + QCOMPARE(filter.d.contains(device), true); + QCOMPARE(filter.d.value(device).points.count(), 3); + QCOMPARE(filter.d.value(device).lastSeenType, QEvent::TouchEnd); +} + +void tst_QTouchEvent::testMultiDevice() +{ + QTouchDevice *deviceOne = new QTouchDevice; + deviceOne->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(deviceOne); + QTouchDevice *deviceTwo = new QTouchDevice; + deviceTwo->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(deviceTwo); + + QWindow *w = new QWindow; + w->setGeometry(100, 100, 100, 100); + w->show(); + QTest::qWaitForWindowShown(w); + + WindowTouchEventFilter filter; + w->installEventFilter(&filter); + + QList<QWindowSystemInterface::TouchPoint> pointsOne, pointsTwo; + + // deviceOne reports a single point, deviceTwo reports the beginning of a multi-point sequence. + // Even though there is a point with id 0 for both devices, they should be delivered cleanly, independently. + QWindowSystemInterface::TouchPoint tp; + tp.id = 0; + tp.state = Qt::TouchPointPressed; + tp.area = QRectF(120, 120, 20, 20); + pointsOne.append(tp); + + pointsTwo.append(tp); + tp.id = 1; + tp.area = QRectF(140, 140, 20, 20); + pointsTwo.append(tp); + + QWindowSystemInterface::handleTouchEvent(w, deviceOne, pointsOne); + QWindowSystemInterface::handleTouchEvent(w, deviceTwo, pointsTwo); + QCoreApplication::processEvents(); + + QCOMPARE(filter.d.contains(deviceOne), true); + QCOMPARE(filter.d.contains(deviceTwo), true); + + QCOMPARE(filter.d.value(deviceOne).lastSeenType, QEvent::TouchBegin); + QCOMPARE(filter.d.value(deviceTwo).lastSeenType, QEvent::TouchBegin); + QCOMPARE(filter.d.value(deviceOne).points.count(), 1); + QCOMPARE(filter.d.value(deviceTwo).points.count(), 2); + + QCOMPARE(filter.d.value(deviceOne).points.at(0).screenRect(), pointsOne[0].area); + QCOMPARE(filter.d.value(deviceOne).points.at(0).state(), pointsOne[0].state); + + QCOMPARE(filter.d.value(deviceTwo).points.at(0).screenRect(), pointsTwo[0].area); + QCOMPARE(filter.d.value(deviceTwo).points.at(0).state(), pointsTwo[0].state); + QCOMPARE(filter.d.value(deviceTwo).points.at(1).screenRect(), pointsTwo[1].area); + QCOMPARE(filter.d.value(deviceTwo).points.at(1).state(), pointsTwo[1].state); +} + QTEST_MAIN(tst_QTouchEvent) #include "tst_qtouchevent.moc" diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 4171f0f797..77fffef13a 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -43,6 +43,8 @@ #include <QtTest/QtTest> +#include <QEvent> + class tst_QWindow: public QObject { Q_OBJECT @@ -51,6 +53,19 @@ private slots: void mapGlobal(); void positioning(); void isActive(); + void testInputEvents(); + void touchToMouseTranslation(); + void mouseToTouchTranslation(); + void mouseToTouchLoop(); + void initTestCase() + { + touchDevice = new QTouchDevice; + touchDevice->setType(QTouchDevice::TouchScreen); + QWindowSystemInterface::registerTouchDevice(touchDevice); + } + +private: + QTouchDevice *touchDevice; }; @@ -221,5 +236,224 @@ void tst_QWindow::isActive() QVERIFY(child.isActive()); } +class InputTestWindow : public QWindow +{ +public: + void keyPressEvent(QKeyEvent *event) { + keyPressCode = event->key(); + } + void keyReleaseEvent(QKeyEvent *event) { + keyReleaseCode = event->key(); + } + void mousePressEvent(QMouseEvent *event) { + if (ignoreMouse) + event->ignore(); + else + mousePressButton = event->button(); + } + void mouseReleaseEvent(QMouseEvent *event) { + if (ignoreMouse) + event->ignore(); + else + mouseReleaseButton = event->button(); + } + void touchEvent(QTouchEvent *event) { + if (ignoreTouch) { + event->ignore(); + return; + } + QList<QTouchEvent::TouchPoint> points = event->touchPoints(); + for (int i = 0; i < points.count(); ++i) { + switch (points.at(i).state()) { + case Qt::TouchPointPressed: + ++touchPressedCount; + break; + case Qt::TouchPointReleased: + ++touchReleasedCount; + break; + default: + break; + } + } + } + + InputTestWindow() { + keyPressCode = keyReleaseCode = 0; + mousePressButton = mouseReleaseButton = 0; + touchPressedCount = touchReleasedCount = 0; + ignoreMouse = ignoreTouch = 0; + } + + int keyPressCode, keyReleaseCode; + int mousePressButton, mouseReleaseButton; + int touchPressedCount, touchReleasedCount; + + bool ignoreMouse, ignoreTouch; +}; + +void tst_QWindow::testInputEvents() +{ + InputTestWindow window; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTest::qWaitForWindowShown(&window); + + QWindowSystemInterface::handleKeyEvent(&window, QEvent::KeyPress, Qt::Key_A, Qt::NoModifier); + QWindowSystemInterface::handleKeyEvent(&window, QEvent::KeyRelease, Qt::Key_A, Qt::NoModifier); + QCoreApplication::processEvents(); + QCOMPARE(window.keyPressCode, int(Qt::Key_A)); + QCOMPARE(window.keyReleaseCode, int(Qt::Key_A)); + + QPointF local(12, 34); + QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::NoButton); + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressButton, int(Qt::LeftButton)); + QCOMPARE(window.mouseReleaseButton, int(Qt::LeftButton)); + + QList<QWindowSystemInterface::TouchPoint> points; + QWindowSystemInterface::TouchPoint tp1, tp2; + tp1.id = 1; + tp1.state = Qt::TouchPointPressed; + tp1.area = QRect(10, 10, 4, 4); + tp2.id = 2; + tp2.state = Qt::TouchPointPressed; + tp2.area = QRect(20, 20, 4, 4); + points << tp1 << tp2; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + points[0].state = Qt::TouchPointReleased; + points[1].state = Qt::TouchPointReleased; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + QCoreApplication::processEvents(); + QTRY_COMPARE(window.touchPressedCount, 2); + QTRY_COMPARE(window.touchReleasedCount, 2); +} + +void tst_QWindow::touchToMouseTranslation() +{ + InputTestWindow window; + window.ignoreTouch = true; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTest::qWaitForWindowShown(&window); + + QList<QWindowSystemInterface::TouchPoint> points; + QWindowSystemInterface::TouchPoint tp1, tp2; + tp1.id = 1; + tp1.state = Qt::TouchPointPressed; + tp2.id = 2; + tp2.state = Qt::TouchPointPressed; + points << tp1 << tp2; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + points[0].state = Qt::TouchPointReleased; + points[1].state = Qt::TouchPointReleased; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + QCoreApplication::processEvents(); + + QTRY_COMPARE(window.mousePressButton, int(Qt::LeftButton)); + QTRY_COMPARE(window.mouseReleaseButton, int(Qt::LeftButton)); + + window.mousePressButton = 0; + window.mouseReleaseButton = 0; + + window.ignoreTouch = false; + + points[0].state = Qt::TouchPointPressed; + points[1].state = Qt::TouchPointPressed; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + points[0].state = Qt::TouchPointReleased; + points[1].state = Qt::TouchPointReleased; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + QCoreApplication::processEvents(); + + // no new mouse events should be generated since the input window handles the touch events + QTRY_COMPARE(window.mousePressButton, 0); + QTRY_COMPARE(window.mouseReleaseButton, 0); + + qApp->setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, false); + + window.ignoreTouch = true; + points[0].state = Qt::TouchPointPressed; + points[1].state = Qt::TouchPointPressed; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + points[0].state = Qt::TouchPointReleased; + points[1].state = Qt::TouchPointReleased; + QWindowSystemInterface::handleTouchEvent(&window, touchDevice, points); + QCoreApplication::processEvents(); + + qApp->setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, true); + + // mouse event synthesizing disabled + QTRY_COMPARE(window.mousePressButton, 0); + QTRY_COMPARE(window.mouseReleaseButton, 0); +} + +void tst_QWindow::mouseToTouchTranslation() +{ + qApp->setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, true); + + InputTestWindow window; + window.ignoreMouse = true; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTest::qWaitForWindowShown(&window); + + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton); + QCoreApplication::processEvents(); + + qApp->setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false); + + QTRY_COMPARE(window.touchPressedCount, 1); + QTRY_COMPARE(window.touchReleasedCount, 1); + + qApp->setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, true); + + window.ignoreMouse = false; + + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton); + QCoreApplication::processEvents(); + + qApp->setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false); + + // no new touch events should be generated since the input window handles the mouse events + QTRY_COMPARE(window.touchPressedCount, 1); + QTRY_COMPARE(window.touchReleasedCount, 1); + + window.ignoreMouse = true; + + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton); + QCoreApplication::processEvents(); + + // touch event synthesis disabled + QTRY_COMPARE(window.touchPressedCount, 1); + QTRY_COMPARE(window.touchReleasedCount, 1); + + +} + +void tst_QWindow::mouseToTouchLoop() +{ + // make sure there's no infinite loop when synthesizing both ways + qApp->setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, true); + qApp->setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, true); + + InputTestWindow window; + window.ignoreMouse = true; + window.ignoreTouch = true; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTest::qWaitForWindowShown(&window); + + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton); + QCoreApplication::processEvents(); + + qApp->setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false); + qApp->setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, false); +} + #include <tst_qwindow.moc> QTEST_MAIN(tst_QWindow); |