Initial commit

This commit is contained in:
alexpete
2021-03-05 11:26:34 -08:00
commit a10351f38d
27091 changed files with 5521199 additions and 0 deletions
@@ -0,0 +1,116 @@
/*
* 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 <AzTest/AzTest.h>
#include <AzCore/UserSettings/UserSettingsComponent.h>
#include <AzToolsFramework/Application/ToolsApplication.h>
#include <AzToolsFramework/Entity/EditorEntityContextComponent.h>
namespace AzToolsFramework
{
class EditorEntityContextComponentTests
: public ::testing::Test
{
protected:
void SetUp() override
{
m_app.Start(m_descriptor);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
}
void TearDown() override
{
m_app.Stop();
}
AzToolsFramework::ToolsApplication m_app;
AZ::ComponentApplication::Descriptor m_descriptor;
};
TEST_F(EditorEntityContextComponentTests, EditorEntityContextTests_CreateEditorEntity_CreatesValidEntity)
{
AZStd::string entityName("TestName");
AZ::EntityId createdEntityId;
AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult(
createdEntityId,
&AzToolsFramework::EditorEntityContextRequests::CreateNewEditorEntity,
entityName.c_str());
EXPECT_TRUE(createdEntityId.IsValid());
AZ::Entity* createdEntity = nullptr;
AZ::ComponentApplicationBus::BroadcastResult(createdEntity, &AZ::ComponentApplicationRequests::FindEntity, createdEntityId);
EXPECT_NE(createdEntity, nullptr);
EXPECT_EQ(entityName.compare(createdEntity->GetName()), 0);
EXPECT_EQ(createdEntity->GetId(), createdEntityId);
}
TEST_F(EditorEntityContextComponentTests, EditorEntityContextTests_CreateEditorEntityWithValidId_CreatesValidEntity)
{
AZ::EntityId validId(AZ::Entity::MakeId());
EXPECT_TRUE(validId.IsValid());
AZStd::string entityName("TestName");
AZ::EntityId createdEntityId;
AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult(
createdEntityId,
&AzToolsFramework::EditorEntityContextRequestBus::Events::CreateNewEditorEntityWithId,
entityName.c_str(),
validId);
EXPECT_TRUE(createdEntityId.IsValid());
EXPECT_EQ(createdEntityId, validId);
AZ::Entity* createdEntity = nullptr;
AZ::ComponentApplicationBus::BroadcastResult(createdEntity, &AZ::ComponentApplicationRequests::FindEntity, createdEntityId);
EXPECT_NE(createdEntity, nullptr);
EXPECT_EQ(entityName.compare(createdEntity->GetName()), 0);
EXPECT_EQ(createdEntity->GetId(), validId);
}
TEST_F(EditorEntityContextComponentTests, EditorEntityContextTests_CreateEditorEntityWithInvalidId_NoEntityCreated)
{
AZ::EntityId invalidId;
EXPECT_FALSE(invalidId.IsValid());
AZStd::string entityName("TestName");
AZ::EntityId createdEntityId;
AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult(
createdEntityId,
&AzToolsFramework::EditorEntityContextRequestBus::Events::CreateNewEditorEntityWithId,
entityName.c_str(),
invalidId);
EXPECT_FALSE(createdEntityId.IsValid());
AZ::Entity* createdEntity = nullptr;
AZ::ComponentApplicationBus::BroadcastResult(createdEntity, &AZ::ComponentApplicationRequests::FindEntity, createdEntityId);
EXPECT_EQ(createdEntity, nullptr);
}
TEST_F(EditorEntityContextComponentTests, EditorEntityContextTests_CreateEditorEntityWithInUseId_NoEntityCreated)
{
// Create an entity so we can grab an in-use entity ID.
AZStd::string entityName("TestName");
AZ::EntityId createdEntityId;
AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult(
createdEntityId,
&AzToolsFramework::EditorEntityContextRequestBus::Events::CreateNewEditorEntity,
entityName.c_str());
EXPECT_TRUE(createdEntityId.IsValid());
// Attempt to create another entity with the same ID, and verify this call fails.
AZ::EntityId secondEntityId;
AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult(
secondEntityId,
&AzToolsFramework::EditorEntityContextRequestBus::Events::CreateNewEditorEntityWithId,
entityName.c_str(),
createdEntityId);
EXPECT_FALSE(secondEntityId.IsValid());
}
}
@@ -0,0 +1,957 @@
/*
* 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 <AzTest/AzTest.h>
#include <AzCore/Math/Aabb.h>
#include <AzCore/UserSettings/UserSettingsComponent.h>
#include <AzCore/Component/TransformBus.h>
#include <AzToolsFramework/Application/ToolsApplication.h>
#include <AzToolsFramework/Component/EditorComponentAPIBus.h>
#include <AzToolsFramework/Entity/EditorEntitySearchComponent.h>
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
#include <AzToolsFramework/Entity/EditorEntityHelpers.h>
#include <AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h>
#include <AzToolsFramework/ToolsComponents/TransformComponent.h>
#include <AzToolsFramework/ToolsComponents/EditorLockComponent.h>
#include <AzToolsFramework/ToolsComponents/EditorVisibilityComponent.h>
namespace AzToolsFramework
{
// Test components used to test component filters
class EntitySearch_TestComponent1
: public AZ::Component
{
public:
AZ_COMPONENT(EntitySearch_TestComponent1, "{D8ABC8F6-E43B-4ED9-AABE-BA8905D4099D}", AZ::Component);
static void Reflect(AZ::ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<EntitySearch_TestComponent1, AZ::Component>()
->Version(1)
->Field("Bool Value", &EntitySearch_TestComponent1::m_boolValue)
->Field("Int Value", &EntitySearch_TestComponent1::m_intValue)
;
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
{
editContext->Class<EntitySearch_TestComponent1>("SearchTestComponent1", "Component 1 for Entity Search Unit Tests")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::AddableByUser, true)
->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game"))
->Attribute(AZ::Edit::Attributes::Category, "Entity Search Test Components")
->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/Tag.png")
->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/Tag.png")
->Attribute(AZ::Edit::Attributes::AutoExpand, true)
->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://www.amazongames.com/")
->DataElement(AZ::Edit::UIHandlers::Default, &EntitySearch_TestComponent1::m_boolValue, "Bool", "")
->DataElement(AZ::Edit::UIHandlers::Default, &EntitySearch_TestComponent1::m_intValue, "Int", "")
;
}
}
}
static constexpr bool DefaultBoolValue = true;
EntitySearch_TestComponent1() = default;
EntitySearch_TestComponent1(int intValue, bool boolValue)
: m_boolValue(boolValue)
, m_intValue(intValue)
{
}
virtual ~EntitySearch_TestComponent1() override
{}
private:
void Init() override
{}
void Activate() override
{}
void Deactivate() override
{}
int m_intValue = 0;
bool m_boolValue = DefaultBoolValue;
};
class EntitySearch_TestComponent2
: public AZ::Component
{
public:
AZ_COMPONENT(EntitySearch_TestComponent2, "{E50A848D-64C3-4445-A21B-D8F9C96972FE}", AZ::Component);
static void Reflect(AZ::ReflectContext* context)
{
if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<EntitySearch_TestComponent2, AZ::Component>()
->Version(1)
->Field("Float Value", &EntitySearch_TestComponent2::m_floatValue)
;
if (AZ::EditContext* editContext = serializeContext->GetEditContext())
{
editContext->Class<EntitySearch_TestComponent2>("SearchTestComponent2", "Component 2 for Entity Search Unit Tests")
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
->Attribute(AZ::Edit::Attributes::AddableByUser, true)
->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("Game"))
->Attribute(AZ::Edit::Attributes::Category, "Entity Search Test Components")
->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/Tag.png")
->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/Tag.png")
->Attribute(AZ::Edit::Attributes::AutoExpand, true)
->Attribute(AZ::Edit::Attributes::HelpPageURL, "https://www.amazongames.com/")
->DataElement(AZ::Edit::UIHandlers::Default, &EntitySearch_TestComponent2::m_floatValue, "Float", "")
;
}
}
}
const static float DefaultFloatValue;
EntitySearch_TestComponent2() = default;
EntitySearch_TestComponent2(float floatValue)
: m_floatValue(floatValue)
{
}
virtual ~EntitySearch_TestComponent2() override
{}
private:
void Init() override
{}
void Activate() override
{}
void Deactivate() override
{}
float m_floatValue = DefaultFloatValue;
};
const float EntitySearch_TestComponent2::DefaultFloatValue = 5.0f;
class EditorEntitySearchComponentTests
: public ::testing::Test
{
protected:
void SetUp() override
{
m_app.Start(m_descriptor);
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
RegisterComponents();
GenerateTestHierarchy();
}
void RegisterComponents()
{
// Register our test components (This process also reflects them to the appropriate contexts)
auto* EntitySearch_TestComponent1Descriptor = EntitySearch_TestComponent1::CreateDescriptor();
auto* EntitySearch_TestComponent2Descriptor = EntitySearch_TestComponent2::CreateDescriptor();
m_app.RegisterComponentDescriptor(EntitySearch_TestComponent1Descriptor);
m_app.RegisterComponentDescriptor(EntitySearch_TestComponent2Descriptor);
m_testComponentType1 = azrtti_typeid<EntitySearch_TestComponent1>();
m_testComponentType2 = azrtti_typeid<EntitySearch_TestComponent2>();
}
void GenerateTestHierarchy()
{
/*
* City
* |_ Street (Test Component 2)
* |_ Car
* | |_ Passenger (Test Component 1, Test Component 2)
* | |_ Passenger
* |_ Car (Test Component 1)
* | |_ Passenger
* |_ SportsCar
* |_ Passenger (Test Component 2)
* |_ Passenger
*/
m_testComponentType1Count = 0;
m_entityMap["cityId"] = CreateEditorEntity("City", AZ::EntityId());
m_entityMap["streetId"] = CreateEditorEntity("Street", m_entityMap["cityId"], false, true);
m_entityMap["carId1"] = CreateEditorEntity("Car", m_entityMap["streetId"]);
m_entityMap["passengerId1"] = CreateEditorEntity("Passenger", m_entityMap["carId1"], true, true);
m_entityMap["passengerId2"] = CreateEditorEntity("Passenger", m_entityMap["carId1"]);
m_entityMap["carId2"] = CreateEditorEntity("Car", m_entityMap["streetId"], true);
m_entityMap["passengerId3"] = CreateEditorEntity("Passenger", m_entityMap["carId2"]);
m_entityMap["sportsCarId"] = CreateEditorEntity("SportsCar", m_entityMap["streetId"]);
m_entityMap["passengerId4"] = CreateEditorEntity("Passenger", m_entityMap["sportsCarId"], false, true);
m_entityMap["passengerId5"] = CreateEditorEntity("Passenger", m_entityMap["sportsCarId"]);
// Add some Components
}
AZ::EntityId CreateEditorEntity(const char* name, AZ::EntityId parentId, bool addTestComponent1 = false, bool addTestComponent2 = false)
{
AZ::Entity* entity = nullptr;
UnitTest::CreateDefaultEditorEntity(name, &entity);
entity->Deactivate();
if (addTestComponent1)
{
entity->CreateComponent<EntitySearch_TestComponent1>(m_testComponentType1Count++, EntitySearch_TestComponent1::DefaultBoolValue);
}
if (addTestComponent2)
{
entity->CreateComponent<EntitySearch_TestComponent2>(EntitySearch_TestComponent2::DefaultFloatValue);
}
entity->Activate();
// Parent
AZ::TransformBus::Event(entity->GetId(), &AZ::TransformInterface::SetParent, parentId);
return entity->GetId();
}
void TearDown() override
{
m_app.Stop();
}
AzToolsFramework::ToolsApplication m_app;
AZ::ComponentApplication::Descriptor m_descriptor;
AZStd::unordered_map<AZStd::string, AZ::EntityId> m_entityMap;
AZ::Uuid m_testComponentType1;
AZ::Uuid m_testComponentType2;
int m_testComponentType1Count;
};
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_RootEntities)
{
{
EntityIdList rootEntities;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(rootEntities, &AzToolsFramework::EditorEntitySearchRequests::GetRootEditorEntities);
EXPECT_EQ(rootEntities.size(), 1);
EXPECT_EQ(rootEntities[0], m_entityMap["cityId"]);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByName_Base)
{
{
// No filters - return all entities
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, EntitySearchFilter());
EXPECT_EQ(searchResults.size(), m_entityMap.size());
}
{
// Filter by name - single entity
EntitySearchFilter filter;
filter.m_names.push_back("Street");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
// Filter by name - multiple entities
EntitySearchFilter filter;
filter.m_names.push_back("Passenger");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 5);
}
{
// Filter by name - multiple names
EntitySearchFilter filter;
filter.m_names.push_back("Passenger");
filter.m_names.push_back("Street");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 6);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByName_Wildcard)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("Str*et");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("St*t");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Str?et");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Str?t");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("C*");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 3);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("*");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), m_entityMap.size());
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByName_CaseSensitive)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("Street");
filter.m_namesCaseSensitive = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("street");
filter.m_namesCaseSensitive = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Street");
filter.m_namesCaseSensitive = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("street");
filter.m_namesCaseSensitive = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByPath_Base)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street|SportsCar");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["sportsCarId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street|Car|Passenger");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 3);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByPath_Wildcard)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("City|*|SportsCar");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["sportsCarId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street|*|Passenger");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 5);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street|*Car|Passenger");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 5);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street|Sport*|Passenger");
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 2);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByPath_CaseSensitive)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street");
filter.m_namesCaseSensitive = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("city|street");
filter.m_namesCaseSensitive = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street");
filter.m_namesCaseSensitive = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["streetId"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("city|street");
filter.m_namesCaseSensitive = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByComponent_Base)
{
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 2);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType2);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 3);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByComponent_Multiple)
{
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1);
filter.m_components.emplace(m_testComponentType2);
filter.m_mustMatchAllComponents = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 4);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1);
filter.m_components.emplace(m_testComponentType2);
filter.m_mustMatchAllComponents = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["passengerId1"]);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByComponent_MatchProperty)
{
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 2);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Int", 0 } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", !EntitySearch_TestComponent1::DefaultBoolValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Int", m_entityMap.size() } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Float", 0.0f } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByComponent_MatchMultipleProperties)
{
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = true;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue } });
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = false;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue } });
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 4);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = true;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue }, { "Int", 0 } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = false;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue }, { "Int", 0 } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 2);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = false;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue }, { "Int", 0 } });
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 4);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = true;
filter.m_components.emplace(m_testComponentType1, EntitySearchFilter::ComponentProperties{ { "Bool", EntitySearch_TestComponent1::DefaultBoolValue }, { "Int", 0 } });
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = false;
filter.m_components.emplace(m_testComponentType1);
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 4);
}
{
EntitySearchFilter filter;
filter.m_mustMatchAllComponents = true;
filter.m_components.emplace(m_testComponentType1);
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_SearchByAabb_Base)
{
{
// No filters - return all entities
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, EntitySearchFilter());
EXPECT_EQ(searchResults.size(), m_entityMap.size());
}
{
// Filter by huge AABB - return all entities
EntitySearchFilter filter;
filter.m_aabb = AZ::Aabb::CreateCenterRadius(AZ::Vector3::CreateZero(), 1000.0f);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), m_entityMap.size());
}
{
// Filter by small AABB - return no entity
EntitySearchFilter filter;
filter.m_aabb = AZ::Aabb::CreateCenterRadius(AZ::Vector3::CreateOne(), 0.1f);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_Search_Roots_Base)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("Passenger");
filter.m_roots.push_back(m_entityMap["carId1"]);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 2);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Passenger");
filter.m_roots.push_back(m_entityMap["carId2"]);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["passengerId3"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("SportsCar");
filter.m_roots.push_back(m_entityMap["carId1"]);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("City|Street|SportsCar|Passenger");
filter.m_roots.push_back(m_entityMap["carId1"]);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Car|Passenger");
filter.m_roots.push_back(m_entityMap["carId1"]);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 2);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_Search_Roots_NamesAreRootBased)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("Car|Passenger");
// No root - Default
filter.m_namesAreRootBased = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 3);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Car|Passenger");
// No root - Default
filter.m_namesAreRootBased = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Car|Passenger");
filter.m_roots.push_back(m_entityMap["streetId"]);
filter.m_namesAreRootBased = false; // Default
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 3);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Car|Passenger");
filter.m_roots.push_back(m_entityMap["streetId"]);
filter.m_namesAreRootBased = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 3);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Car|Passenger");
filter.m_roots.push_back(m_entityMap["carId2"]);
filter.m_namesAreRootBased = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 0);
}
}
TEST_F(EditorEntitySearchComponentTests, EditorEntitySearchTests_Search_MultipleFilters)
{
{
EntitySearchFilter filter;
filter.m_names.push_back("Car");
filter.m_aabb = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-1.0f), AZ::Vector3(1.0f));
filter.m_components.emplace(m_testComponentType1);
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["carId2"]);
}
{
EntitySearchFilter filter;
filter.m_names.push_back("Pass*");
filter.m_roots.push_back(m_entityMap["sportsCarId"]);
filter.m_components.emplace(m_testComponentType2, EntitySearchFilter::ComponentProperties{ { "Float", EntitySearch_TestComponent2::DefaultFloatValue } });
filter.m_namesAreRootBased = true;
filter.m_namesCaseSensitive = true;
EntityIdList searchResults;
AzToolsFramework::EditorEntitySearchBus::BroadcastResult(searchResults, &AzToolsFramework::EditorEntitySearchRequests::SearchEntities, filter);
EXPECT_EQ(searchResults.size(), 1);
EXPECT_EQ(searchResults[0], m_entityMap["passengerId4"]);
}
}
}
@@ -0,0 +1,178 @@
/*
* 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 <AzTest/AzTest.h>
#include <AzToolsFramework/Application/ToolsApplication.h>
#include <AzToolsFramework/UnitTest/AzToolsFrameworkTestHelpers.h>
namespace UnitTest
{
using namespace AZ;
using namespace AzToolsFramework;
class EditorEntitySelectionTest
: public ToolsApplicationFixture
{
void SetUpEditorFixtureImpl() override
{
m_entity1 = CreateDefaultEditorEntity("Entity1");
m_entity2 = CreateDefaultEditorEntity("Entity2");
m_entity3 = CreateDefaultEditorEntity("Entity3");
m_entity4 = CreateDefaultEditorEntity("Entity4");
}
public:
AZ::EntityId m_entity1;
AZ::EntityId m_entity2;
AZ::EntityId m_entity3;
AZ::EntityId m_entity4;
};
TEST_F(EditorEntitySelectionTest, EditorEntitySelectionTests_SetAndGetSelectedEntities)
{
// Set entity1 and entity4 as selected
EntityIdList testEntityIds{ m_entity1, m_entity4 };
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::SetSelectedEntities, testEntityIds);
EntityIdList selectedEntityIds;
ToolsApplicationRequestBus::BroadcastResult(
selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
EXPECT_EQ(selectedEntityIds.size(), testEntityIds.size());
for (auto& id : testEntityIds)
{
EXPECT_TRUE(AZStd::find(selectedEntityIds.begin(), selectedEntityIds.end(), id) != selectedEntityIds.end());
}
// Clear all selected entities
testEntityIds.clear();
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::SetSelectedEntities, testEntityIds);
ToolsApplicationRequestBus::BroadcastResult(
selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
EXPECT_TRUE(selectedEntityIds.empty());
}
TEST_F(EditorEntitySelectionTest, EditorEntitySelectionTests_MarkEntitySelectedAndDeselected)
{
// Mark testEntityId as selected
AZ::EntityId testEntityId = m_entity1;
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::MarkEntitySelected, testEntityId);
bool testEntitySelected = false;
ToolsApplicationRequestBus::BroadcastResult(
testEntitySelected, &ToolsApplicationRequests::IsSelected, testEntityId);
bool anyEntitySelected = false;
ToolsApplicationRequestBus::BroadcastResult(
anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
EntityIdList selectedEntityIds;
ToolsApplicationRequestBus::BroadcastResult(
selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
EXPECT_TRUE(testEntitySelected);
EXPECT_TRUE(anyEntitySelected);
EXPECT_EQ(selectedEntityIds.size(), 1);
EXPECT_EQ(selectedEntityIds.front(), testEntityId);
// Mark testEntityId as deselected
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::MarkEntityDeselected, testEntityId);
ToolsApplicationRequestBus::BroadcastResult(
testEntitySelected, &ToolsApplicationRequests::IsSelected, testEntityId);
ToolsApplicationRequestBus::BroadcastResult(
anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
ToolsApplicationRequestBus::BroadcastResult(
selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
EXPECT_FALSE(testEntitySelected);
EXPECT_FALSE(anyEntitySelected);
EXPECT_TRUE(selectedEntityIds.empty());
}
TEST_F(EditorEntitySelectionTest, EditorEntitySelectionTests_MarkEntitiesDeselectedAndSelected)
{
// Set all entities as selected
EntityIdList testEntityIds{ m_entity1, m_entity2, m_entity3, m_entity4 };
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::SetSelectedEntities, testEntityIds);
// Deselect first half of entities
EntityIdList deselctedEntityIds{ testEntityIds.begin(), testEntityIds.begin() + testEntityIds.size() / 2 };
EntityIdList expectedSelectedEntityIds{ testEntityIds.begin() + testEntityIds.size() / 2, testEntityIds.end() };
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::MarkEntitiesDeselected, deselctedEntityIds);
bool targetSelected = false;
for (auto& id : expectedSelectedEntityIds)
{
ToolsApplicationRequestBus::BroadcastResult(
targetSelected, &ToolsApplicationRequests::IsSelected, id);
EXPECT_TRUE(targetSelected);
}
for (auto& id : deselctedEntityIds)
{
ToolsApplicationRequestBus::BroadcastResult(
targetSelected, &ToolsApplicationRequests::IsSelected, id);
EXPECT_FALSE(targetSelected);
}
bool anyEntitySelected = false;
ToolsApplicationRequestBus::BroadcastResult(
anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
EntityIdList actualSelectedEntityIds;
ToolsApplicationRequestBus::BroadcastResult(
actualSelectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
EXPECT_TRUE(anyEntitySelected);
EXPECT_EQ(actualSelectedEntityIds.size(), expectedSelectedEntityIds.size());
for (auto& id : expectedSelectedEntityIds)
{
EXPECT_TRUE(AZStd::find(actualSelectedEntityIds.begin(), actualSelectedEntityIds.end(), id) != actualSelectedEntityIds.end());
}
// Re-select first half of entities so that all entities got selected again
ToolsApplicationRequestBus::Broadcast(
&ToolsApplicationRequests::MarkEntitiesSelected, deselctedEntityIds);
expectedSelectedEntityIds = testEntityIds;
ToolsApplicationRequestBus::BroadcastResult(
anyEntitySelected, &ToolsApplicationRequests::AreAnyEntitiesSelected);
ToolsApplicationRequestBus::BroadcastResult(
actualSelectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities);
EXPECT_TRUE(anyEntitySelected);
EXPECT_EQ(actualSelectedEntityIds.size(), expectedSelectedEntityIds.size());
for (auto& id : expectedSelectedEntityIds)
{
EXPECT_TRUE(AZStd::find(actualSelectedEntityIds.begin(), actualSelectedEntityIds.end(), id) != actualSelectedEntityIds.end());
ToolsApplicationRequestBus::BroadcastResult(
targetSelected, &ToolsApplicationRequests::IsSelected, id);
EXPECT_TRUE(targetSelected);
}
}
}