summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io
diff options
context:
space:
mode:
authorMikolaj Boc <mikolaj.boc@qt.io>2023-08-09 15:57:23 +0200
committerMikolaj Boc <mikolaj.boc@qt.io>2023-08-16 17:17:13 +0200
commitc0c9e43be1443af6082970087711a6a1175a51bb (patch)
tree5a973d93405454f1c9c1693776f0881ddc746c91 /tests/auto/corelib/io
parent5de991059e1590b0f40b73b5929953c3a6754478 (diff)
Add a special testcase for IndexedDB settings only
The test removes the file in memfs that IndexedDB settings use as the backing store. This forces a new instance of IDB settings to read from the actual IndexedDB, instead of the file. Change-Id: I7c04a90ae80e47b7742bd133b2d9327ce0063fe2 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r--tests/auto/corelib/io/qsettings/tst_qsettings.cpp74
1 files changed, 73 insertions, 1 deletions
diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
index 8aac62a5ca..337428d01a 100644
--- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
+++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
@@ -42,7 +42,9 @@
#endif
#if defined(Q_OS_WASM)
-#include "emscripten/val.h"
+# include <QtCore/private/qstdweb_p.h>
+
+# include "emscripten/val.h"
#endif
Q_DECLARE_METATYPE(QSettings::Format)
@@ -106,6 +108,9 @@ private slots:
void getSetCheck();
void ctor_data() { populateWithFormats(); }
void ctor();
+#ifdef Q_OS_WASM
+ void idb();
+#endif
void beginGroup();
void setValue();
void remove();
@@ -329,6 +334,29 @@ void tst_QSettings::cleanupTestFiles()
#endif
#if defined(Q_OS_WASM)
emscripten::val::global("window")["localStorage"].call<void>("clear");
+ if (qstdweb::haveJspi()) {
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "software.org",
+ "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, "software.org",
+ "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "other.software.org",
+ "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope,
+ "other.software.org", "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "software.org")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, "software.org")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "other.software.org")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope,
+ "other.software.org")
+ .clear();
+ }
#endif
const QString foo(QLatin1String("foo"));
@@ -625,6 +653,50 @@ void tst_QSettings::ctor()
}
}
+#if defined(Q_OS_WASM)
+void tst_QSettings::idb()
+{
+ if (!qstdweb::haveJspi())
+ QSKIP("JSPI needed for IndexedDB format");
+
+ QString systemScopeOrganizationWideFile;
+ {
+ QSettings settingsUserScopeAppSpecific(QSettings::Format::WebIndexedDBFormat,
+ QSettings::UserScope, "software.org", "KillerAPP");
+ QSettings settingsUserScopeOrganizationWide(QSettings::Format::WebIndexedDBFormat,
+ QSettings::UserScope, "software.org");
+ QSettings settingsSystemScopeAppSpecific(QSettings::Format::WebIndexedDBFormat,
+ QSettings::SystemScope, "software.org",
+ "KillerAPP");
+ QSettings settingsSystemScopeOrganizationWide(QSettings::Format::WebIndexedDBFormat,
+ QSettings::SystemScope, "software.org");
+
+ settingsSystemScopeOrganizationWide.setValue("testKey", 1);
+ systemScopeOrganizationWideFile = settingsSystemScopeOrganizationWide.fileName();
+ }
+
+ // Emscripten's memfs has a bug that makes a file appear twice in the hashmap.
+ while (QFile::exists(systemScopeOrganizationWideFile)) {
+ Q_ASSERT(QFile::remove(systemScopeOrganizationWideFile));
+ }
+
+ QEventLoop loop;
+ QTimer timer;
+ timer.setInterval(1);
+
+ connect(&timer, &QTimer::timeout, [&loop]() { loop.quit(); });
+ timer.start();
+
+ loop.exec();
+ {
+ QSettings settingsUserScopeAppSpecific(QSettings::Format::WebIndexedDBFormat,
+ QSettings::UserScope, "software.org", "KillerAPP");
+
+ QCOMPARE(settingsUserScopeAppSpecific.value("testKey").toInt(), 1);
+ }
+}
+#endif // Q_OS_WASM
+
void tst_QSettings::testByteArray_data()
{
QTest::addColumn<QByteArray>("data");