summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/auto.pro2
-rw-r--r--tests/auto/corelib/io/io.pro5
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp65
-rw-r--r--tests/auto/corelib/itemmodels/itemmodels.pro10
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp6
-rw-r--r--tests/auto/corelib/json/tst_qtjson.cpp29
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro6
-rw-r--r--tests/auto/corelib/thread/thread.pro6
-rw-r--r--tests/auto/corelib/xml/xml.pro2
-rw-r--r--tests/auto/dbus/dbus.pro3
-rw-r--r--tests/auto/gui/text/text.pro4
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt11
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp26
-rw-r--r--tests/auto/other/qaccessibility/accessiblewidgets.h37
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp28
15 files changed, 171 insertions, 69 deletions
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index d3c4d470f5..f4ab0d8464 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -31,6 +31,8 @@ else:!qtConfig(process): SUBDIRS -= tools
!qtHaveModule(concurrent): SUBDIRS -= concurrent
!qtHaveModule(network): SUBDIRS -= network
!qtHaveModule(dbus): SUBDIRS -= dbus
+!qtHaveModule(xml): SUBDIRS -= xml
+!qtHaveModule(sql): SUBDIRS -= sql
# Disable the QtDBus tests if we can't connect to the session bus
!cross_compile:qtHaveModule(dbus) {
diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro
index 470a1dde26..01ed84fda9 100644
--- a/tests/auto/corelib/io/io.pro
+++ b/tests/auto/corelib/io/io.pro
@@ -50,6 +50,11 @@ SUBDIRS=\
qprocess \
qtextstream
+!qtHaveModule(concurrent): SUBDIRS -= \
+ qdebug \
+ qlockfile \
+ qurl
+
!qtConfig(private_tests): SUBDIRS -= \
qabstractfileengine \
qfileinfo \
diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp
index 762cb539e0..330ff9312d 100644
--- a/tests/auto/corelib/io/qdir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp
@@ -99,14 +99,11 @@ private slots:
void entryListWithSymLinks();
- void mkdir_data();
- void mkdir();
+ void mkdirRmdir_data();
+ void mkdirRmdir();
void makedirReturnCode();
- void rmdir_data();
- void rmdir();
-
void removeRecursively_data();
void removeRecursively();
void removeRecursivelyFailure();
@@ -342,26 +339,29 @@ void tst_QDir::setPath()
QCOMPARE(shared.entryList(), entries2);
}
-void tst_QDir::mkdir_data()
+void tst_QDir::mkdirRmdir_data()
{
QTest::addColumn<QString>("path");
QTest::addColumn<bool>("recurse");
QStringList dirs;
- dirs << QDir::currentPath() + "/testdir/one/two/three"
- << QDir::currentPath() + "/testdir/two"
- << QDir::currentPath() + "/testdir/two/three";
- QTest::newRow("data0") << dirs.at(0) << true;
- QTest::newRow("data1") << dirs.at(1) << false;
- QTest::newRow("data2") << dirs.at(2) << false; // note: requires data1 to have been run!
+ dirs << "testdir/one"
+ << "testdir/two/three/four"
+ << "testdir/../testdir/three";
+ QTest::newRow("plain") << QDir::currentPath() + "/" + dirs.at(0) << false;
+ QTest::newRow("recursive") << QDir::currentPath() + "/" + dirs.at(1) << true;
+ QTest::newRow("with-..") << QDir::currentPath() + "/" + dirs.at(2) << false;
+
+ QTest::newRow("relative-plain") << dirs.at(0) << false;
+ QTest::newRow("relative-recursive") << dirs.at(1) << true;
+ QTest::newRow("relative-with-..") << dirs.at(2) << false;
// Ensure that none of these directories already exist
- QDir dir;
for (int i = 0; i < dirs.count(); ++i)
- dir.rmpath(dirs.at(i));
+ QVERIFY(!QFile::exists(dirs.at(i)));
}
-void tst_QDir::mkdir()
+void tst_QDir::mkdirRmdir()
{
QFETCH(QString, path);
QFETCH(bool, recurse);
@@ -376,6 +376,15 @@ void tst_QDir::mkdir()
//make sure it really exists (ie that mkdir returns the right value)
QFileInfo fi(path);
QVERIFY2(fi.exists() && fi.isDir(), msgDoesNotExist(path).constData());
+
+ if (recurse)
+ QVERIFY(dir.rmpath(path));
+ else
+ QVERIFY(dir.rmdir(path));
+
+ //make sure it really doesn't exist (ie that rmdir returns the right value)
+ fi.refresh();
+ QVERIFY(!fi.exists());
}
void tst_QDir::makedirReturnCode()
@@ -405,32 +414,6 @@ void tst_QDir::makedirReturnCode()
f.remove();
}
-void tst_QDir::rmdir_data()
-{
- QTest::addColumn<QString>("path");
- QTest::addColumn<bool>("recurse");
-
- QTest::newRow("data0") << QDir::currentPath() + "/testdir/one/two/three" << true;
- QTest::newRow("data1") << QDir::currentPath() + "/testdir/two/three" << false;
- QTest::newRow("data2") << QDir::currentPath() + "/testdir/two" << false;
-}
-
-void tst_QDir::rmdir()
-{
- QFETCH(QString, path);
- QFETCH(bool, recurse);
-
- QDir dir;
- if (recurse)
- QVERIFY(dir.rmpath(path));
- else
- QVERIFY(dir.rmdir(path));
-
- //make sure it really doesn't exist (ie that rmdir returns the right value)
- QFileInfo fi(path);
- QVERIFY(!fi.exists());
-}
-
void tst_QDir::removeRecursively_data()
{
QTest::addColumn<QString>("path");
diff --git a/tests/auto/corelib/itemmodels/itemmodels.pro b/tests/auto/corelib/itemmodels/itemmodels.pro
index 7e0e3a0944..c1d75cc2cb 100644
--- a/tests/auto/corelib/itemmodels/itemmodels.pro
+++ b/tests/auto/corelib/itemmodels/itemmodels.pro
@@ -8,6 +8,10 @@ qtHaveModule(gui): SUBDIRS += \
qidentityproxymodel \
qitemselectionmodel \
-qtHaveModule(widgets): SUBDIRS += \
- qitemmodel \
- qsortfilterproxymodel \
+qtHaveModule(widgets) {
+ SUBDIRS += \
+ qsortfilterproxymodel
+
+ qtHaveModule(sql): SUBDIRS += \
+ qitemmodel
+}
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index 7b6c470dc4..bc8f0c1c51 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -3994,21 +3994,21 @@ class DropOnOddRows : public QAbstractListModel
public:
DropOnOddRows(QObject *parent = 0) : QAbstractListModel(parent) {}
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (role == Qt::DisplayRole)
return (index.row() % 2 == 0) ? "A" : "B";
return QVariant();
}
- int rowCount(const QModelIndex &parent = QModelIndex()) const
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
Q_UNUSED(parent);
return 10;
}
bool canDropMimeData(const QMimeData *, Qt::DropAction,
- int row, int column, const QModelIndex &parent) const Q_DECL_OVERRIDE
+ int row, int column, const QModelIndex &parent) const override
{
Q_UNUSED(row);
Q_UNUSED(column);
diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp
index 6aa5165e24..b215364f0e 100644
--- a/tests/auto/corelib/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/json/tst_qtjson.cpp
@@ -32,6 +32,7 @@
#include "qjsonobject.h"
#include "qjsonvalue.h"
#include "qjsondocument.h"
+#include "qregularexpression.h"
#include <limits>
#define INVALID_UNICODE "\xCE\xBA\xE1"
@@ -49,6 +50,7 @@ private Q_SLOTS:
void testNumbers();
void testNumbers_2();
void testNumbers_3();
+ void testNumbers_4();
void testObjectSimple();
void testObjectSmallKeys();
@@ -375,6 +377,33 @@ void tst_QtJson::testNumbers_3()
QVERIFY(d1_1 != d2_1);
}
+void tst_QtJson::testNumbers_4()
+{
+ // no exponent notation used to print numbers between -2^64 and 2^64
+ QJsonArray array;
+ array << QJsonValue(+1000000000000000.0);
+ array << QJsonValue(-1000000000000000.0);
+ array << QJsonValue(+9007199254740992.0);
+ array << QJsonValue(-9007199254740992.0);
+ array << QJsonValue(+9223372036854775808.0);
+ array << QJsonValue(-9223372036854775808.0);
+ array << QJsonValue(+18446744073709551616.0);
+ array << QJsonValue(-18446744073709551616.0);
+ const QByteArray json(QJsonDocument(array).toJson());
+ const QByteArray expected =
+ "[\n"
+ " 1000000000000000,\n"
+ " -1000000000000000,\n"
+ " 9007199254740992,\n"
+ " -9007199254740992,\n"
+ " 9223372036854776000,\n"
+ " -9223372036854776000,\n"
+ " 18446744073709552000,\n"
+ " -18446744073709552000\n"
+ "]\n";
+ QCOMPARE(json, expected);
+}
+
void tst_QtJson::testObjectSimple()
{
QJsonObject object;
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro
index 536a6b64de..f821702564 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro
@@ -1,3 +1,5 @@
TEMPLATE = subdirs
-SUBDIRS = qmimedatabase-xml
-unix:!mac:!qnx: SUBDIRS += qmimedatabase-cache
+qtHaveModule(concurrent) {
+ SUBDIRS = qmimedatabase-xml
+ unix:!darwin:!qnx: SUBDIRS += qmimedatabase-cache
+}
diff --git a/tests/auto/corelib/thread/thread.pro b/tests/auto/corelib/thread/thread.pro
index f18dad6a4c..d3c669859b 100644
--- a/tests/auto/corelib/thread/thread.pro
+++ b/tests/auto/corelib/thread/thread.pro
@@ -6,7 +6,6 @@ SUBDIRS=\
qresultstore \
qfuture \
qfuturesynchronizer \
- qfuturewatcher \
qmutex \
qmutexlocker \
qreadlocker \
@@ -18,3 +17,8 @@ SUBDIRS=\
qthreadstorage \
qwaitcondition \
qwritelocker
+
+qtHaveModule(concurrent) {
+ SUBDIRS += \
+ qfuturewatcher
+}
diff --git a/tests/auto/corelib/xml/xml.pro b/tests/auto/corelib/xml/xml.pro
index 20519edf1b..374e695aa7 100644
--- a/tests/auto/corelib/xml/xml.pro
+++ b/tests/auto/corelib/xml/xml.pro
@@ -1,3 +1,3 @@
TEMPLATE=subdirs
-qtHaveModule(network): SUBDIRS= \
+qtHaveModule(network):qtHaveModule(xml): SUBDIRS= \
qxmlstream
diff --git a/tests/auto/dbus/dbus.pro b/tests/auto/dbus/dbus.pro
index 2c58d7e235..6878c9341d 100644
--- a/tests/auto/dbus/dbus.pro
+++ b/tests/auto/dbus/dbus.pro
@@ -34,3 +34,6 @@ SUBDIRS+=\
qdbusabstractinterface \
qdbusinterface \
qdbusmarshall
+
+!qtHaveModule(xml): SUBDIRS -= \
+ qdbusxmlparser
diff --git a/tests/auto/gui/text/text.pro b/tests/auto/gui/text/text.pro
index d1a3eda4fc..6b033fb506 100644
--- a/tests/auto/gui/text/text.pro
+++ b/tests/auto/gui/text/text.pro
@@ -35,3 +35,7 @@ win32:SUBDIRS -= qtextpiecetable
qtextpiecetable \
qzip \
qtextodfwriter
+
+!qtHaveModule(xml): SUBDIRS -= \
+ qcssparser \
+ qtextdocument
diff --git a/tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt b/tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt
new file mode 100644
index 0000000000..b34847b8d2
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASegAwIBAgIJANTX9XvqKXllMA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
+BAMMDyouU0NIw4RVRkVMRS5ERTAeFw0xNzAzMDcwOTIwMzZaFw0xNzA0MDYwOTIw
+MzZaMBoxGDAWBgNVBAMMDyouU0NIw4RVRkVMRS5ERTBcMA0GCSqGSIb3DQEBAQUA
+A0sAMEgCQQDZGJFl85dMxps7EryuNyP1apWrBqp7mlwgfbCN9wboyUZBLCWM58UK
+6oJPg0X19IJUv3UTxD8GH7qQteCXPl4bAgMBAAGjUDBOMB0GA1UdDgQWBBSLuHtk
+CfEpYnW5Rw7XcO53P/1+jDAfBgNVHSMEGDAWgBSLuHtkCfEpYnW5Rw7XcO53P/1+
+jDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA0EAXrGVzhGlekW5Zm78tASr
+5lTF6wn3klqvd2zTqTKuAKWAuBNX46p79g8OGsfY76X9M+/RbUYa7h5BuTL9b45K
+dw==
+-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 4eb26d17fe..8a8522760c 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -191,6 +191,7 @@ private slots:
void supportedCiphers();
void systemCaCertificates();
void wildcardCertificateNames();
+ void isMatchingHostname();
void wildcard();
void setEmptyKey();
void spontaneousWrite();
@@ -1643,10 +1644,15 @@ void tst_QSslSocket::wildcardCertificateNames()
{
// Passing CN matches
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("www.example.com"), QString("www.example.com")), true );
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("WWW.EXAMPLE.COM"), QString("www.example.com")), true );
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.example.com"), QString("www.example.com")), true );
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xxx*.example.com"), QString("xxxwww.example.com")), true );
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("f*.example.com"), QString("foo.example.com")), true );
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("192.168.0.0"), QString("192.168.0.0")), true );
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("foo.éxample.com"), QString("foo.xn--xample-9ua.com")), true );
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.éxample.com"), QString("foo.xn--xample-9ua.com")), true );
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xn--kcry6tjko.example.org"), QString("xn--kcry6tjko.example.org")), true);
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.xn--kcry6tjko.example.org"), QString("xn--kcr.xn--kcry6tjko.example.org")), true);
// Failing CN matches
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xxx.example.com"), QString("www.example.com")), false );
@@ -1661,6 +1667,26 @@ void tst_QSslSocket::wildcardCertificateNames()
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString(""), QString("www")), false );
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*"), QString("www")), false );
QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.168.0.0"), QString("192.168.0.0")), false );
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xn--kcry6tjko*.example.org"), QString("xn--kcry6tjkoanc.example.org")), false ); // RFC 6125 §7.2
+ QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("å*.example.org"), QString("xn--la-xia.example.org")), false );
+}
+
+void tst_QSslSocket::isMatchingHostname()
+{
+ // with normalization: (the certificate has *.SCHÄUFELE.DE as a CN)
+ // openssl req -x509 -nodes -subj "/CN=*.SCHÄUFELE.DE" -newkey rsa:512 -keyout /dev/null -out xn--schufele-2za.crt
+ QList<QSslCertificate> certs = QSslCertificate::fromPath(SRCDIR "certs/xn--schufele-2za.crt");
+ QVERIFY(!certs.isEmpty());
+ QSslCertificate cert = certs.first();
+
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("WWW.SCHÄUFELE.DE")), true);
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.xn--schufele-2za.de")), true);
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.schäufele.de")), true);
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("föo.schäufele.de")), true);
+
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("foo.foo.xn--schufele-2za.de")), false);
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.schaufele.de")), false);
+ QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.schufele.de")), false);
}
void tst_QSslSocket::wildcard()
diff --git a/tests/auto/other/qaccessibility/accessiblewidgets.h b/tests/auto/other/qaccessibility/accessiblewidgets.h
index 35b1ec890b..0c337a72f4 100644
--- a/tests/auto/other/qaccessibility/accessiblewidgets.h
+++ b/tests/auto/other/qaccessibility/accessiblewidgets.h
@@ -98,53 +98,54 @@ public:
return 0;
}
CustomTextWidgetIface(CustomTextWidget *w): QAccessibleWidget(w) {}
- void *interface_cast(QAccessible::InterfaceType t) {
+ void *interface_cast(QAccessible::InterfaceType t) override
+ {
if (t == QAccessible::TextInterface)
return static_cast<QAccessibleTextInterface*>(this);
return 0;
}
// this is mostly to test the base implementation for textBefore/At/After
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE
+ QString text(QAccessible::Text t) const override
{
if (t == QAccessible::Value)
return textWidget()->text;
return QAccessibleWidget::text(t);
}
- QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType, int *startOffset, int *endOffset) const
+ QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType, int *startOffset, int *endOffset) const override
{
if (offset == -2)
offset = textWidget()->cursorPosition;
return QAccessibleTextInterface::textBeforeOffset(offset, boundaryType, startOffset, endOffset);
}
- QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType, int *startOffset, int *endOffset) const
+ QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType, int *startOffset, int *endOffset) const override
{
if (offset == -2)
offset = textWidget()->cursorPosition;
return QAccessibleTextInterface::textAtOffset(offset, boundaryType, startOffset, endOffset);
}
- QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType, int *startOffset, int *endOffset) const
+ QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType, int *startOffset, int *endOffset) const override
{
if (offset == -2)
offset = textWidget()->cursorPosition;
return QAccessibleTextInterface::textAfterOffset(offset, boundaryType, startOffset, endOffset);
}
- void selection(int, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE
+ void selection(int, int *startOffset, int *endOffset) const override
{ *startOffset = *endOffset = -1; }
- int selectionCount() const Q_DECL_OVERRIDE { return 0; }
- void addSelection(int, int) Q_DECL_OVERRIDE {}
- void removeSelection(int) Q_DECL_OVERRIDE {}
- void setSelection(int, int, int) Q_DECL_OVERRIDE {}
- int cursorPosition() const Q_DECL_OVERRIDE { return textWidget()->cursorPosition; }
- void setCursorPosition(int position) Q_DECL_OVERRIDE { textWidget()->cursorPosition = position; }
- QString text(int startOffset, int endOffset) const Q_DECL_OVERRIDE { return textWidget()->text.mid(startOffset, endOffset); }
- int characterCount() const Q_DECL_OVERRIDE { return textWidget()->text.length(); }
- QRect characterRect(int) const Q_DECL_OVERRIDE { return QRect(); }
- int offsetAtPoint(const QPoint &) const Q_DECL_OVERRIDE { return 0; }
- void scrollToSubstring(int, int) Q_DECL_OVERRIDE {}
- QString attributes(int, int *, int *) const Q_DECL_OVERRIDE
+ int selectionCount() const override { return 0; }
+ void addSelection(int, int) override {}
+ void removeSelection(int) override {}
+ void setSelection(int, int, int) override {}
+ int cursorPosition() const override { return textWidget()->cursorPosition; }
+ void setCursorPosition(int position) override { textWidget()->cursorPosition = position; }
+ QString text(int startOffset, int endOffset) const override { return textWidget()->text.mid(startOffset, endOffset); }
+ int characterCount() const override { return textWidget()->text.length(); }
+ QRect characterRect(int) const override { return QRect(); }
+ int offsetAtPoint(const QPoint &) const override { return 0; }
+ void scrollToSubstring(int, int) override {}
+ QString attributes(int, int *, int *) const override
{ return QString(); }
private:
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 5715505fd6..ace2013740 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -277,6 +277,7 @@ private slots:
#endif
void setLocale();
+ void propagateLocale();
void deleteStyle();
void multipleToplevelFocusCheck();
void setFocus();
@@ -1205,6 +1206,33 @@ void tst_QWidget::setLocale()
QCOMPARE(child2.locale(), QLocale(QLocale::French));
}
+void tst_QWidget::propagateLocale()
+{
+ QWidget parent;
+ parent.setLocale(QLocale::French);
+ // Non-window widget; propagates locale:
+ QWidget *child = new QWidget(&parent);
+ QVERIFY(!child->isWindow());
+ QVERIFY(!child->testAttribute(Qt::WA_WindowPropagation));
+ QCOMPARE(child->locale(), QLocale(QLocale::French));
+ parent.setLocale(QLocale::Italian);
+ QCOMPARE(child->locale(), QLocale(QLocale::Italian));
+ delete child;
+ // Window: doesn't propagate locale:
+ child = new QWidget(&parent, Qt::Window);
+ QVERIFY(child->isWindow());
+ QVERIFY(!child->testAttribute(Qt::WA_WindowPropagation));
+ QCOMPARE(child->locale(), QLocale());
+ parent.setLocale(QLocale::French);
+ QCOMPARE(child->locale(), QLocale());
+ // ... unless we tell it to:
+ child->setAttribute(Qt::WA_WindowPropagation, true);
+ QVERIFY(child->testAttribute(Qt::WA_WindowPropagation));
+ QCOMPARE(child->locale(), QLocale(QLocale::French));
+ parent.setLocale(QLocale::Italian);
+ QCOMPARE(child->locale(), QLocale(QLocale::Italian));
+}
+
void tst_QWidget::visible_setWindowOpacity()
{
QScopedPointer<QWidget> testWidget(new QWidget);