summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r--tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp16
-rw-r--r--tests/auto/corelib/kernel/qtranslator/qtranslator.pro2
-rw-r--r--tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp2
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp27
4 files changed, 45 insertions, 2 deletions
diff --git a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
index 838120bb68..914f9e2b9b 100644
--- a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
+++ b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
@@ -54,6 +54,7 @@ private slots:
void qvariantCast();
void constPointer();
+ void constQPointer();
};
void tst_QPointer::constructors()
@@ -397,6 +398,21 @@ void tst_QPointer::constPointer()
delete fp.data();
}
+void tst_QPointer::constQPointer()
+{
+ // Check that const QPointers work. It's a bit weird to mark a pointer
+ // const if its value can change, but the shallow-const principle in C/C++
+ // allows this, and people use it, so document it with a test.
+ //
+ // It's unlikely that this test will fail in and out of itself, but it
+ // presents the use-case to static and dynamic checkers that can raise
+ // a warning (hopefully) should this become an issue.
+ QObject *o = new QObject(this);
+ const QPointer<QObject> p = o;
+ delete o;
+ QVERIFY(!p);
+}
+
QTEST_MAIN(tst_QPointer)
#include "tst_qpointer.moc"
diff --git a/tests/auto/corelib/kernel/qtranslator/qtranslator.pro b/tests/auto/corelib/kernel/qtranslator/qtranslator.pro
index 63189e5562..e673278920 100644
--- a/tests/auto/corelib/kernel/qtranslator/qtranslator.pro
+++ b/tests/auto/corelib/kernel/qtranslator/qtranslator.pro
@@ -4,6 +4,6 @@ QT = core testlib
SOURCES = tst_qtranslator.cpp
RESOURCES += qtranslator.qrc
-android:!android-no-sdk: RESOURCES += android_testdata.qrc
+android: RESOURCES += android_testdata.qrc
else: TESTDATA += dependencies_la.qm hellotr_la.qm msgfmt_from_po.qm
diff --git a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp
index 59ea484355..66971af7b4 100644
--- a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp
+++ b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp
@@ -64,7 +64,7 @@ tst_QTranslator::tst_QTranslator()
void tst_QTranslator::initTestCase()
{
-#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
+#if defined(Q_OS_ANDROID)
QString sourceDir(":/android_testdata/");
QDirIterator it(sourceDir, QDirIterator::Subdirectories);
while (it.hasNext()) {
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 32c2154da6..7f6e26eecb 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -276,6 +276,8 @@ private slots:
void compareSanity_data();
void compareSanity();
+ void accessSequentialContainerKey();
+
private:
void dataStream_data(QDataStream::Version version);
void loadQVariantFromDataStream(QDataStream::Version version);
@@ -4763,5 +4765,30 @@ void tst_QVariant::compareSanity()
}
}
+void tst_QVariant::accessSequentialContainerKey()
+{
+ QString nameResult;
+
+ {
+ QMap<QString, QObject*> mapping;
+ QString name = QString::fromLatin1("Seven");
+ mapping.insert(name, Q_NULLPTR);
+
+ QVariant variant = QVariant::fromValue(mapping);
+
+ QAssociativeIterable iterable = variant.value<QAssociativeIterable>();
+ QAssociativeIterable::const_iterator iit = iterable.begin();
+ const QAssociativeIterable::const_iterator end = iterable.end();
+ for ( ; iit != end; ++iit) {
+ nameResult += iit.key().toString();
+ }
+ } // Destroy mapping
+ // Regression test for QTBUG-52246 - no memory corruption/double deletion
+ // of the string key.
+
+ QCOMPARE(nameResult, QStringLiteral("Seven"));
+}
+
+
QTEST_MAIN(tst_QVariant)
#include "tst_qvariant.moc"