PrefabOverridePublicInterfaceTests.cpp 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 <AzToolsFramework/ToolsComponents/TransformComponent.h>
  9. #include <Prefab/Overrides/PrefabOverrideTestFixture.h>
  10. namespace UnitTest
  11. {
  12. using PrefabOverridePublicInterfaceTest = PrefabOverrideTestFixture;
  13. TEST_F(PrefabOverridePublicInterfaceTest, AreOverridesPresentWorksWithOverrideFromImmediateParent)
  14. {
  15. AZ::EntityId newEntityId, parentContainerId, grandparentContainerId;
  16. CreateEntityInNestedPrefab(newEntityId, parentContainerId, grandparentContainerId);
  17. CreateAndValidateEditEntityOverride(newEntityId, grandparentContainerId);
  18. }
  19. TEST_F(PrefabOverridePublicInterfaceTest, AreOverridesPresentWorksWithOverrideFromLevel)
  20. {
  21. AZ::EntityId newEntityId, parentContainerId, grandparentContainerId;
  22. CreateEntityInNestedPrefab(newEntityId, parentContainerId, grandparentContainerId);
  23. AZ::EntityId levelContainerId = m_prefabEditorEntityOwnershipInterface->GetRootPrefabInstance()->get().GetContainerEntityId();
  24. CreateAndValidateEditEntityOverride(newEntityId, levelContainerId);
  25. }
  26. TEST_F(PrefabOverridePublicInterfaceTest, AreOverridesPresentReturnsFalseWhenNoOverride)
  27. {
  28. AZ::EntityId newEntityId, parentContainerId, grandparentContainerId;
  29. CreateEntityInNestedPrefab(newEntityId, parentContainerId, grandparentContainerId);
  30. EditEntityAndValidateNoOverride(newEntityId);
  31. }
  32. TEST_F(PrefabOverridePublicInterfaceTest, RevertOverridesOnEntityWithOverrides)
  33. {
  34. AZ::EntityId newEntityId, parentContainerId, grandparentContainerId;
  35. CreateEntityInNestedPrefab(newEntityId, parentContainerId, grandparentContainerId);
  36. m_prefabFocusPublicInterface->FocusOnOwningPrefab(grandparentContainerId);
  37. // Modify the transform component.
  38. AZ::TransformBus::Event(newEntityId, &AZ::TransformInterface::SetWorldX, 10.0f);
  39. m_prefabPublicInterface->GenerateUndoNodesForEntityChangeAndUpdateCache(newEntityId, m_undoStack->GetTop());
  40. PropagateAllTemplateChanges();
  41. // Validate that overrides are present on the entity.
  42. ASSERT_TRUE(m_prefabOverridePublicInterface->AreOverridesPresent(newEntityId));
  43. // Revert the overrides on the entity.
  44. EXPECT_TRUE(m_prefabOverridePublicInterface->RevertOverrides(newEntityId));
  45. PropagateAllTemplateChanges();
  46. // Validate that overrides are absent upon reverting.
  47. EXPECT_FALSE(m_prefabOverridePublicInterface->AreOverridesPresent(newEntityId));
  48. float worldX;
  49. AZ::TransformBus::EventResult(worldX, newEntityId, &AZ::TransformInterface::GetWorldX);
  50. EXPECT_EQ(worldX, 0.0f);
  51. Undo();
  52. EXPECT_TRUE(m_prefabOverridePublicInterface->AreOverridesPresent(newEntityId));
  53. AZ::TransformBus::EventResult(worldX, newEntityId, &AZ::TransformInterface::GetWorldX);
  54. EXPECT_EQ(worldX, 10.0f);
  55. Redo();
  56. EXPECT_FALSE(m_prefabOverridePublicInterface->AreOverridesPresent(newEntityId));
  57. AZ::TransformBus::EventResult(worldX, newEntityId, &AZ::TransformInterface::GetWorldX);
  58. EXPECT_EQ(worldX, 0.0f);
  59. // Second undo to validate that override subtree was populated back in previous redo.
  60. Undo();
  61. EXPECT_TRUE(m_prefabOverridePublicInterface->AreOverridesPresent(newEntityId));
  62. AZ::TransformBus::EventResult(worldX, newEntityId, &AZ::TransformInterface::GetWorldX);
  63. EXPECT_EQ(worldX, 10.0f);
  64. }
  65. TEST_F(PrefabOverridePublicInterfaceTest, RevertOverridesOnEntityWithoutOverrides)
  66. {
  67. AZ::EntityId newEntityId, parentContainerId, grandparentContainerId;
  68. CreateEntityInNestedPrefab(newEntityId, parentContainerId, grandparentContainerId);
  69. m_prefabFocusPublicInterface->FocusOnOwningPrefab(grandparentContainerId);
  70. // Validate that overrides are present on the entity.
  71. ASSERT_FALSE(m_prefabOverridePublicInterface->AreOverridesPresent(newEntityId));
  72. // RevertOverrides should return false since there are no overrides on the entity.
  73. EXPECT_FALSE(m_prefabOverridePublicInterface->RevertOverrides(newEntityId));
  74. }
  75. } // namespace UnitTest