mirror of
https://github.com/steredbits/pelagia.git
synced 2026-10-17 21:01:34 +02:00
43 lines
1.6 KiB
C++
43 lines
1.6 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// Copyright (C) 2026 steredbits and Pelagia contributors
|
|
// User settings file (interface language).
|
|
|
|
#include <string>
|
|
|
|
#include "memory_file_store.h"
|
|
#include "test_framework.h"
|
|
#include "ui/settings_store.h"
|
|
|
|
int main() {
|
|
using util::LanguageSetting;
|
|
|
|
// Serialization.
|
|
ui::Settings settings;
|
|
CHECK(settings.language == LanguageSetting::Auto);
|
|
CHECK_EQ(ui::SettingsStore::to_json(settings), "{\"language\":\"auto\"}");
|
|
settings.language = LanguageSetting::French;
|
|
CHECK_EQ(ui::SettingsStore::to_json(settings), "{\"language\":\"fr\"}");
|
|
|
|
ui::Settings parsed;
|
|
CHECK(ui::SettingsStore::from_json("{\"language\":\"en\"}", &parsed));
|
|
CHECK(parsed.language == LanguageSetting::English);
|
|
// Unknown value or missing key: defaults kept; invalid JSON: refused.
|
|
ui::Settings other;
|
|
CHECK(ui::SettingsStore::from_json("{\"language\":\"klingon\"}", &other));
|
|
CHECK(other.language == LanguageSetting::Auto);
|
|
CHECK(ui::SettingsStore::from_json("{}", &other));
|
|
CHECK(!ui::SettingsStore::from_json("not json", &other));
|
|
|
|
// File: absent -> defaults; saved -> read back; corrupt -> defaults.
|
|
MemoryFileStore files;
|
|
ui::SettingsStore store(&files, "/cfg");
|
|
CHECK_EQ(store.path(), "/cfg/settings.json");
|
|
CHECK(store.load().language == LanguageSetting::Auto);
|
|
settings.language = LanguageSetting::English;
|
|
CHECK(store.save(settings));
|
|
CHECK(store.load().language == LanguageSetting::English);
|
|
CHECK(files.write("/cfg/settings.json", "garbage", false));
|
|
CHECK(store.load().language == LanguageSetting::Auto);
|
|
return testfw::test_failures();
|
|
}
|