114 lines
4.2 KiB
C++
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
|