/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include #include #include namespace UnitTest { using namespace AZ; using namespace AzFramework; class EntityContextBasicTest : public ScopedAllocatorSetupFixture , public EntityContextEventBus::Handler { public: EntityContextBasicTest() { } void SetUp() override { AllocatorInstance::Create(); AllocatorInstance::Create(); Data::AssetManager::Descriptor desc; Data::AssetManager::Create(desc); } ~EntityContextBasicTest() override { } void TearDown() override { Data::AssetManager::Destroy(); AllocatorInstance::Destroy(); AllocatorInstance::Destroy(); } void run() { ComponentApplication app; ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; app.Create(desc); Data::AssetManager::Instance().RegisterHandler(aznew SliceAssetHandler(app.GetSerializeContext()), AZ::AzTypeInfo::Uuid()); AZ::Uuid entityContextId = AZ::Uuid::CreateRandom(); AZStd::unique_ptr m_entityOwnershipService = AZStd::make_unique(entityContextId, app.GetSerializeContext()); EntityContext context(entityContextId, AZStd::move(m_entityOwnershipService), app.GetSerializeContext()); context.InitContext(); EntityContextEventBus::Handler::BusConnect(context.GetContextId()); AZ::Entity* entity = context.CreateEntity("MyEntity"); AZ_TEST_ASSERT(entity); // Should have created the entity. AZ_TEST_ASSERT(m_createEntityEvents == 1); AZ::Uuid contextId = AZ::Uuid::CreateNull(); EBUS_EVENT_ID_RESULT(contextId, entity->GetId(), EntityIdContextQueryBus, GetOwningContextId); AZ_TEST_ASSERT(contextId == context.GetContextId()); // Context properly associated with entity? AZ_TEST_ASSERT(context.DestroyEntity(entity)); AZ_TEST_ASSERT(m_destroyEntityEvents == 1); AZ::Entity* sliceEntity = aznew AZ::Entity(); AZ::SliceComponent* sliceComponent = sliceEntity->CreateComponent(); sliceComponent->SetSerializeContext(app.GetSerializeContext()); sliceComponent->AddEntity(aznew AZ::Entity()); Data::Asset sliceAssetHolder = Data::AssetManager::Instance().CreateAsset(Data::AssetId(Uuid::CreateRandom())); SliceAsset* sliceAsset = sliceAssetHolder.Get(); sliceAsset->SetData(sliceEntity, sliceComponent); EntityContextEventBus::Handler::BusDisconnect(context.GetContextId()); app.Destroy(); } void OnEntityContextCreateEntity(AZ::Entity& entity) override { (void)entity; ++m_createEntityEvents; } void OnEntityContextDestroyEntity(const AZ::EntityId& entity) override { (void)entity; ++m_destroyEntityEvents; } size_t m_createEntityEvents = 0; size_t m_destroyEntityEvents = 0; }; TEST_F(EntityContextBasicTest, Test) { run(); } }