mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
4.1 KiB
C++
121 lines
4.1 KiB
C++
#include "components/misc/strings/conversion.hpp"
|
|
#include "components/settings/parser.hpp"
|
|
#include "components/settings/values.hpp"
|
|
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#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)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
EXPECT_EQ(values.mCamera.mFieldOfView.get(), 60);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, shouldFillIndexOnLoad)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
EXPECT_EQ(index.get<float>("Camera", "field of view").get(), 60);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, constructorShouldThrowExceptionOnMissingSetting)
|
|
{
|
|
Manager::mDefaultSettings.erase({ "Camera", "field of view" });
|
|
Index index;
|
|
EXPECT_THROW([&] { Values values(index); }(), std::runtime_error);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, constructorShouldSanitize)
|
|
{
|
|
Manager::mUserSettings[std::make_pair("Camera", "field of view")] = "-1";
|
|
Index index;
|
|
Values values(index);
|
|
EXPECT_EQ(values.mCamera.mFieldOfView.get(), 1);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, moveConstructorShouldSetDefaults)
|
|
{
|
|
Index index;
|
|
Values defaultValues(index);
|
|
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)
|
|
{
|
|
Index index;
|
|
Values defaultValues(index);
|
|
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, findShouldThrowExceptionOnTypeMismatch)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
EXPECT_THROW(index.find<int>("Camera", "field of view"), std::invalid_argument);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, findShouldReturnNullptrForAbsentSetting)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
EXPECT_EQ(index.find<int>("foo", "bar"), nullptr);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, getShouldThrowExceptionForAbsentSetting)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
EXPECT_THROW(index.get<int>("foo", "bar").get(), std::invalid_argument);
|
|
}
|
|
|
|
TEST_F(SettingsValuesTest, setShouldChangeManagerUserSettings)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
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)
|
|
{
|
|
Index index;
|
|
Values values(index);
|
|
values.mCamera.mFieldOfView.set(values.mCamera.mFieldOfView.get());
|
|
EXPECT_THAT(Manager::mChangedSettings, ElementsAre());
|
|
}
|
|
}
|
|
}
|