/* * 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 "LyShine_precompiled.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include AZ_UNIT_TEST_HOOK(); using namespace AZ; using ::testing::NiceMock; class LyShineSystemTestComponent : public LyShine::LyShineSystemComponent { friend class LyShineEditorTest; }; class LyShineEditorTest : public ::testing::Test { protected: void SetUp() override { using namespace LyShine; m_priorEnv = gEnv; m_data = AZStd::make_unique(); memset(&m_data->m_stubEnv, 0, sizeof(SSystemGlobalEnvironment)); m_data->m_stubEnv.pRenderer = &m_data->m_renderer; gEnv = &m_data->m_stubEnv; m_app.Start(m_descriptor); AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize); const char* dir = m_app.GetExecutableFolder(); AZ::IO::FileIOBase::GetInstance()->SetAlias("@root@", dir); AZ::SerializeContext* context = nullptr; ComponentApplicationBus::BroadcastResult(context, &ComponentApplicationBus::Events::GetSerializeContext); ASSERT_NE(context, nullptr); m_componentDescriptors.push_back(AZStd::unique_ptr(LyShineSystemComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiCanvasAssetRefComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiCanvasProxyRefComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiCanvasOnMeshComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiCanvasComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiElementComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiTransform2dComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiImageComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiImageSequenceComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiTextComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiButtonComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiMarkupButtonComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiCheckboxComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiDraggableComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiDropTargetComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiDropdownComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiDropdownOptionComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiSliderComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiTextInputComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiScrollBoxComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiScrollBarComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiFaderComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiFlipbookAnimationComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiLayoutFitterComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiMaskComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiLayoutCellComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiLayoutColumnComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiLayoutRowComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiLayoutGridComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiTooltipComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiTooltipDisplayComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiDynamicLayoutComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiDynamicScrollBoxComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiSpawnerComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiRadioButtonComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiRadioButtonGroupComponent::CreateDescriptor())); m_componentDescriptors.push_back(AZStd::unique_ptr(UiParticleEmitterComponent::CreateDescriptor())); AzFramework::SimpleAssetReference::Register(*context); AzFramework::SimpleAssetReference::Register(*context); for(const auto& descriptor : m_componentDescriptors) { descriptor->Reflect(context); } m_sysComponent = AZStd::make_unique(); m_sysComponent->Activate(); } void TearDown() override { m_componentDescriptors = {}; m_sysComponent->Deactivate(); m_sysComponent = nullptr; m_app.Stop(); m_data.reset(); gEnv = m_priorEnv; } AZStd::unique_ptr m_sysComponent; AzToolsFramework::ToolsApplication m_app; AZ::ComponentApplication::Descriptor m_descriptor; AZStd::vector> m_componentDescriptors; struct DataMembers { SSystemGlobalEnvironment m_stubEnv; NiceMock m_renderer; }; AZStd::unique_ptr m_data; SSystemGlobalEnvironment* m_priorEnv = nullptr; }; AZStd::string GetTestFileAliasedPath(AZStd::string_view fileName) { constexpr char testFileFolder[] = "@root@/../Gems/LyShine/Code/Tests/"; return AZStd::string::format("%s%.*s", testFileFolder, aznumeric_cast(fileName.size()), fileName.data()); } AZStd::string GetTestFileFullPath(AZStd::string_view fileName) { AZStd::string aliasedPath = GetTestFileAliasedPath(fileName); char resolvedPath[AZ_MAX_PATH_LEN]; AZ::IO::FileIOBase::GetInstance()->ResolvePath(aliasedPath.c_str(), resolvedPath, AZ_MAX_PATH_LEN); return AZStd::string(resolvedPath); } bool OpenTestFile(AZStd::string_view fileName, AZ::IO::FileIOStream& fileStream) { AZStd::string aliasedPath = GetTestFileAliasedPath(fileName); return fileStream.Open(aliasedPath.c_str(), AZ::IO::OpenMode::ModeRead | AZ::IO::OpenMode::ModeBinary); } TEST_F(LyShineEditorTest, ProcessUiCanvas_ReturnsDependencyOnSpriteAndTexture) { using namespace LyShine; using namespace AssetBuilderSDK; UiCanvasBuilderWorker worker; AZStd::vector productDependencies; ProductPathDependencySet productPathDependencySet; UiSystemToolsInterface::CanvasAssetHandle* canvasAsset = nullptr; AZ::Entity* sourceCanvasEntity = nullptr; AZ::Entity exportCanvasEntity; AZ::IO::FileIOStream stream; ASSERT_TRUE(OpenTestFile("1ImageReference.uicanvas", stream)); ASSERT_TRUE(worker.ProcessUiCanvasAndGetDependencies(stream, productDependencies, productPathDependencySet, canvasAsset, sourceCanvasEntity, exportCanvasEntity)); ASSERT_EQ(productDependencies.size(), 0); ASSERT_THAT(productPathDependencySet, testing::UnorderedElementsAre( ProductPathDependency{ "textures/defaults/grey.dds", ProductPathDependencyType::ProductFile }, ProductPathDependency{ "textures/defaults/grey.sprite", ProductPathDependencyType::ProductFile } )); } TEST_F(LyShineEditorTest, FindLoadedCanvasByPathName_FT) { UiCanvasManager canvasManager; //find loaded canvas, should return invalid id AZ::EntityId entityId = canvasManager.FindLoadedCanvasByPathName("Gems/LyShine/Code/Tests/TestAssets/Canvases/empty.uicanvas", false); EXPECT_FALSE(entityId.IsValid()); //load a new canvas entityId = canvasManager.FindLoadedCanvasByPathName("Gems/LyShine/Code/Tests/TestAssets/Canvases/empty.uicanvas", true); EXPECT_TRUE(entityId.IsValid()); }