{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:
Allen Jackson
2021-10-11 09:55:28 -05:00
committed by GitHub
parent 2d7dfe5047
commit 3b89f7e1cd
@@ -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>>
{