/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace UnitTest { using namespace AZ; class PassBuilderTests : public BuilderTestFixture { protected: RPI::PassAssetHandler* m_assetHandler; void SetUp() override { BuilderTestFixture::SetUp(); m_assetHandler = new RPI::PassAssetHandler(); m_assetHandler->m_serializeContext = m_context.get(); m_assetHandler->Register(); } void TearDown() override { m_assetHandler->Unregister(); delete m_assetHandler; BuilderTestFixture::TearDown(); } template void SaveAssetToFile(T& data, const char* saveFileName) { Utils::SaveObjectToFile(saveFileName, AZ::DataStream::ST_XML, &data, T::TYPEINFO_Uuid(), m_context.get()); } Data::Asset LoadAssetFromFile(const char* assetFile) { Data::Asset outAsset(m_assetHandler->CreateAsset(Data::AssetId(Uuid::CreateRandom(), 1), Data::AssetType()), Data::AssetLoadBehavior::PreLoad); AZ::u64 fileLength = 0; AZ::IO::FileIOBase::GetInstance()->Size(assetFile, fileLength); AZStd::shared_ptr stream = AZStd::make_shared(); stream->Open(assetFile, 0, fileLength); stream->BlockUntilLoadComplete(); m_assetHandler->LoadAssetData(outAsset, stream, {}); return outAsset; } void SetPassTemplateForTestingOnly(RPI::PassAsset& passAsset, RPI::PassTemplate& passTemplate) { passAsset.SetPassTemplateForTestingOnly(passTemplate); } }; TEST_F(PassBuilderTests, ProcessJob) { // Basic test: test data before and after are same. Test data class doesn't have converter or asset reference. AssetBuilderSDK::ProcessJobRequest request; // Initial job request const char* testAssetPath = "PassTestAsset.pass"; request.m_fullPath = testAssetPath; request.m_tempDirPath = m_currentDir; // Dummy pass template RPI::PassTemplate passTemplate; passTemplate.m_name = "TemplateTestName"; // Dummy pass data with random asset ID to test asset dependency AZStd::shared_ptr passData = AZStd::make_shared(); passData->m_shaderAsset.m_assetId = Data::AssetId(Uuid::CreateRandom(), 1); passTemplate.m_passData = passData; // Create and write pass data RPI::PassAsset passAsset; SetPassTemplateForTestingOnly(passAsset, passTemplate); JsonSerializationUtils::SaveObjectToFile(&passAsset, testAssetPath); // Process job RPI::PassBuilder builder; AssetBuilderSDK::ProcessJobResponse response; builder.ProcessJob(request, response); // Verify job success EXPECT_TRUE(response.m_resultCode == AssetBuilderSDK::ProcessJobResult_Success); EXPECT_TRUE(response.m_outputProducts.size() == 1); // Verify input and output names are the same Data::Asset readAsset = LoadAssetFromFile(response.m_outputProducts[0].m_productFileName.c_str()); RPI::PassAsset* readPassAsset = static_cast(readAsset.GetData()); EXPECT_TRUE(passTemplate.m_name == readPassAsset->GetPassTemplate()->m_name); } } // namespace UnitTests