mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-29 04:10:23 -07:00
[Settings] Split cache_settings monolith into multiple SettingsManager sub-classes (#7050)
* [Settings] Split cache_settings into multiple files Took 9 minutes Took 4 minutes * [Settings] Fwd declare settings classes in cache_settings Took 15 minutes * Fix oracle includes. Took 8 minutes * Address comments, fix windows CI Took 8 minutes * fix copy constructor visibility Took 3 minutes * lint Took 2 minutes * Fix native format tests. Took 5 minutes * Remove test header guard Took 4 seconds * Remove tests invalid in CI environ Took 24 seconds * Adjust to rebase. Took 11 minutes * Change settings file name. Took 8 minutes --------- Co-authored-by: Lukas Brübach <lukas.bruebach@bdosecurity.de> Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
cf0b453e75
commit
12f0f59453
166 changed files with 5589 additions and 3066 deletions
171
tests/settings/settings_manager_test.cpp
Normal file
171
tests/settings/settings_manager_test.cpp
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
#include "gtest/gtest.h"
|
||||
#include <QSettings>
|
||||
#include <QTemporaryDir>
|
||||
#include <libcockatrice/settings/settings_manager.h>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
class SettingsManagerTest : public ::testing::Test
|
||||
{
|
||||
protected:
|
||||
QTemporaryDir tempDir;
|
||||
QString settingsPath;
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
settingsPath = tempDir.path() + "/";
|
||||
}
|
||||
|
||||
void writeValue(const QString &file, const QString &key, const QVariant &value)
|
||||
{
|
||||
QSettings qs(file, QSettings::IniFormat);
|
||||
qs.setValue(key, value);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(SettingsManagerTest, GetValueNoDefaultReturnsInvalid)
|
||||
{
|
||||
SettingsManager sm(settingsPath + "test.ini");
|
||||
QVariant val = sm.getValue("nonexistent");
|
||||
ASSERT_TRUE(val.isNull());
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, GetValueWithDefaultReturnsDefaultWhenMissing)
|
||||
{
|
||||
SettingsManager sm(settingsPath + "test.ini");
|
||||
QVariant val = sm.getValue("nonexistent", QString(), QString(), 42);
|
||||
ASSERT_EQ(val.toInt(), 42);
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, GetValueWithDefaultReturnsStoredWhenPresent)
|
||||
{
|
||||
writeValue(settingsPath + "test.ini", "mykey", 99);
|
||||
|
||||
SettingsManager sm(settingsPath + "test.ini");
|
||||
QVariant val = sm.getValue("mykey", QString(), QString(), 42);
|
||||
ASSERT_EQ(val.toInt(), 99);
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, GetValueWithGroup)
|
||||
{
|
||||
writeValue(settingsPath + "grouped.ini", "group1/greeting", "world");
|
||||
|
||||
SettingsManager sm(settingsPath + "grouped.ini");
|
||||
QVariant val = sm.getValue("greeting", "group1");
|
||||
ASSERT_EQ(val.toString(), QString("world"));
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, GetValueWithGroupAndSubGroup)
|
||||
{
|
||||
writeValue(settingsPath + "nested.ini", "outer/inner/depth", 1);
|
||||
|
||||
SettingsManager sm(settingsPath + "nested.ini");
|
||||
QVariant val = sm.getValue("depth", "outer", "inner");
|
||||
ASSERT_EQ(val.toInt(), 1);
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, DefaultGroupUsedInGetValue)
|
||||
{
|
||||
writeValue(settingsPath + "defgroup.ini", "defaultGroup/key", "val");
|
||||
|
||||
SettingsManager sm(settingsPath + "defgroup.ini", "defaultGroup");
|
||||
QVariant val = sm.getValue("key");
|
||||
ASSERT_EQ(val.toString(), QString("val"));
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, DefaultGroupScopesGetValue)
|
||||
{
|
||||
writeValue(settingsPath + "scoped.ini", "key", "ungrouped");
|
||||
writeValue(settingsPath + "scoped.ini", "defaultGroup/key", "grouped");
|
||||
|
||||
SettingsManager sm(settingsPath + "scoped.ini", "defaultGroup");
|
||||
QVariant val = sm.getValue("key");
|
||||
ASSERT_EQ(val.toString(), QString("grouped"));
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, DefaultSubGroupUsedInGetValue)
|
||||
{
|
||||
writeValue(settingsPath + "sub.ini", "top/bottom/key", "nested");
|
||||
|
||||
SettingsManager sm(settingsPath + "sub.ini", "top", "bottom");
|
||||
QVariant val = sm.getValue("key");
|
||||
ASSERT_EQ(val.toString(), QString("nested"));
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, BatchWriteWritesAllValues)
|
||||
{
|
||||
SettingsManager sm(settingsPath + "batch.ini");
|
||||
sm.batchWrite([&](QSettings &qs) {
|
||||
qs.setValue("a", 1);
|
||||
qs.setValue("b", 2);
|
||||
qs.setValue("c", 3);
|
||||
});
|
||||
|
||||
SettingsManager sm2(settingsPath + "batch.ini");
|
||||
ASSERT_EQ(sm2.getValue("a", QString(), QString(), 0).toInt(), 1);
|
||||
ASSERT_EQ(sm2.getValue("b", QString(), QString(), 0).toInt(), 2);
|
||||
ASSERT_EQ(sm2.getValue("c", QString(), QString(), 0).toInt(), 3);
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, BatchWriteWithGroup)
|
||||
{
|
||||
SettingsManager sm(settingsPath + "batch_group.ini");
|
||||
sm.batchWrite([&](QSettings &qs) {
|
||||
qs.beginGroup("section");
|
||||
qs.setValue("x", 10);
|
||||
qs.endGroup();
|
||||
});
|
||||
|
||||
SettingsManager sm2(settingsPath + "batch_group.ini");
|
||||
ASSERT_EQ(sm2.getValue("x", "section", QString(), 0).toInt(), 10);
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, SyncPersistsToDisk)
|
||||
{
|
||||
QString filePath = settingsPath + "sync_test.ini";
|
||||
{
|
||||
SettingsManager sm(filePath);
|
||||
sm.batchWrite([&](QSettings &qs) { qs.setValue("persist", "yes"); });
|
||||
}
|
||||
{
|
||||
QSettings qs(filePath, QSettings::IniFormat);
|
||||
ASSERT_EQ(qs.value("persist").toString(), QString("yes"));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, MultipleReadsAfterWrite)
|
||||
{
|
||||
SettingsManager sm(settingsPath + "multi.ini");
|
||||
sm.batchWrite([&](QSettings &qs) { qs.setValue("k1", 1); });
|
||||
|
||||
QVariant v1 = sm.getValue("k1", QString(), QString(), 0);
|
||||
QVariant v2 = sm.getValue("nonexistent", QString(), QString(), 99);
|
||||
|
||||
ASSERT_EQ(v1.toInt(), 1);
|
||||
ASSERT_EQ(v2.toInt(), 99);
|
||||
}
|
||||
|
||||
TEST_F(SettingsManagerTest, ValuesDeletedViaQSettingsAreReadAsDefault)
|
||||
{
|
||||
writeValue(settingsPath + "del.ini", "deleteMe", "present");
|
||||
|
||||
SettingsManager sm(settingsPath + "del.ini");
|
||||
ASSERT_EQ(sm.getValue("deleteMe", QString(), QString(), "default").toString(), QString("present"));
|
||||
|
||||
// Delete via QSettings directly (deleteValue is protected)
|
||||
{
|
||||
QSettings qs(settingsPath + "del.ini", QSettings::IniFormat);
|
||||
qs.remove("deleteMe");
|
||||
}
|
||||
|
||||
ASSERT_EQ(sm.getValue("deleteMe", QString(), QString(), "default").toString(), QString("default"));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue