diff --git a/apps/openmw_test_suite/CMakeLists.txt b/apps/openmw_test_suite/CMakeLists.txt index 7af6520f35..9f4df61368 100644 --- a/apps/openmw_test_suite/CMakeLists.txt +++ b/apps/openmw_test_suite/CMakeLists.txt @@ -57,6 +57,7 @@ file(GLOB UNITTEST_SRC_FILES settings/parser.cpp settings/shadermanager.cpp + settings/testvalues.cpp shader/parsedefines.cpp shader/parsefors.cpp diff --git a/apps/openmw_test_suite/settings/testvalues.cpp b/apps/openmw_test_suite/settings/testvalues.cpp new file mode 100644 index 0000000000..38154ae039 --- /dev/null +++ b/apps/openmw_test_suite/settings/testvalues.cpp @@ -0,0 +1,85 @@ +#include "components/misc/strings/conversion.hpp" +#include "components/settings/parser.hpp" +#include "components/settings/values.hpp" + +#include +#include + +#ifndef OPENMW_PROJECT_SOURCE_DIR +#define OPENMW_PROJECT_SOURCE_DIR "." +#endif + +namespace Settings +{ + namespace + { + using namespace testing; + + struct SettingsValuesTest : Test + { + const std::filesystem::path mSettingsDefaultPath = std::filesystem::path{ OPENMW_PROJECT_SOURCE_DIR } + / "files" / Misc::StringUtils::stringToU8String("settings-default.cfg"); + + SettingsValuesTest() + { + Manager::mDefaultSettings.clear(); + Manager::mUserSettings.clear(); + Manager::mChangedSettings.clear(); + SettingsFileParser parser; + parser.loadSettingsFile(mSettingsDefaultPath, Manager::mDefaultSettings); + } + }; + + TEST_F(SettingsValuesTest, shouldLoadFromSettingsManager) + { + Values values; + EXPECT_EQ(values.mCamera.mFieldOfView.get(), 60); + } + + TEST_F(SettingsValuesTest, constructorShouldThrowExceptionOnMissingSetting) + { + Manager::mDefaultSettings.erase({ "Camera", "field of view" }); + EXPECT_THROW([] { Values values; }(), std::runtime_error); + } + + TEST_F(SettingsValuesTest, constructorShouldSanitize) + { + Manager::mUserSettings[std::make_pair("Camera", "field of view")] = "-1"; + Values values; + EXPECT_EQ(values.mCamera.mFieldOfView.get(), 1); + } + + TEST_F(SettingsValuesTest, moveConstructorShouldSetDefaults) + { + Values defaultValues; + Manager::mUserSettings.emplace(std::make_pair("Camera", "field of view"), "61"); + Values values(std::move(defaultValues)); + EXPECT_EQ(values.mCamera.mFieldOfView.get(), 61); + values.mCamera.mFieldOfView.reset(); + EXPECT_EQ(values.mCamera.mFieldOfView.get(), 60); + } + + TEST_F(SettingsValuesTest, moveConstructorShouldSanitize) + { + Values defaultValues; + Manager::mUserSettings[std::make_pair("Camera", "field of view")] = "-1"; + Values values(std::move(defaultValues)); + EXPECT_EQ(values.mCamera.mFieldOfView.get(), 1); + } + + TEST_F(SettingsValuesTest, setShouldChangeManagerUserSettings) + { + Values values; + values.mCamera.mFieldOfView.set(42); + EXPECT_EQ(Manager::mUserSettings.at({ "Camera", "field of view" }), "42"); + EXPECT_THAT(Manager::mChangedSettings, ElementsAre(std::make_pair("Camera", "field of view"))); + } + + TEST_F(SettingsValuesTest, setShouldNotChangeManagerChangedSettingsForNoChange) + { + Values values; + values.mCamera.mFieldOfView.set(values.mCamera.mFieldOfView.get()); + EXPECT_THAT(Manager::mChangedSettings, ElementsAre()); + } + } +}