{lyn7283} added test for assetHint Json Serialzier callback logic (#4586)
* {lyn7283} adding unit test for the assetHint Json Serialzier callback logic
AssetTracker_Callback_Works will regress the functionality
Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com>
* clean up of the jsonRegistrationContext
Signed-off-by: jackalbe <23512001+jackalbe@users.noreply.github.com>
This commit is contained in:
@@ -64,6 +64,91 @@ namespace JsonSerializationTests
|
||||
|
||||
};
|
||||
|
||||
class TestSerializedAssetTracker
|
||||
: public BaseJsonSerializerFixture
|
||||
{
|
||||
public:
|
||||
void SetUp() override
|
||||
{
|
||||
BaseJsonSerializerFixture::SetUp();
|
||||
|
||||
AZ::AllocatorInstance<AZ::PoolAllocator>::Create();
|
||||
AZ::AllocatorInstance<AZ::ThreadPoolAllocator>::Create();
|
||||
|
||||
// Set up the Job Manager with 1 thread so that the Asset Manager is able to load assets.
|
||||
AZ::JobManagerDesc jobDesc;
|
||||
AZ::JobManagerThreadDesc threadDesc;
|
||||
jobDesc.m_workerThreads.push_back(threadDesc);
|
||||
m_jobManager = aznew AZ::JobManager(jobDesc);
|
||||
m_jobContext = aznew AZ::JobContext(*m_jobManager);
|
||||
AZ::JobContext::SetGlobalContext(m_jobContext);
|
||||
|
||||
AZ::Data::AssetManager::Descriptor descriptor;
|
||||
AZ::Data::AssetManager::Create(descriptor);
|
||||
AZ::Data::AssetManager::Instance().RegisterHandler(&m_assetHandler, azrtti_typeid<TestAssetData>());
|
||||
|
||||
m_serializeContext->RegisterGenericType<AZ::Data::Asset<TestAssetData>>();
|
||||
m_jsonRegistrationContext->Serializer<AZ::Data::AssetJsonSerializer>()->HandlesType<AZ::Data::Asset>();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
m_jsonRegistrationContext->EnableRemoveReflection();
|
||||
m_jsonRegistrationContext->Serializer<AZ::Data::AssetJsonSerializer>()->HandlesType<AZ::Data::Asset>();
|
||||
m_jsonRegistrationContext->DisableRemoveReflection();
|
||||
|
||||
AZ::Data::AssetManager::Instance().UnregisterHandler(&m_assetHandler);
|
||||
AZ::Data::AssetManager::Destroy();
|
||||
|
||||
AZ::JobContext::SetGlobalContext(nullptr);
|
||||
delete m_jobContext;
|
||||
delete m_jobManager;
|
||||
|
||||
AZ::AllocatorInstance<AZ::ThreadPoolAllocator>::Destroy();
|
||||
AZ::AllocatorInstance<AZ::PoolAllocator>::Destroy();
|
||||
|
||||
BaseJsonSerializerFixture::TearDown();
|
||||
}
|
||||
|
||||
private:
|
||||
TestAssetHandler m_assetHandler;
|
||||
AZ::JobManager* m_jobManager{ nullptr };
|
||||
AZ::JobContext* m_jobContext{ nullptr };
|
||||
};
|
||||
|
||||
TEST_F(TestSerializedAssetTracker, AssetTracker_Callback_Works)
|
||||
{
|
||||
auto assetCallback = [](AZ::Data::Asset<AZ::Data::AssetData>& asset)
|
||||
{
|
||||
if (!asset.GetId().IsValid() && !asset.GetHint().empty())
|
||||
{
|
||||
if (asset.GetHint() == "test/path/foo.asset")
|
||||
{
|
||||
asset.SetHint("passed");
|
||||
}
|
||||
}
|
||||
};
|
||||
auto tracker = AZ::Data::SerializedAssetTracker{};
|
||||
tracker.SetAssetFixUp(assetCallback);
|
||||
|
||||
AZ::JsonDeserializerSettings settings;
|
||||
settings.m_metadata.Add(tracker);
|
||||
settings.m_registrationContext = this->m_jsonRegistrationContext.get();
|
||||
settings.m_serializeContext = this->m_serializeContext.get();
|
||||
|
||||
AZStd::string_view assetHintOnlyTestAsset = R"(
|
||||
{
|
||||
"assetHint" : "test/path/foo.asset"
|
||||
})";
|
||||
rapidjson::Document jsonDom;
|
||||
jsonDom.Parse(assetHintOnlyTestAsset.data());
|
||||
|
||||
AZ::Data::Asset<TestAssetData> instance;
|
||||
auto result = AZ::JsonSerialization::Load(instance, jsonDom, settings);
|
||||
EXPECT_NE(result.GetProcessing(), AZ::JsonSerializationResult::Processing::Halted);
|
||||
EXPECT_STREQ(instance.GetHint().c_str(), "passed");
|
||||
}
|
||||
|
||||
class AssetSerializerTestDescription final
|
||||
: public JsonSerializerConformityTestDescriptor<AZ::Data::Asset<TestAssetData>>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user