diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-03-27 16:19:29 +0200 |
---|---|---|
committer | Kent Hansen <kent.hansen@nokia.com> | 2012-03-27 19:22:48 +0200 |
commit | d236fe2214340164bec4f34cb27dea4a634ee0de (patch) | |
tree | cda4ebbcc91717b37e5a2dbccb9ee46c2a1d3885 /tests | |
parent | 2b17b0235b70f89d15d3b91a14c3297d38377f94 (diff) | |
parent | cbc883da6910b3357a4e03d0e2dfa841da1a03e8 (diff) |
Merge master into api_changes
Conflicts:
src/corelib/global/qisenum.h
src/dbus/qdbusconnection_p.h
src/widgets/kernel/qwidget.cpp
tests/auto/other/qaccessibility/tst_qaccessibility.cpp
Change-Id: I85102515d5fec835832cc20ffdc5c1ba578bd01d
Diffstat (limited to 'tests')
14 files changed, 415 insertions, 41 deletions
diff --git a/tests/auto/corelib/global/qflags/tst_qflags.cpp b/tests/auto/corelib/global/qflags/tst_qflags.cpp index 2794c174ba..7f67f3a612 100644 --- a/tests/auto/corelib/global/qflags/tst_qflags.cpp +++ b/tests/auto/corelib/global/qflags/tst_qflags.cpp @@ -106,7 +106,7 @@ void tst_QFlags::constExpr() switch (btn) { case Qt::LeftButton: QVERIFY(false); break; case Qt::RightButton: QVERIFY(false); break; - case Qt::LeftButton | Qt::RightButton: QVERIFY(true); break; + case int(Qt::LeftButton | Qt::RightButton): QVERIFY(true); break; default: QVERIFY(false); } diff --git a/tests/auto/corelib/thread/qthreadstorage/test/test.pro b/tests/auto/corelib/thread/qthreadstorage/test/test.pro index a7d8eb0106..cfbf5bf5a4 100644 --- a/tests/auto/corelib/thread/qthreadstorage/test/test.pro +++ b/tests/auto/corelib/thread/qthreadstorage/test/test.pro @@ -4,3 +4,7 @@ CONFIG -= app_bundle CONFIG += console QT = core testlib SOURCES = ../tst_qthreadstorage.cpp + +load(testcase) # for installTestHelperApp() +installTestHelperApp("../crashonexit/crashonexit",crashonexit,crashonexit) + diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 761d3ec928..7e12e42107 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -133,6 +133,8 @@ private slots: void weekendDays(); void listPatterns(); + void measurementSystems(); + private: QString m_decimal, m_thousand, m_sdate, m_ldate, m_time; QString m_sysapp; @@ -2034,5 +2036,20 @@ void tst_QLocale::listPatterns() QCOMPARE(zh_CN.createSeparatedList(sl5), QString::fromUtf8("aaa" "\xe3\x80\x81" "bbb" "\xe3\x80\x81" "ccc" "\xe5\x92\x8c" "ddd")); } +void tst_QLocale::measurementSystems() +{ + QLocale locale(QLocale::English, QLocale::UnitedStates); + QCOMPARE(locale.measurementSystem(), QLocale::ImperialUSSystem); + + locale = QLocale(QLocale::English, QLocale::UnitedKingdom); + QCOMPARE(locale.measurementSystem(), QLocale::ImperialUKSystem); + + locale = QLocale(QLocale::English, QLocale::Australia); + QCOMPARE(locale.measurementSystem(), QLocale::MetricSystem); + + locale = QLocale(QLocale::German); + QCOMPARE(locale.measurementSystem(), QLocale::MetricSystem); +} + QTEST_MAIN(tst_QLocale) #include "tst_qlocale.moc" diff --git a/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp b/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp index 5470de76ee..4e1fba5fcb 100644 --- a/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp +++ b/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp @@ -137,12 +137,10 @@ void tst_QRegExp::indexIn_data() << QStringList(); QTest::newRow(qPrintable(stri + "anc09")) << QString("a(?:(?!)|b)z") << QString("abz") << 0 << 3 << QStringList(); -#if 0 - QTest::newRow(qPrintable(stri + "anc10")) << QString("a?(?=^b$)") << QString("ab") << 0 << 1 + QTest::newRow(qPrintable(stri + "anc10")) << QString("a?(?=^b$)") << QString("ab") << -1 << -1 << QStringList(); QTest::newRow(qPrintable(stri + "anc11")) << QString("a?(?=^b$)") << QString("b") << 0 << 0 << QStringList(); -#endif // back-references QTest::newRow(qPrintable(stri + "bref00")) << QString("(a*)(\\1)") << QString("aaaaa") << 0 << 4 @@ -573,6 +571,7 @@ void tst_QRegExp::indexIn() int mylen = rx.matchedLength(); QStringList mycaps = rx.capturedTexts(); + QEXPECT_FAIL("anc11", "QRegExp has bugs with anchors inside lookaheads", Abort); QCOMPARE( mypos, pos ); QCOMPARE( mylen, len ); if ( caps.size() > 1 && caps[1] != "IGNORE ME" ) { @@ -626,6 +625,7 @@ void tst_QRegExp::lastIndexIn() QStringList mycaps = rx.capturedTexts(); if ( mypos <= pos || pos == -1 ) { + QEXPECT_FAIL("anc11", "QRegExp has bugs with anchors inside lookaheads", Abort); QCOMPARE( mypos, pos ); QCOMPARE( mylen, len ); diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 0c009ec155..1dc2e551b4 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -55,6 +55,7 @@ private slots: void topLevelWindows(); void abortQuitOnShow(); void changeFocusWindow(); + void keyboardModifiers(); }; class DummyWindow : public QWindow @@ -239,6 +240,80 @@ void tst_QGuiApplication::changeFocusWindow() QCOMPARE(window1.windowDuringFocusOut, &window2); } +void tst_QGuiApplication::keyboardModifiers() +{ + int argc = 0; + QGuiApplication app(argc, 0); + + QWindow *window = new QWindow; + window->show(); + QTest::qWaitForWindowShown(window); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + + // mouse events + QPoint center = window->geometry().center(); + QTest::mouseEvent(QTest::MousePress, window, Qt::LeftButton, Qt::NoModifier, center); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + QTest::mouseEvent(QTest::MouseRelease, window, Qt::LeftButton, Qt::NoModifier, center); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + QTest::mouseEvent(QTest::MousePress, window, Qt::RightButton, Qt::ControlModifier, center); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + QTest::mouseEvent(QTest::MouseRelease, window, Qt::RightButton, Qt::ControlModifier, center); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + + // shortcut events + QWindowSystemInterface::tryHandleSynchronousShortcutEvent(window, Qt::Key_5, Qt::MetaModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::MetaModifier); + QWindowSystemInterface::tryHandleSynchronousShortcutEvent(window, Qt::Key_Period, Qt::NoModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + QWindowSystemInterface::tryHandleSynchronousShortcutEvent(window, Qt::Key_0, Qt::ControlModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + + // key events + QTest::keyEvent(QTest::Press, window, Qt::Key_C); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + QTest::keyEvent(QTest::Release, window, Qt::Key_C); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + + QTest::keyEvent(QTest::Press, window, Qt::Key_U, Qt::ControlModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + QTest::keyEvent(QTest::Release, window, Qt::Key_U, Qt::ControlModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + + QTest::keyEvent(QTest::Press, window, Qt::Key_T); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + QTest::keyEvent(QTest::Release, window, Qt::Key_T); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + + QTest::keyEvent(QTest::Press, window, Qt::Key_E, Qt::ControlModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + QTest::keyEvent(QTest::Release, window, Qt::Key_E, Qt::ControlModifier); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + + // wheel events + QPoint global = window->mapToGlobal(center); + QPoint delta(0, 1); + QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::NoModifier); + QWindowSystemInterface::sendWindowSystemEvents(app.eventDispatcher(), QEventLoop::AllEvents); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::AltModifier); + QWindowSystemInterface::sendWindowSystemEvents(app.eventDispatcher(), QEventLoop::AllEvents); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::AltModifier); + QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::ControlModifier); + QWindowSystemInterface::sendWindowSystemEvents(app.eventDispatcher(), QEventLoop::AllEvents); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier); + + // touch events + QList<const QTouchDevice *> touchDevices = QTouchDevice::devices(); + if (!touchDevices.isEmpty()) { + QTouchDevice *touchDevice = const_cast<QTouchDevice *>(touchDevices.first()); + QTest::touchEvent(window, touchDevice).press(1, center).release(1, center); + QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier); + } + + window->close(); + delete window; +} QTEST_APPLESS_MAIN(tst_QGuiApplication) #include "tst_qguiapplication.moc" diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index ebd8823149..df58d8340b 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -44,6 +44,7 @@ #include <QtTest/QtTest> #include <QEvent> +#include <QStyleHints> // For QSignalSpy slot connections. Q_DECLARE_METATYPE(Qt::ScreenOrientation) @@ -67,6 +68,7 @@ private slots: void orientation(); void close(); void activateAndClose(); + void mouseEventSequence(); void initTestCase() { @@ -304,15 +306,20 @@ public: if (ignoreMouse) { event->ignore(); } else { + ++mousePressedCount; + mouseSequenceSignature += 'p'; mousePressButton = event->button(); mousePressScreenPos = event->screenPos(); } } void mouseReleaseEvent(QMouseEvent *event) { - if (ignoreMouse) + if (ignoreMouse) { event->ignore(); - else + } else { + ++mouseReleasedCount; + mouseSequenceSignature += 'r'; mouseReleaseButton = event->button(); + } } void mouseMoveEvent(QMouseEvent *event) { if (ignoreMouse) { @@ -322,6 +329,14 @@ public: mouseMoveScreenPos = event->screenPos(); } } + void mouseDoubleClickEvent(QMouseEvent *event) { + if (ignoreMouse) { + event->ignore(); + } else { + ++mouseDoubleClickedCount; + mouseSequenceSignature += 'd'; + } + } void touchEvent(QTouchEvent *event) { if (ignoreTouch) { event->ignore(); @@ -345,16 +360,23 @@ public: } } } + void resetCounters() { + mousePressedCount = mouseReleasedCount = mouseDoubleClickedCount = 0; + mouseSequenceSignature = QString(); + touchPressedCount = touchReleasedCount = touchMovedCount = 0; + } InputTestWindow() { keyPressCode = keyReleaseCode = 0; - mousePressButton = mouseReleaseButton = 0; - touchPressedCount = touchReleasedCount = touchMovedCount = 0; + mousePressButton = mouseReleaseButton = mouseMoveButton = 0; ignoreMouse = ignoreTouch = false; + resetCounters(); } int keyPressCode, keyReleaseCode; int mousePressButton, mouseReleaseButton, mouseMoveButton; + int mousePressedCount, mouseReleasedCount, mouseDoubleClickedCount; + QString mouseSequenceSignature; QPointF mousePressScreenPos, mouseMoveScreenPos; int touchPressedCount, touchReleasedCount, touchMovedCount; QEvent::Type touchEventType; @@ -691,5 +713,96 @@ void tst_QWindow::activateAndClose() } } +void tst_QWindow::mouseEventSequence() +{ + int doubleClickInterval = qGuiApp->styleHints()->mouseDoubleClickInterval(); + + InputTestWindow window; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTest::qWaitForWindowShown(&window); + + ulong timestamp = 0; + QPointF local(12, 34); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressedCount, 1); + QCOMPARE(window.mouseReleasedCount, 1); + QCOMPARE(window.mouseDoubleClickedCount, 0); + QCOMPARE(window.mouseSequenceSignature, QLatin1String("pr")); + + window.resetCounters(); + timestamp += doubleClickInterval; + + // A double click must result in press, release, press, doubleclick, release. + // Check that no unexpected event suppression occurs and that the order is correct. + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressedCount, 2); + QCOMPARE(window.mouseReleasedCount, 2); + QCOMPARE(window.mouseDoubleClickedCount, 1); + QCOMPARE(window.mouseSequenceSignature, QLatin1String("prpdr")); + + timestamp += doubleClickInterval; + window.resetCounters(); + + // Triple click = double + single click + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressedCount, 3); + QCOMPARE(window.mouseReleasedCount, 3); + QCOMPARE(window.mouseDoubleClickedCount, 1); + QCOMPARE(window.mouseSequenceSignature, QLatin1String("prpdrpr")); + + timestamp += doubleClickInterval; + window.resetCounters(); + + // Two double clicks. + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressedCount, 4); + QCOMPARE(window.mouseReleasedCount, 4); + QCOMPARE(window.mouseDoubleClickedCount, 2); + QCOMPARE(window.mouseSequenceSignature, QLatin1String("prpdrprpdr")); + + timestamp += doubleClickInterval; + window.resetCounters(); + + // Four clicks, none of which qualifies as a double click. + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + timestamp += doubleClickInterval; + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + timestamp += doubleClickInterval; + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + timestamp += doubleClickInterval; + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton); + QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton); + timestamp += doubleClickInterval; + QCoreApplication::processEvents(); + QCOMPARE(window.mousePressedCount, 4); + QCOMPARE(window.mouseReleasedCount, 4); + QCOMPARE(window.mouseDoubleClickedCount, 0); + QCOMPARE(window.mouseSequenceSignature, QLatin1String("prprprpr")); +} + #include <tst_qwindow.moc> -QTEST_MAIN(tst_QWindow); +QTEST_MAIN(tst_QWindow) diff --git a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp index 0ad37c21e8..618587356b 100644 --- a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp +++ b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp @@ -57,12 +57,11 @@ private slots: void cleanup(); void openUrl(); void handlers(); + void testDataLocation(); }; tst_qdesktopservices::tst_qdesktopservices() { - QCoreApplication::setOrganizationName("Nokia"); - QCoreApplication::setApplicationName("tst_qdesktopservices"); } tst_qdesktopservices::~tst_qdesktopservices() @@ -117,5 +116,37 @@ void tst_qdesktopservices::handlers() QCOMPARE(barHandler.lastHandledUrl.toString(), barUrl.toString()); } +#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +#define Q_XDG_PLATFORM +#endif + +void tst_qdesktopservices::testDataLocation() +{ + // This is the one point where QDesktopServices and QStandardPaths differ. + // QDesktopServices on unix returns "data"/orgname/appname for DataLocation, for Qt4 compat. + // And the appname in qt4 defaulted to empty, not to argv[0]. + { + const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); + const QString app = QDesktopServices::storageLocation(QDesktopServices::DataLocation); +#ifdef Q_XDG_PLATFORM + QCOMPARE(app, base + "/data//"); // as ugly as in Qt4 +#else + QCOMPARE(app, base); +#endif + } + QCoreApplication::instance()->setOrganizationName("Qt"); + QCoreApplication::instance()->setApplicationName("QtTest"); + { + const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); + const QString app = QDesktopServices::storageLocation(QDesktopServices::DataLocation); +#ifdef Q_XDG_PLATFORM + QCOMPARE(app, base + "/data/Qt/QtTest"); +#else + QCOMPARE(app, base + "/Qt/QtTest"); +#endif + } +} + QTEST_MAIN(tst_qdesktopservices) + #include "tst_qdesktopservices.moc" diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp index ba05579817..262d185bd1 100644 --- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp @@ -252,6 +252,7 @@ private slots: void mdiAreaTest(); void mdiSubWindowTest(); void lineEditTest(); + void groupBoxTest(); void dialogButtonBoxTest(); void dialTest(); void rubberBandTest(); @@ -775,6 +776,7 @@ void tst_QAccessibility::applicationTest() void tst_QAccessibility::mainWindowTest() { + { QMainWindow *mw = new QMainWindow; mw->resize(300, 200); mw->show(); // triggers layout @@ -785,12 +787,51 @@ void tst_QAccessibility::mainWindowTest() QAccessibleEvent show(mw, QAccessible::ObjectShow); QVERIFY_EVENT(&show); - QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(mw); - QCOMPARE(interface->text(QAccessible::Name), name); - QCOMPARE(interface->role(), QAccessible::Window); - delete interface; + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(mw); + QCOMPARE(iface->text(QAccessible::Name), name); + QCOMPARE(iface->role(), QAccessible::Window); + QVERIFY(iface->state().active); + + QAccessible::State activeState; + activeState.active = true; + QAccessibleStateChangeEvent active(mw, activeState); + QVERIFY_EVENT(&active); + + delete iface; delete mw; + } QTestAccessibility::clearEvents(); + + { + QWindow window; + window.setGeometry(80, 80, 40, 40); + window.show(); + QTRY_VERIFY(QGuiApplication::focusWindow() == &window); + +// We currently don't have an accessible interface for QWindow +// the active state is either in the QMainWindow or QQuickView +// QAIPtr windowIface(QAccessible::queryAccessibleInterface(&window)); +// QVERIFY(windowIface->state().active); + + QAccessible::State activeState; + activeState.active = true; + QAccessibleStateChangeEvent active(&window, activeState); + QVERIFY_EVENT(&active); + + QWindow child; + child.setParent(&window); + child.setGeometry(10, 10, 20, 20); + child.show(); + + child.requestActivateWindow(); + QTRY_VERIFY(QGuiApplication::focusWindow() == &child); + + QAccessibleStateChangeEvent deactivate(&window, activeState); + QVERIFY_EVENT(&deactivate); // deactivation of parent + + QAccessibleStateChangeEvent activeChild(&child, activeState); + QVERIFY_EVENT(&activeChild); + } } class CounterButton : public QPushButton { @@ -1526,9 +1567,9 @@ void tst_QAccessibility::textEditTest() QCOMPARE(endOffset, 30); QCOMPARE(iface->textInterface()->characterCount(), 31); QFontMetrics fm(edit.font()); - QCOMPARE(iface->textInterface()->characterRect(0, QAccessible2::RelativeToParent).size(), QSize(fm.width("h"), fm.height())); - QCOMPARE(iface->textInterface()->characterRect(5, QAccessible2::RelativeToParent).size(), QSize(fm.width(" "), fm.height())); - QCOMPARE(iface->textInterface()->characterRect(6, QAccessible2::RelativeToParent).size(), QSize(fm.width("w"), fm.height())); + QCOMPARE(iface->textInterface()->characterRect(0).size(), QSize(fm.width("h"), fm.height())); + QCOMPARE(iface->textInterface()->characterRect(5).size(), QSize(fm.width(" "), fm.height())); + QCOMPARE(iface->textInterface()->characterRect(6).size(), QSize(fm.width("w"), fm.height())); iface->editableTextInterface()->copyText(6, 11); QCOMPARE(QApplication::clipboard()->text(), QLatin1String("world")); @@ -1879,20 +1920,113 @@ void tst_QAccessibility::lineEditTest() QAccessibleTextUpdateEvent update(lineEdit, 0, "foo", "bar"); QVERIFY(QTestAccessibility::containsEvent(&update)); -// QTestEventList keys; -// keys.addKeyClick('D'); -// keys.addKeyClick('E'); -// keys.addKeyClick(Qt::Key_Left); -// keys.addKeyClick(Qt::Key_Left); -// keys.addKeyClick('C'); -// keys.addKeyClick('O'); -// keys.simulate(lineEdit); -// FIXME: Test key press events... + // FIXME check what extra events are around and get rid of them + QTestAccessibility::clearEvents(); + + QTestEventList keys; + keys.addKeyClick('D'); + keys.simulate(lineEdit); + + QAccessibleTextInsertEvent insertD(lineEdit, 3, "D"); + QVERIFY_EVENT(&insertD); + keys.clear(); + keys.addKeyClick('E'); + keys.simulate(lineEdit); + + QAccessibleTextInsertEvent insertE(lineEdit, 4, "E"); + QVERIFY(QTestAccessibility::containsEvent(&insertE)); + keys.clear(); + keys.addKeyClick(Qt::Key_Left); + keys.addKeyClick(Qt::Key_Left); + keys.simulate(lineEdit); + cursorEvent.setCursorPosition(4); + QVERIFY(QTestAccessibility::containsEvent(&cursorEvent)); + cursorEvent.setCursorPosition(3); + QVERIFY(QTestAccessibility::containsEvent(&cursorEvent)); + + keys.clear(); + keys.addKeyClick('C'); + keys.simulate(lineEdit); + + QAccessibleTextInsertEvent insertC(lineEdit, 3, "C"); + QVERIFY(QTestAccessibility::containsEvent(&insertC)); + + keys.clear(); + keys.addKeyClick('O'); + keys.simulate(lineEdit); + QAccessibleTextInsertEvent insertO(lineEdit, 4, "O"); + QVERIFY(QTestAccessibility::containsEvent(&insertO)); } delete toplevel; QTestAccessibility::clearEvents(); } +void tst_QAccessibility::groupBoxTest() +{ + { + QGroupBox *groupBox = new QGroupBox(); + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(groupBox); + + groupBox->setTitle(QLatin1String("Test QGroupBox")); + + QAccessibleEvent ev(groupBox, QAccessible::NameChanged); + QVERIFY_EVENT(&ev); + + groupBox->setToolTip(QLatin1String("This group box will be used to test accessibility")); + QVBoxLayout *layout = new QVBoxLayout(); + QRadioButton *rbutton = new QRadioButton(); + layout->addWidget(rbutton); + groupBox->setLayout(layout); + QAccessibleInterface *rButtonIface = QAccessible::queryAccessibleInterface(rbutton); + + QCOMPARE(iface->childCount(), 1); + QCOMPARE(iface->role(), QAccessible::Grouping); + QCOMPARE(iface->text(QAccessible::Name), QLatin1String("Test QGroupBox")); + QCOMPARE(iface->text(QAccessible::Description), QLatin1String("This group box will be used to test accessibility")); + QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > relations = rButtonIface->relations(); + QVERIFY(relations.size() == 1); + QPair<QAccessibleInterface*, QAccessible::Relation> relation = relations.first(); + QCOMPARE(relation.first->object(), groupBox); + QCOMPARE(relation.second, QAccessible::Label); + + delete relation.first; + + delete rButtonIface; + delete iface; + delete groupBox; + } + + { + QGroupBox *groupBox = new QGroupBox(); + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(groupBox); + QVERIFY(!iface->state().checkable); + groupBox->setCheckable(true); + + groupBox->setChecked(false); + QAccessible::State st; + st.checked = true; + QAccessibleStateChangeEvent ev(groupBox, st); + QVERIFY_EVENT(&ev); + + QCOMPARE(iface->role(), QAccessible::CheckBox); + QAccessibleActionInterface *actionIface = iface->actionInterface(); + QVERIFY(actionIface); + QAccessible::State state = iface->state(); + QVERIFY(state.checkable); + QVERIFY(!state.checked); + QVERIFY(actionIface->actionNames().contains(QAccessibleActionInterface::checkAction())); + actionIface->doAction(QAccessibleActionInterface::checkAction()); + QVERIFY(groupBox->isChecked()); + state = iface->state(); + QVERIFY(state.checked); + QAccessibleStateChangeEvent ev2(groupBox, st); + QVERIFY_EVENT(&ev2); + + delete iface; + delete groupBox; + } +} + bool accessibleInterfaceLeftOf(const QAccessibleInterface *a1, const QAccessibleInterface *a2) { return a1->rect().x() < a2->rect().x(); @@ -2733,7 +2867,8 @@ void tst_QAccessibility::labelTest() QCOMPARE(imageInterface->imageSize(), testPixmap.size()); QCOMPARE(imageInterface->imageDescription(), QString::fromLatin1("Test Description")); - QCOMPARE(imageInterface->imagePosition(QAccessible2::RelativeToParent), imageLabel.geometry()); + const QPoint labelPos = imageLabel.mapToGlobal(QPoint(0,0)); + QCOMPARE(imageInterface->imagePosition().topLeft(), labelPos); delete acc_label; diff --git a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp index 2323dc8df3..48d38a8146 100644 --- a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp +++ b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp @@ -275,7 +275,7 @@ void tst_QPrinterInfo::testForPrinters() # endif QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters(); - QCOMPARE(printers.size(), sysPrinters.size()); +// QCOMPARE(printers.size(), sysPrinters.size()); QHash<QString, bool> qtPrinters; diff --git a/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp b/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp index 66f6cd2999..2432548039 100644 --- a/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp +++ b/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp @@ -101,7 +101,7 @@ private: int threadFinishedCount; }; -static QBasicAtomicInt counter; +static QAtomicInt counter; class QtTestSqlThread : public QThread { diff --git a/tests/auto/widgets/dialogs/qdialog/qdialog.pro b/tests/auto/widgets/dialogs/qdialog/qdialog.pro index 2c4d10dd0b..779c10ed66 100644 --- a/tests/auto/widgets/dialogs/qdialog/qdialog.pro +++ b/tests/auto/widgets/dialogs/qdialog/qdialog.pro @@ -2,3 +2,4 @@ CONFIG += testcase TARGET = tst_qdialog QT += widgets testlib SOURCES += tst_qdialog.cpp +mac:CONFIG += insignificant_test # QTBUG-24977 diff --git a/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp b/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp index 1f717727b0..9a09af0282 100644 --- a/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp +++ b/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp @@ -42,7 +42,7 @@ #include <QtTest/QtTest> -#include <qcoreapplication.h> +#include <qguiapplication.h> #include <qdebug.h> #include <qsystemtrayicon.h> #include <qmenu.h> @@ -125,7 +125,10 @@ void tst_QSystemTrayIcon::supportsMessages() #elif defined(Q_OS_WIN) && !defined(Q_OS_WINCE) QCOMPARE(QSystemTrayIcon::supportsMessages(), true); #else - QEXPECT_FAIL("", "QTBUG-20978 QSystemTrayIcon is unimplemented for qpa", Abort); + const QString platform = QGuiApplication::platformName(); + if (platform.compare(QStringLiteral("xcb"), Qt::CaseInsensitive)) { + QEXPECT_FAIL("", "QTBUG-20978 QSystemTrayIcon is unimplemented for qpa", Abort); + } QCOMPARE(QSystemTrayIcon::supportsMessages(), true); #endif } diff --git a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp index 7e7b049166..43c0022c25 100644 --- a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp +++ b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp @@ -764,9 +764,6 @@ void tst_QDockWidget::task169808_setFloating() qt_x11_wait_for_window_manager(&mw); #endif -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "Window handling: QTBUG-24774", Abort); -#endif QCOMPARE(dw->widget()->size(), dw->widget()->sizeHint()); //and now we try to test if the contents margin is taken into account diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index f67f7ce1e8..a6860006c2 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -49,6 +49,7 @@ #include "qcompleter.h" #include "qstandarditemmodel.h" #include "qplatformtheme_qpa.h" +#include "qstylehints.h" #include <private/qguiapplication_p.h> #ifndef QT_NO_CLIPBOARD @@ -174,10 +175,7 @@ private slots: void displayText_data(); void displayText(); void passwordEchoOnEdit(); - -#ifdef QT_GUI_PASSWORD_ECHO_DELAY void passwordEchoDelay(); -#endif void maxLength_mask_data(); void maxLength_mask(); @@ -1664,9 +1662,10 @@ void tst_QLineEdit::passwordEchoOnEdit() testWidget->setEchoMode(QLineEdit::Normal); } -#ifdef QT_GUI_PASSWORD_ECHO_DELAY void tst_QLineEdit::passwordEchoDelay() { + if (qGuiApp->styleHints()->passwordMaskDelay() <= 0) + QSKIP("No mask delay in use"); QStyleOptionFrameV2 opt; QChar fillChar = testWidget->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter, &opt, testWidget); @@ -1686,7 +1685,7 @@ void tst_QLineEdit::passwordEchoDelay() QCOMPARE(testWidget->displayText(), QString(4, fillChar)); QTest::keyPress(testWidget, '4'); QCOMPARE(testWidget->displayText(), QString(4, fillChar) + QLatin1Char('4')); - QTest::qWait(QT_GUI_PASSWORD_ECHO_DELAY); + QTest::qWait(qGuiApp->styleHints()->passwordMaskDelay()); QTRY_COMPARE(testWidget->displayText(), QString(5, fillChar)); QTest::keyPress(testWidget, '5'); QCOMPARE(testWidget->displayText(), QString(5, fillChar) + QLatin1Char('5')); @@ -1714,7 +1713,6 @@ void tst_QLineEdit::passwordEchoDelay() // restore clean state testWidget->setEchoMode(QLineEdit::Normal); } -#endif void tst_QLineEdit::maxLength_mask_data() { |