summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/corelib/global/qflags/tst_qflags.cpp2
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/test/test.pro4
-rw-r--r--tests/auto/corelib/tools/qlocale/tst_qlocale.cpp17
-rw-r--r--tests/auto/corelib/tools/qregexp/tst_qregexp.cpp6
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp75
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp123
-rw-r--r--tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp35
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp169
-rw-r--r--tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp2
-rw-r--r--tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp2
-rw-r--r--tests/auto/widgets/dialogs/qdialog/qdialog.pro1
-rw-r--r--tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp7
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp3
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp10
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()
{