summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp34
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp39
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp65
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp6
5 files changed, 101 insertions, 44 deletions
diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
index 96970421d3..f1327933c4 100644
--- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
+++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
@@ -72,6 +72,7 @@ public slots:
private slots:
void transactionalWrite();
+ void retryTransactionalWrite();
void textStreamManualFlush();
void textStreamAutoFlush();
void saveTwice();
@@ -129,6 +130,39 @@ void tst_QSaveFile::transactionalWrite()
QCOMPARE(QFile::permissions(targetFile), QFile::permissions(otherFile));
}
+// QTBUG-77007: Simulate the case of an application with a loop prompting
+// to retry saving on failure. Create a read-only file first (Unix only)
+void tst_QSaveFile::retryTransactionalWrite()
+{
+#ifndef Q_OS_UNIX
+ QSKIP("This test is Unix only");
+#endif
+ QTemporaryDir dir;
+ QVERIFY2(dir.isValid(), qPrintable(dir.errorString()));
+
+ QString targetFile = dir.path() + QLatin1String("/outfile");
+ const QString readOnlyName = targetFile + QLatin1String(".ro");
+ {
+ QFile readOnlyFile(readOnlyName);
+ QVERIFY2(readOnlyFile.open(QIODevice::WriteOnly), msgCannotOpen(readOnlyFile).constData());
+ readOnlyFile.write("Hello");
+ readOnlyFile.close();
+ auto permissions = readOnlyFile.permissions();
+ permissions &= ~(QFileDevice::WriteOwner | QFileDevice::WriteGroup | QFileDevice::WriteUser);
+ QVERIFY(readOnlyFile.setPermissions(permissions));
+ }
+
+ QSaveFile file(readOnlyName);
+ QVERIFY(!file.open(QIODevice::WriteOnly));
+
+ file.setFileName(targetFile);
+ QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData());
+ QVERIFY(file.isOpen());
+ QCOMPARE(file.write("Hello"), Q_INT64_C(5));
+ QCOMPARE(file.error(), QFile::NoError);
+ QVERIFY(file.commit());
+}
+
void tst_QSaveFile::saveTwice()
{
// Check that we can reuse a QSaveFile object
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index 7733b0a62b..75b9b23259 100644
--- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
@@ -164,9 +164,8 @@ private slots:
void waitForReadyReadInASlot();
void remoteCloseError();
void nestedEventLoopInErrorSlot();
-#ifndef Q_OS_WIN
- void connectToLocalHostNoService();
-#endif
+ void connectToHostError_data();
+ void connectToHostError();
void waitForConnectedInHostLookupSlot();
void waitForConnectedInHostLookupSlot2();
void readyReadSignalsAfterWaitForReadyRead();
@@ -2066,18 +2065,38 @@ void tst_QTcpSocket::nestedEventLoopInErrorSlot()
}
//----------------------------------------------------------------------------------
-#ifndef Q_OS_WIN
-void tst_QTcpSocket::connectToLocalHostNoService()
+
+void tst_QTcpSocket::connectToHostError_data()
+{
+ QTest::addColumn<QString>("host");
+ QTest::addColumn<int>("port");
+ QTest::addColumn<QAbstractSocket::SocketError>("expectedError");
+
+ QTest::newRow("localhost no service") << QStringLiteral("localhost") << 31415 << QAbstractSocket::ConnectionRefusedError;
+ QTest::newRow("unreachable") << QStringLiteral("0.0.0.1") << 65000 << QAbstractSocket::NetworkError;
+}
+
+
+void tst_QTcpSocket::connectToHostError()
{
- // This test was created after we received a report that claimed
- // QTcpSocket would crash if trying to connect to "localhost" on a random
- // port with no service listening.
QTcpSocket *socket = newSocket();
- socket->connectToHost("localhost", 31415); // no service running here, one suspects
+
+ QAbstractSocket::SocketError error = QAbstractSocket::UnknownSocketError;
+
+ QFETCH(QString, host);
+ QFETCH(int, port);
+ QFETCH(QAbstractSocket::SocketError, expectedError);
+
+ connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),[&](QAbstractSocket::SocketError socketError){
+ error = socketError;
+ });
+ socket->connectToHost(host, port); // no service running here, one suspects
QTRY_COMPARE(socket->state(), QTcpSocket::UnconnectedState);
+ if (error != expectedError && error == QAbstractSocket::ConnectionRefusedError)
+ QEXPECT_FAIL("unreachable", "CI firewall interfers with this test", Continue);
+ QCOMPARE(error, expectedError);
delete socket;
}
-#endif
//----------------------------------------------------------------------------------
void tst_QTcpSocket::waitForConnectedInHostLookupSlot()
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 4035dfbf5f..9924688bdf 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -2755,7 +2755,6 @@ void tst_QSslSocket::encryptWithoutConnecting()
void tst_QSslSocket::resume_data()
{
- QSKIP("Temporary skip while updating certificates");
QTest::addColumn<bool>("ignoreErrorsAfterPause");
QTest::addColumn<QList<QSslError> >("errorsToIgnore");
QTest::addColumn<bool>("expectSuccess");
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 4f3ff15ae0..432d8d75b7 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -1811,7 +1811,8 @@ void tst_QGraphicsItem::selected_multi()
{
// Ctrl-move on item1
- QMouseEvent event(QEvent::MouseMove, view.mapFromScene(item1->scenePos()) + QPoint(1, 0), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier);
+ const QPoint item1Point = view.mapFromScene(item1->scenePos()) + QPoint(1, 0);
+ QMouseEvent event(QEvent::MouseMove, item1Point, view.viewport()->mapToGlobal(item1Point), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier);
QApplication::sendEvent(view.viewport(), &event);
QVERIFY(!item1->isSelected());
QVERIFY(!item2->isSelected());
@@ -1832,7 +1833,8 @@ void tst_QGraphicsItem::selected_multi()
{
// Ctrl-move on item1
- QMouseEvent event(QEvent::MouseMove, view.mapFromScene(item1->scenePos()) + QPoint(1, 0), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier);
+ const QPoint item1Point = view.mapFromScene(item1->scenePos()) + QPoint(1, 0);
+ QMouseEvent event(QEvent::MouseMove, item1Point, view.viewport()->mapToGlobal(item1Point), Qt::LeftButton, Qt::LeftButton, Qt::ControlModifier);
QApplication::sendEvent(view.viewport(), &event);
QVERIFY(item1->isSelected());
QVERIFY(!item2->isSelected());
@@ -4151,6 +4153,8 @@ void tst_QGraphicsItem::cursor()
QGraphicsView view(&scene);
view.showFullScreen();
QVERIFY(QTest::qWaitForWindowExposed(&view));
+ const Qt::CursorShape viewportShape = view.viewport()->cursor().shape();
+
QGraphicsRectItem *item1 = scene.addRect(QRectF(-100, 0, 50, 50));
QGraphicsRectItem *item2 = scene.addRect(QRectF(50, 0, 50, 50));
@@ -4178,41 +4182,45 @@ void tst_QGraphicsItem::cursor()
item1->setCursor(Qt::IBeamCursor);
item2->setCursor(Qt::PointingHandCursor);
- QTest::mouseMove(&view, view.rect().center());
+ QPoint viewCenter = view.rect().center();
+ QPoint item1Center = view.mapFromScene(item1->sceneBoundingRect().center());
+ QPoint item2Center = view.mapFromScene(item2->sceneBoundingRect().center());
- const Qt::CursorShape viewportShape = view.viewport()->cursor().shape();
+ {
+ QMouseEvent event(QEvent::MouseMove, viewCenter, view.viewport()->mapToGlobal(viewCenter), Qt::NoButton, 0, 0);
+ QApplication::sendEvent(view.viewport(), &event);
+ }
+
+ QCOMPARE(view.viewport()->cursor().shape(), viewportShape);
{
- QTest::mouseMove(view.viewport(), QPoint(100, 50));
- QMouseEvent event(QEvent::MouseMove, QPoint(100, 50), Qt::NoButton, 0, 0);
+ QMouseEvent event(QEvent::MouseMove, item1Center, view.viewport()->mapToGlobal(item1Center), Qt::NoButton, 0, 0);
QApplication::sendEvent(view.viewport(), &event);
}
- QTRY_COMPARE(view.viewport()->cursor().shape(), viewportShape);
+ QCOMPARE(view.viewport()->cursor().shape(), item1->cursor().shape());
{
- QTest::mouseMove(view.viewport(), view.mapFromScene(item1->sceneBoundingRect().center()));
- QMouseEvent event(QEvent::MouseMove, view.mapFromScene(item1->sceneBoundingRect().center()), Qt::NoButton, 0, 0);
+ QMouseEvent event(QEvent::MouseMove, item2Center, view.viewport()->mapToGlobal(item2Center), Qt::NoButton, 0, 0);
QApplication::sendEvent(view.viewport(), &event);
}
- QTRY_COMPARE(view.viewport()->cursor().shape(), item1->cursor().shape());
+ QCOMPARE(view.viewport()->cursor().shape(), item2->cursor().shape());
{
- QTest::mouseMove(view.viewport(), view.mapFromScene(item2->sceneBoundingRect().center()));
- QMouseEvent event(QEvent::MouseMove, view.mapFromScene(item2->sceneBoundingRect().center()), Qt::NoButton, 0, 0);
+ QMouseEvent event(QEvent::MouseMove, viewCenter, view.viewport()->mapToGlobal(viewCenter), Qt::NoButton, 0, 0);
QApplication::sendEvent(view.viewport(), &event);
}
- QTRY_COMPARE(view.viewport()->cursor().shape(), item2->cursor().shape());
+ QCOMPARE(view.viewport()->cursor().shape(), viewportShape);
+ item1->setEnabled(false);
{
- QTest::mouseMove(view.viewport(), view.rect().center());
- QMouseEvent event(QEvent::MouseMove, QPoint(100, 25), Qt::NoButton, 0, 0);
+ QMouseEvent event(QEvent::MouseMove, item1Center, view.viewport()->mapToGlobal(item1Center), Qt::NoButton, 0, 0);
QApplication::sendEvent(view.viewport(), &event);
}
- QTRY_COMPARE(view.viewport()->cursor().shape(), viewportShape);
+ QCOMPARE(view.viewport()->cursor().shape(), viewportShape);
}
#endif
/*
@@ -5055,12 +5063,6 @@ public:
void tst_QGraphicsItem::paint()
{
-#if defined(Q_OS_MACOS)
- if (QSysInfo::productVersion() == QLatin1String("10.12")) {
- QSKIP("Test is very flaky on MacOS_10_12, see QTBUG-76566");
- }
-#endif
-
QGraphicsScene scene;
PaintTester paintTester;
@@ -5090,22 +5092,25 @@ void tst_QGraphicsItem::paint()
PaintTester tester2;
scene2.addItem(&tester2);
- //First show one paint
- QTRY_COMPARE(tester2.painted, 1);
+ //First show at least one paint
+ QCOMPARE(tester2.painted, 0);
+ QTRY_VERIFY(tester2.painted > 0);
+ int painted = tester2.painted;
//nominal case, update call paint
tester2.update();
- QTRY_COMPARE(tester2.painted, 2);
+ QTRY_COMPARE(tester2.painted, painted + 1);
+ painted = tester2.painted;
//we remove the item from the scene, number of updates is still the same
tester2.update();
scene2.removeItem(&tester2);
- QTRY_COMPARE(tester2.painted, 2);
+ QTRY_COMPARE(tester2.painted, painted);
//We re-add the item, the number of paint should increase
scene2.addItem(&tester2);
tester2.update();
- QTRY_COMPARE(tester2.painted, 3);
+ QTRY_COMPARE(tester2.painted, painted + 1);
}
class HarakiriItem : public QGraphicsRectItem
@@ -11375,7 +11380,7 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2()
origView.reset();
childYellow->setOpacity(0.0);
- QTRY_COMPARE(origView.repaints, 1);
+ QTRY_VERIFY(origView.repaints > 0);
view.show();
qApp->setActiveWindow(&view);
@@ -11390,8 +11395,8 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2()
QEXPECT_FAIL("", "Fails on WinRT. Figure out why - QTBUG-68297", Abort);
#endif
- QTRY_COMPARE(origView.repaints, 1);
- QTRY_COMPARE(view.repaints, 1);
+ QTRY_VERIFY(origView.repaints > 0);
+ QTRY_VERIFY(view.repaints > 0);
}
void tst_QGraphicsItem::QT_2649_focusScope()
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 103be88f86..0064eb2713 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -6142,7 +6142,7 @@ void tst_QWidget::minAndMaxSizeWithX11BypassWindowManagerHint()
{
if (m_platform != QStringLiteral("xcb"))
QSKIP("This test is for X11 only.");
- // Same size as in QWidget::create_sys().
+ // Same size as in QWidgetPrivate::create.
const QSize desktopSize = QApplication::desktop()->size();
const QSize originalSize(desktopSize.width() / 2, desktopSize.height() * 4 / 10);
@@ -9425,7 +9425,7 @@ void tst_QWidget::initialPosForDontShowOnScreenWidgets()
const QPoint expectedPos(0, 0);
QWidget widget;
widget.setAttribute(Qt::WA_DontShowOnScreen);
- widget.winId(); // Make sure create_sys is called.
+ widget.winId(); // Make sure QWidgetPrivate::create is called.
QCOMPARE(widget.pos(), expectedPos);
QCOMPARE(widget.geometry().topLeft(), expectedPos);
}
@@ -9435,7 +9435,7 @@ void tst_QWidget::initialPosForDontShowOnScreenWidgets()
QWidget widget;
widget.setAttribute(Qt::WA_DontShowOnScreen);
widget.move(expectedPos);
- widget.winId(); // Make sure create_sys is called.
+ widget.winId(); // Make sure QWidgetPrivate::create is called.
QCOMPARE(widget.pos(), expectedPos);
QCOMPARE(widget.geometry().topLeft(), expectedPos);
}