SliceStabilityReParentTests.cpp 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Tests/SliceStabilityTests/SliceStabilityTestFramework.h>
  9. #include <AzToolsFramework/ToolsComponents/TransformComponent.h>
  10. namespace UnitTest
  11. {
  12. TEST_F(SliceStabilityTest, ReParent_SliceEntityMovedFromOneInstanceToAnother_EntityIDRemainsTheSame_FT)
  13. {
  14. AUTO_RESULT_IF_SETTING_TRUE(UnitTest::prefabSystemSetting, true)
  15. AzToolsFramework::EntityIdList instance1Entities;
  16. AZ::EntityId instance1Root = CreateEditorEntity("Slice1Root", instance1Entities);
  17. ASSERT_TRUE(instance1Root.IsValid());
  18. AZ::EntityId instance1Child = CreateEditorEntity("Slice1Child", instance1Entities, instance1Root);
  19. ASSERT_TRUE(instance1Child.IsValid());
  20. EXPECT_TRUE(m_validator.Capture(instance1Entities));
  21. AZ::SliceComponent::SliceInstanceAddress slice1InstanceAddress;
  22. AZ::Data::AssetId slice1Asset = CreateSlice("Slice1", instance1Entities, slice1InstanceAddress);
  23. ASSERT_TRUE(slice1Asset.IsValid());
  24. EXPECT_TRUE(m_validator.Compare(slice1InstanceAddress));
  25. AzToolsFramework::EntityIdList instance2Entities;
  26. AZ::EntityId instance2Root = CreateEditorEntity("Slice2Root", instance2Entities);
  27. ASSERT_TRUE(instance2Root.IsValid());
  28. AZ::SliceComponent::SliceInstanceAddress slice2InstanceAddress;
  29. ASSERT_TRUE(CreateSlice("Slice2", instance2Entities, slice2InstanceAddress).IsValid());
  30. ReparentEntity(instance1Child, instance2Root);
  31. AzToolsFramework::EntityIdList instance2RootChildren;
  32. AZ::TransformBus::EventResult(instance2RootChildren, instance2Root, &AZ::TransformBus::Events::GetChildren);
  33. ASSERT_EQ(instance2RootChildren.size(), 1);
  34. ASSERT_EQ(instance2RootChildren[0], instance1Child);
  35. }
  36. /*
  37. Even though we are not explicitly reparenting here,creating a nested slice from a slice instance reparents the slice internally.
  38. Therefore, this test belongs in this class.
  39. */
  40. TEST_F(SliceStabilityTest, ReParent_NestedSliceCreatedFromSliceInstanceChild_SliceHierarchyRemainsSame_FT)
  41. {
  42. AUTO_RESULT_IF_SETTING_TRUE(UnitTest::prefabSystemSetting, true)
  43. AzToolsFramework::EntityIdList instance1Entities;
  44. AZ::EntityId instance1Root = CreateEditorEntity("Slice1Root", instance1Entities);
  45. ASSERT_TRUE(instance1Root.IsValid());
  46. AZ::EntityId instance1Child = CreateEditorEntity("Slice1Child", instance1Entities, instance1Root);
  47. ASSERT_TRUE(instance1Child.IsValid());
  48. EXPECT_TRUE(m_validator.Capture(instance1Entities));
  49. AZ::SliceComponent::SliceInstanceAddress slice1InstanceAddress;
  50. AZ::Data::AssetId slice1Asset = CreateSlice("Slice1", instance1Entities, slice1InstanceAddress);
  51. ASSERT_TRUE(slice1Asset.IsValid());
  52. EXPECT_TRUE(m_validator.Compare(slice1InstanceAddress));
  53. m_validator.Reset();
  54. AzToolsFramework::EntityIdList nestedSliceEntities = AzToolsFramework::EntityIdList{ instance1Child };
  55. EXPECT_TRUE(m_validator.Capture(nestedSliceEntities));
  56. AZ::SliceComponent::SliceInstanceAddress nestedSliceInstanceAddress;
  57. AZ::Data::AssetId nestedSliceAsset =
  58. CreateSlice("NestedSlice", nestedSliceEntities, nestedSliceInstanceAddress);
  59. ASSERT_TRUE(nestedSliceAsset.IsValid());
  60. EXPECT_TRUE(m_validator.Compare(nestedSliceInstanceAddress));
  61. const AZ::SliceComponent::EntityList nestedSliceInstanceEntities =
  62. nestedSliceInstanceAddress.GetInstance()->GetInstantiated()->m_entities;
  63. EXPECT_EQ(nestedSliceInstanceEntities.size(), 1);
  64. AZ::EntityId nestedSliceRootParentId;
  65. AZ::TransformBus::EventResult(nestedSliceRootParentId, nestedSliceInstanceEntities[0]->GetId(), &AZ::TransformBus::Events::GetParentId);
  66. // Validate that the parent of nested slice root is the same as the parent of the instance it was created from.
  67. EXPECT_EQ(instance1Root, nestedSliceRootParentId);
  68. }
  69. }