/* * The ManaPlus Client * Copyright (C) 2016-2020 The ManaPlus Developers * Copyright (C) 2020-2023 The ManaVerse Developers * * This file is part of The ManaPlus Client. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "unittests/unittests.h" #include "configuration.h" #include "configmanager.h" #include "dirs.h" #include "listeners/configlistener.h" #include "debug.h" namespace { int mCalled = 0; class TestConfigListener : public ConfigListener { public: void optionChanged(const std::string &name) override final { if (name == "testkey123") mCalled ++; } } testListener; } // namespace TEST_CASE("configuration tests", "configuration") { Dirs::initRootDir(); Dirs::initHomeDir(); ConfigManager::initConfiguration(); SECTION("configuration undefined") { const char *const key = "nonsetvalue"; REQUIRE(config.getValue(key, "not set") == "not set"); REQUIRE(config.getValue(key, 12345) == 12345); REQUIRE(config.getValue(key, 12345U) == 12345U); REQUIRE(config.getValueInt(key, 12345) == 12345); REQUIRE(config.getValueBool(key, false) == false); REQUIRE(config.getValueBool(key, true) == true); REQUIRE(config.getValue(key, -12345) == -12345); REQUIRE(config.getValue(key, 12.345) > 12.3); } SECTION("configuration getint default") { const char *const key = "sfxVolume"; REQUIRE(config.getIntValue(key) == 100); REQUIRE(config.getFloatValue(key) >= 100.0F); REQUIRE(config.getStringValue(key) == "100"); REQUIRE(config.getBoolValue(key) == true); } SECTION("configuration getfloat default") { const char *const key = "guialpha"; REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.8F); REQUIRE(config.getStringValue(key).substr(0, 3) == "0.8"); REQUIRE(config.getBoolValue(key) == false); } SECTION("configuration getstring default") { const char *const key = "soundwhisper"; REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.0F); REQUIRE(config.getStringValue(key) == "newmessage"); REQUIRE(config.getBoolValue(key) == true); } SECTION("configuration getbool default1") { const char *const key = "showgender"; REQUIRE(config.getIntValue(key) == 1); REQUIRE(config.getFloatValue(key) >= 1.0F); REQUIRE(config.getStringValue(key) == "1"); REQUIRE(config.getBoolValue(key) == true); } SECTION("configuration getbool default2") { const char *const key = "showlevel"; REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.0F); REQUIRE(config.getStringValue(key) == "0"); REQUIRE(config.getBoolValue(key) == false); } SECTION("configuration getint set") { const char *const key = "sfxVolume"; config.setValue(key, 50); REQUIRE(config.getIntValue(key) == 50); REQUIRE(config.getFloatValue(key) >= 50.0F); REQUIRE(config.getStringValue(key) == "50"); REQUIRE(config.getBoolValue(key) == true); REQUIRE(config.getValue(key, "not set") == "50"); REQUIRE(config.getValue(key, 12345) == 50); REQUIRE(config.getValue(key, 12345U) == 50U); REQUIRE(config.getValueInt(key, 12345) == 50); REQUIRE(config.getValueBool(key, false) == true); REQUIRE(config.getValueBool(key, true) == true); REQUIRE(config.getValue(key, -12345) == 50); REQUIRE(config.getValue(key, 12.345) >= 50.0); } SECTION("configuration getfloat set") { const char *const key = "guialpha"; config.setValue(key, 50.5); REQUIRE(config.getIntValue(key) == 50); REQUIRE(config.getFloatValue(key) >= 50.4F); REQUIRE(config.getStringValue(key).substr(0, 2) == "50"); REQUIRE(config.getBoolValue(key) == true); REQUIRE(config.getValue(key, "not set").substr(0, 2) == "50"); REQUIRE(config.getValue(key, 12345) == 50); REQUIRE(config.getValue(key, 12345U) == 50U); REQUIRE(config.getValueInt(key, 12345) == 50); REQUIRE(config.getValueBool(key, false) == true); REQUIRE(config.getValueBool(key, true) == true); REQUIRE(config.getValue(key, -12345) == 50); REQUIRE(config.getValue(key, 12.345) >= 50.4); } SECTION("configuration getstring set") { const char *const key = "soundwhisper"; config.setValue(key, "test line"); REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.0F); REQUIRE(config.getStringValue(key) == "test line"); REQUIRE(config.getBoolValue(key) == false); REQUIRE(config.getValue(key, "not set") == "test line"); REQUIRE(config.getValue(key, 12345) == 0); REQUIRE(config.getValue(key, 12345U) == 0U); REQUIRE(config.getValueInt(key, 12345) == 0); REQUIRE(config.getValueBool(key, false) == false); REQUIRE(config.getValueBool(key, true) == false); REQUIRE(config.getValue(key, -12345) == 0); REQUIRE(config.getValue(key, 12.345) >= 0.0); } SECTION("configuration getbool set1") { const char *const key = "showgender"; config.setValue(key, true); REQUIRE(config.getIntValue(key) == 1); REQUIRE(config.getFloatValue(key) >= 1.0F); REQUIRE(config.getStringValue(key) == "1"); REQUIRE(config.getBoolValue(key) == true); REQUIRE(config.getValue(key, "not set") == "1"); REQUIRE(config.getValue(key, 12345) == 1); REQUIRE(config.getValue(key, 12345U) == 1U); REQUIRE(config.getValueInt(key, 12345) == 1); REQUIRE(config.getValueBool(key, false) == true); REQUIRE(config.getValueBool(key, true) == true); REQUIRE(config.getValue(key, -12345) == 1); REQUIRE(config.getValue(key, 12.345) >= 1.0); } SECTION("configuration getbool set2") { const char *const key = "showgender"; config.setValue(key, false); REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.0F); REQUIRE(config.getStringValue(key) == "0"); REQUIRE(config.getBoolValue(key) == false); REQUIRE(config.getValue(key, "not set") == "0"); REQUIRE(config.getValue(key, 12345) == 0); REQUIRE(config.getValue(key, 12345U) == 0U); REQUIRE(config.getValueInt(key, 12345) == 0); REQUIRE(config.getValueBool(key, false) == false); REQUIRE(config.getValueBool(key, true) == false); REQUIRE(config.getValue(key, -12345) == 0); REQUIRE(config.getValue(key, 12.345) >= 0.0); } SECTION("configuration deletekey") { const char *const key = "testkey123"; config.setValue(key, 123); REQUIRE(config.getValueInt(key, 12345) == 123); config.deleteKey(key); REQUIRE(config.getValueInt(key, 12345) == 12345); } SECTION("configuration addlistener") { const char *const key = "testkey123"; REQUIRE(mCalled == 0); config.addListener(key, &testListener); REQUIRE(mCalled == 0); config.setValue(key, 123); REQUIRE(mCalled == 1); REQUIRE(config.getValueInt(key, 12345) == 123); REQUIRE(mCalled == 1); config.setValue(key, 123); REQUIRE(mCalled == 2); config.setSilent(key, true); REQUIRE(mCalled == 2); REQUIRE(config.getBoolValue(key) == true); REQUIRE(mCalled == 2); config.setSilent(key, false); REQUIRE(mCalled == 2); REQUIRE(config.getBoolValue(key) == false); REQUIRE(mCalled == 2); config.removeListener(key, &testListener); } SECTION("configuration incvalue") { const char *const key = "testkey123"; config.setValue(key, 10); REQUIRE(config.getValueInt(key, 12345) == 10); config.incValue(key); REQUIRE(config.getValueInt(key, 12345) == 11); } SECTION("configuration resetintvalue") { const char *const key = "sfxVolume"; config.setValue(key, 20); REQUIRE(config.getIntValue(key) == 20); REQUIRE(config.getFloatValue(key) >= 20.0F); REQUIRE(config.getStringValue(key) == "20"); REQUIRE(config.getBoolValue(key) == true); config.resetIntValue(key); REQUIRE(config.getIntValue(key) == 100); REQUIRE(config.getFloatValue(key) >= 100.0F); REQUIRE(config.getStringValue(key) == "100"); REQUIRE(config.getBoolValue(key) == true); } SECTION("configuration resetboolvalue1") { const char *const key = "showgender"; config.setValue(key, false); REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.0F); REQUIRE(config.getStringValue(key) == "0"); REQUIRE(config.getBoolValue(key) == false); config.resetBoolValue(key); REQUIRE(config.getIntValue(key) == 1); REQUIRE(config.getFloatValue(key) >= 1.0F); REQUIRE(config.getStringValue(key) == "1"); REQUIRE(config.getBoolValue(key) == true); } SECTION("configuration resetboolvalue2") { const char *const key = "showlevel"; config.setValue(key, true); REQUIRE(config.getIntValue(key) == 1); REQUIRE(config.getFloatValue(key) >= 1.0F); REQUIRE(config.getStringValue(key) == "1"); REQUIRE(config.getBoolValue(key) == true); config.resetBoolValue(key); REQUIRE(config.getIntValue(key) == 0); REQUIRE(config.getFloatValue(key) >= 0.0F); REQUIRE(config.getStringValue(key) == "0"); REQUIRE(config.getBoolValue(key) == false); } }