aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2020-08-14 15:02:46 +0200
committerChristian Stenger <christian.stenger@qt.io>2020-08-19 07:39:43 +0000
commite9c27cca3483967c1274170d6857419f321223bc (patch)
tree8319ba7c0a211185b637534e5b8b743911139f91 /tests
parent2ac60ac66e14dfc5f19f92d60979388de48f0f89 (diff)
Utils: Fix persisting of QRect
And pass explicitly a QVariant to the writer to avoid unexpected behavior when trying to store the geometry of a widget. This resulted in a warning for any session where the user had used the debugger at least once. Change-Id: I5cb2352ab29ff7d2a64c84ffcdf040efe6d04b94 Reviewed-by: Eike Ziller <eike.ziller@qt.io> Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/utils/CMakeLists.txt1
-rw-r--r--tests/auto/utils/persistentsettings/CMakeLists.txt4
-rw-r--r--tests/auto/utils/persistentsettings/persistentsettings.pro4
-rw-r--r--tests/auto/utils/persistentsettings/persistentsettings.qbs7
-rw-r--r--tests/auto/utils/persistentsettings/tst_persistentsettings.cpp106
-rw-r--r--tests/auto/utils/utils.pro1
-rw-r--r--tests/auto/utils/utils.qbs1
7 files changed, 124 insertions, 0 deletions
diff --git a/tests/auto/utils/CMakeLists.txt b/tests/auto/utils/CMakeLists.txt
index 74f1d6f819..1b96a980f0 100644
--- a/tests/auto/utils/CMakeLists.txt
+++ b/tests/auto/utils/CMakeLists.txt
@@ -1,6 +1,7 @@
add_subdirectory(ansiescapecodehandler)
add_subdirectory(fileutils)
add_subdirectory(fuzzymatcher)
+add_subdirectory(persistentsettings)
add_subdirectory(settings)
add_subdirectory(stringutils)
add_subdirectory(templateengine)
diff --git a/tests/auto/utils/persistentsettings/CMakeLists.txt b/tests/auto/utils/persistentsettings/CMakeLists.txt
new file mode 100644
index 0000000000..2991459961
--- /dev/null
+++ b/tests/auto/utils/persistentsettings/CMakeLists.txt
@@ -0,0 +1,4 @@
+add_qtc_test(tst_utils_persistentsettings
+ DEPENDS Utils
+ SOURCES tst_persistentsettings.cpp
+)
diff --git a/tests/auto/utils/persistentsettings/persistentsettings.pro b/tests/auto/utils/persistentsettings/persistentsettings.pro
new file mode 100644
index 0000000000..3bd645a586
--- /dev/null
+++ b/tests/auto/utils/persistentsettings/persistentsettings.pro
@@ -0,0 +1,4 @@
+QTC_LIB_DEPENDS += utils
+include(../../qttest.pri)
+
+SOURCES += tst_persistentsettings.cpp
diff --git a/tests/auto/utils/persistentsettings/persistentsettings.qbs b/tests/auto/utils/persistentsettings/persistentsettings.qbs
new file mode 100644
index 0000000000..8b8d8a6c23
--- /dev/null
+++ b/tests/auto/utils/persistentsettings/persistentsettings.qbs
@@ -0,0 +1,7 @@
+import qbs
+
+QtcAutotest {
+ name: "PersistentSettings autotest"
+ Depends { name: "Utils" }
+ files: "tst_persistentsettings.cpp"
+}
diff --git a/tests/auto/utils/persistentsettings/tst_persistentsettings.cpp b/tests/auto/utils/persistentsettings/tst_persistentsettings.cpp
new file mode 100644
index 0000000000..bd965523f2
--- /dev/null
+++ b/tests/auto/utils/persistentsettings/tst_persistentsettings.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include <utils/persistentsettings.h>
+
+#include <QTemporaryDir>
+
+#include <QtTest>
+
+using namespace Utils;
+
+class PersistentSettingsTest : public QObject
+{
+ Q_OBJECT
+public:
+ PersistentSettingsTest() = default;
+
+private slots:
+ void tst_readwrite();
+};
+
+static const QVariantMap generateData()
+{
+ QVariantMap result;
+ QByteArray barr("I am a byte array.");
+ QString str("I am a string.");
+ QColor color("#8b00d1");
+ QRect rect(0, 0, 400, 600);
+ QRect rect2(10, 10, 40, 40);
+ QVariantList varList{barr, color, rect2};
+ result.insert("barr", barr);
+ result.insert("str", str);
+ result.insert("color", color);
+ result.insert("rect", rect);
+ result.insert("varList", varList);
+ return result;
+}
+
+void PersistentSettingsTest::tst_readwrite()
+{
+ QTemporaryDir tmpDir("qtc_test_persistentXXXXXX");
+ tmpDir.setAutoRemove(false);
+ const QFileInfo fi(QDir(tmpDir.path()), "settings.xml");
+ qDebug() << "using" << fi.absoluteFilePath();
+ const FilePath filePath = FilePath::fromFileInfo(fi);
+ PersistentSettingsWriter writer(filePath, "Narf");
+ const QVariantMap originalData = generateData();
+ QString error;
+ bool success = writer.save(originalData, &error);
+ QVERIFY2(success, error.toLocal8Bit());
+
+ // verify written data
+ PersistentSettingsReader reader;
+ success = reader.load(filePath);
+ QVERIFY(success);
+
+ const QVariantMap restored = reader.restoreValues();
+ QCOMPARE(restored.size(), originalData.size());
+ auto restoredEnd = restored.end();
+ for (auto it = originalData.cbegin(), end = originalData.cend(); it != end; ++it) {
+ auto found = restored.find(it.key());
+ QVERIFY(found != restoredEnd);
+ QVERIFY(found.value().isValid());
+ if (it.value().type() == QVariant::List) {
+ const QVariantList origList = it.value().toList();
+ const QVariantList foundList = found.value().toList();
+
+ QCOMPARE(foundList.size(), origList.size());
+ for (int i = 0, vEnd = foundList.size(); i < vEnd; ++i) {
+ if (foundList.at(i).type() == QVariant::Rect)
+ qDebug() << foundList.at(i).toRect() << origList.at(i).toRect();
+ QCOMPARE(foundList.at(i), origList.at(i));
+ }
+ }
+ if (it.value().type() == QVariant::Rect)
+ qDebug() << found.value().toRect() << "vs" << it.value().toRect();
+ QCOMPARE(found.value(), it.value());
+ }
+ tmpDir.setAutoRemove(!QTest::currentTestFailed());
+}
+
+QTEST_MAIN(PersistentSettingsTest)
+
+#include "tst_persistentsettings.moc"
diff --git a/tests/auto/utils/utils.pro b/tests/auto/utils/utils.pro
index 158b7c12e5..1a96edbfa0 100644
--- a/tests/auto/utils/utils.pro
+++ b/tests/auto/utils/utils.pro
@@ -4,6 +4,7 @@ SUBDIRS = \
fileutils \
ansiescapecodehandler \
fuzzymatcher \
+ persistentsettings \
settings \
stringutils \
templateengine \
diff --git a/tests/auto/utils/utils.qbs b/tests/auto/utils/utils.qbs
index edab157ae0..e3e136305a 100644
--- a/tests/auto/utils/utils.qbs
+++ b/tests/auto/utils/utils.qbs
@@ -6,6 +6,7 @@ Project {
"fileutils/fileutils.qbs",
"ansiescapecodehandler/ansiescapecodehandler.qbs",
"fuzzymatcher/fuzzymatcher.qbs",
+ "persistentsettings/persistentsettings.qbs",
"settings/settings.qbs",
"stringutils/stringutils.qbs",
"templateengine/templateengine.qbs",