You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Framework/AzToolsFramework/Tests/Prefab/PrefabTestDataUtils.cpp

148 lines
6.5 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Prefab/PrefabTestDataUtils.h>
#include <AzToolsFramework/Prefab/PrefabDomTypes.h>
#include <AzToolsFramework/Prefab/PrefabSystemComponentInterface.h>
#include <AzToolsFramework/Prefab/PrefabDomUtils.h>
#include <AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h>
#include <Prefab/PrefabTestDomUtils.h>
namespace UnitTest
{
namespace PrefabTestDataUtils
{
using namespace AzToolsFramework::Prefab;
LinkData CreateLinkData(
const InstanceData& instanceData,
const TemplateId& sourceTemplateId,
const TemplateId& targetTemplateId)
{
LinkData newLinkData;
newLinkData.m_instanceData = instanceData;
newLinkData.m_sourceTemplateId = sourceTemplateId;
newLinkData.m_targetTemplateId = targetTemplateId;
return newLinkData;
}
InstanceData CreateInstanceDataWithNoPatches(
const AZStd::string& name,
AZ::IO::PathView source)
{
InstanceData newInstanceData;
newInstanceData.m_name = name;
newInstanceData.m_source = source;
return newInstanceData;
}
void ValidateTemplateLoad(
const TemplateData& expectedTemplateData)
{
PrefabSystemComponentInterface* prefabSystemComponent = AZ::Interface<PrefabSystemComponentInterface>::Get();
ASSERT_TRUE(prefabSystemComponent != nullptr);
ASSERT_TRUE(expectedTemplateData.m_id != InvalidTemplateId);
auto templateReference = prefabSystemComponent->FindTemplate(expectedTemplateData.m_id);
ASSERT_TRUE(templateReference.has_value());
auto& actualTemplate = templateReference->get();
EXPECT_EQ(expectedTemplateData.m_filePath, actualTemplate.GetFilePath());
EXPECT_EQ(expectedTemplateData.m_isValid, actualTemplate.IsValid());
EXPECT_EQ(expectedTemplateData.m_isLoadedWithErrors, actualTemplate.IsLoadedWithErrors());
auto& actualInstancesLinkIds = actualTemplate.GetLinks();
EXPECT_EQ(expectedTemplateData.m_instancesData.size(), actualInstancesLinkIds.size());
for (auto& actualLinkId : actualInstancesLinkIds)
{
auto linkReference = prefabSystemComponent->FindLink(actualLinkId);
ASSERT_TRUE(linkReference.has_value());
auto& actualLink = linkReference->get();
AZStd::string actualLinkName(actualLink.GetInstanceName());
EXPECT_EQ(expectedTemplateData.m_instancesData.count(actualLinkName), 1);
auto& expectedInstanceData = expectedTemplateData.m_instancesData.find(actualLinkName)->second;
EXPECT_EQ(expectedTemplateData.m_id, actualLink.GetTargetTemplateId());
EXPECT_EQ(expectedInstanceData.m_name, actualLinkName);
EXPECT_EQ(
PrefabTestDomUtils::GetPrefabDomInstancePath(expectedInstanceData.m_name.c_str()),
actualLink.GetInstancePath());
ValidateTemplatePatches(actualLink, expectedInstanceData.m_patches);
}
}
void ValidateTemplatePatches(const Link& actualLink, const PrefabDom& expectedTemplatePatches)
{
PrefabDomValueConstReference patchesReference =
PrefabDomUtils::FindPrefabDomValue(actualLink.GetLinkDom(), PrefabDomUtils::PatchesName);
if (!expectedTemplatePatches.IsNull())
{
EXPECT_EQ(AZ::JsonSerialization::Compare(expectedTemplatePatches, patchesReference->get()),
AZ::JsonSerializerCompareResult::Equal);
}
else
{
EXPECT_FALSE(patchesReference.has_value());
}
}
void CheckIfTemplatesConnected(
const TemplateData& expectedSourceTemplateData,
const TemplateData& expectedTargetTemplateData,
const LinkData& expectedLinkData)
{
ValidateTemplateLoad(expectedSourceTemplateData);
ValidateTemplateLoad(expectedTargetTemplateData);
PrefabSystemComponentInterface* prefabSystemComponent = AZ::Interface<PrefabSystemComponentInterface>::Get();
ASSERT_TRUE(prefabSystemComponent != nullptr);
auto& actualSourceTemplate =
prefabSystemComponent->FindTemplate(expectedSourceTemplateData.m_id)->get();
auto& actualTargetTemplate =
prefabSystemComponent->FindTemplate(expectedTargetTemplateData.m_id)->get();
EXPECT_EQ(expectedLinkData.m_instanceData.m_source, actualSourceTemplate.GetFilePath());
auto& actualTargetTemplateLinkIds = actualTargetTemplate.GetLinks();
EXPECT_EQ(expectedTargetTemplateData.m_instancesData.size(), actualTargetTemplateLinkIds.size());
bool expectedLinkFound = false;
for (auto actualTargetTemplateLinkId : actualTargetTemplateLinkIds)
{
auto linkReference = prefabSystemComponent->FindLink(actualTargetTemplateLinkId);
ASSERT_TRUE(linkReference.has_value());
auto& actualLink = linkReference->get();
if (expectedLinkData.m_instanceData.m_name == actualLink.GetInstanceName())
{
EXPECT_EQ(expectedLinkData.m_isValid, actualLink.IsValid());
EXPECT_EQ(expectedLinkData.m_sourceTemplateId, actualLink.GetSourceTemplateId());
EXPECT_EQ(expectedLinkData.m_targetTemplateId, actualLink.GetTargetTemplateId());
ValidateTemplatePatches(actualLink, expectedLinkData.m_instanceData.m_patches);
EXPECT_EQ(
PrefabTestDomUtils::GetPrefabDomInstancePath(expectedLinkData.m_instanceData.m_name.c_str()),
actualLink.GetInstancePath());
expectedLinkFound = true;
break;
}
}
EXPECT_TRUE(expectedLinkFound);
}
}
}