Files
XCEngine/tests/editor/test_project_graphics_settings.cpp

114 lines
4.2 KiB
C++

#include <gtest/gtest.h>
#include "Utils/ProjectFileUtils.h"
#include "Utils/ProjectGraphicsSettings.h"
#include <chrono>
#include <filesystem>
namespace XCEngine::Editor::ProjectGraphicsSettings {
namespace {
class ProjectGraphicsSettingsTest : public ::testing::Test {
protected:
void SetUp() override {
const auto stamp = std::chrono::steady_clock::now()
.time_since_epoch()
.count();
m_projectRoot =
std::filesystem::temp_directory_path() /
("xc_project_graphics_settings_" + std::to_string(stamp));
std::filesystem::create_directories(m_projectRoot);
}
void TearDown() override {
std::error_code ec;
std::filesystem::remove_all(m_projectRoot, ec);
}
std::filesystem::path m_projectRoot;
::XCEngine::Rendering::GraphicsSettingsState m_state;
};
TEST_F(ProjectGraphicsSettingsTest, BuildsDescriptorFromNativeSelection) {
::XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor
nativeDescriptor = {};
nativeDescriptor.assemblyName = "GameScripts";
nativeDescriptor.namespaceName = "Gameplay";
nativeDescriptor.className = "ManagedForwardRenderPipelineProbeAsset";
nativeDescriptor.managedAssetHandle = 77u;
m_state.SetRenderPipelineAssetDescriptor(nativeDescriptor);
const auto descriptor = BuildDescriptor(m_state);
EXPECT_EQ(descriptor.renderPipelineAssetAssembly, "GameScripts");
EXPECT_EQ(descriptor.renderPipelineAssetNamespace, "Gameplay");
EXPECT_EQ(
descriptor.renderPipelineAssetClass,
"ManagedForwardRenderPipelineProbeAsset");
}
TEST_F(ProjectGraphicsSettingsTest, SavesNativeSelectionIntoProjectSettingsFile) {
::XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor
nativeDescriptor = {};
nativeDescriptor.assemblyName = "GameScripts";
nativeDescriptor.namespaceName = "Gameplay";
nativeDescriptor.className = "ManagedForwardRenderPipelineProbeAsset";
nativeDescriptor.managedAssetHandle = 88u;
m_state.SetRenderPipelineAssetDescriptor(nativeDescriptor);
ASSERT_TRUE(SaveSelection(m_projectRoot.string(), m_state));
const auto loaded =
ProjectFileUtils::LoadProjectGraphicsSettings(m_projectRoot.string());
ASSERT_TRUE(loaded.has_value());
EXPECT_EQ(loaded->renderPipelineAssetAssembly, "GameScripts");
EXPECT_EQ(loaded->renderPipelineAssetNamespace, "Gameplay");
EXPECT_EQ(
loaded->renderPipelineAssetClass,
"ManagedForwardRenderPipelineProbeAsset");
}
TEST_F(
ProjectGraphicsSettingsTest,
AppliesProjectSettingsSelectionIntoNativeState) {
ProjectFileUtils::GraphicsSettingsDescriptor savedDescriptor;
savedDescriptor.renderPipelineAssetAssembly = "GameScripts";
savedDescriptor.renderPipelineAssetNamespace = "Gameplay";
savedDescriptor.renderPipelineAssetClass =
"ManagedForwardRenderPipelineProbeAsset";
ASSERT_TRUE(ProjectFileUtils::SaveProjectGraphicsSettings(
m_projectRoot.string(),
savedDescriptor));
ApplySelection(m_projectRoot.string(), m_state);
const auto nativeDescriptor = m_state.GetRenderPipelineAssetDescriptor();
EXPECT_EQ(nativeDescriptor.assemblyName, "GameScripts");
EXPECT_EQ(nativeDescriptor.namespaceName, "Gameplay");
EXPECT_EQ(
nativeDescriptor.className,
"ManagedForwardRenderPipelineProbeAsset");
EXPECT_EQ(nativeDescriptor.managedAssetHandle, 0u);
}
TEST_F(
ProjectGraphicsSettingsTest,
ClearsNativeSelectionWhenProjectSettingsFileIsMissing) {
::XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor
nativeDescriptor = {};
nativeDescriptor.assemblyName = "GameScripts";
nativeDescriptor.className = "ManagedForwardRenderPipelineProbeAsset";
nativeDescriptor.managedAssetHandle = 99u;
m_state.SetRenderPipelineAssetDescriptor(nativeDescriptor);
ApplySelection(m_projectRoot.string(), m_state);
EXPECT_FALSE(m_state.GetRenderPipelineAssetDescriptor().IsValid());
EXPECT_EQ(
m_state.GetRenderPipelineAssetDescriptor().managedAssetHandle,
0u);
}
} // namespace
} // namespace XCEngine::Editor::ProjectGraphicsSettings