diff options
author | Christian Stenger <christian.stenger@qt.io> | 2020-08-14 15:02:46 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2020-08-19 07:39:43 +0000 |
commit | e9c27cca3483967c1274170d6857419f321223bc (patch) | |
tree | 8319ba7c0a211185b637534e5b8b743911139f91 /tests | |
parent | 2ac60ac66e14dfc5f19f92d60979388de48f0f89 (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.txt | 1 | ||||
-rw-r--r-- | tests/auto/utils/persistentsettings/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tests/auto/utils/persistentsettings/persistentsettings.pro | 4 | ||||
-rw-r--r-- | tests/auto/utils/persistentsettings/persistentsettings.qbs | 7 | ||||
-rw-r--r-- | tests/auto/utils/persistentsettings/tst_persistentsettings.cpp | 106 | ||||
-rw-r--r-- | tests/auto/utils/utils.pro | 1 | ||||
-rw-r--r-- | tests/auto/utils/utils.qbs | 1 |
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", |