#include #include "Utils/ProjectFileUtils.h" #include "Utils/ProjectGraphicsSettings.h" #include #include 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.SetConfiguredRenderPipelineAssetDescriptor(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.SetConfiguredRenderPipelineAssetDescriptor(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.GetConfiguredRenderPipelineAssetDescriptor(); 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.SetConfiguredRenderPipelineAssetDescriptor(nativeDescriptor); ApplySelection(m_projectRoot.string(), m_state); EXPECT_FALSE(m_state.GetConfiguredRenderPipelineAssetDescriptor().IsValid()); EXPECT_EQ( m_state.GetConfiguredRenderPipelineAssetDescriptor().managedAssetHandle, 0u); } } // namespace } // namespace XCEngine::Editor::ProjectGraphicsSettings