AtomToolsFrameworkTest.cpp 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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 <Atom/Utils/TestUtils/AssetSystemStub.h>
  9. #include <AtomToolsFramework/Util/Util.h>
  10. #include <AzCore/Utils/Utils.h>
  11. #include <AzFramework/IO/LocalFileIO.h>
  12. #include <AzTest/AzTest.h>
  13. namespace UnitTest
  14. {
  15. class AtomToolsFrameworkTestEnvironment : public AZ::Test::ITestEnvironment
  16. {
  17. protected:
  18. void SetupEnvironment() override
  19. {
  20. }
  21. void TeardownEnvironment() override
  22. {
  23. }
  24. };
  25. class AtomToolsFrameworkTest : public ::testing::Test
  26. {
  27. protected:
  28. void SetUp() override
  29. {
  30. m_priorFileIO = AZ::IO::FileIOBase::GetInstance();
  31. m_localFileIO.reset(aznew AZ::IO::LocalFileIO());
  32. AZ::IO::FileIOBase::SetInstance(m_localFileIO.get());
  33. char rootPath[AZ_MAX_PATH_LEN];
  34. AZ::Utils::GetExecutableDirectory(rootPath, AZ_MAX_PATH_LEN);
  35. AZ::IO::FileIOBase::GetInstance()->SetAlias("@exefolder@", rootPath);
  36. m_assetSystemStub.Activate();
  37. RegisterSourceAsset("objects/upgrades/materials/supercondor.material");
  38. RegisterSourceAsset("materials/condor.material");
  39. RegisterSourceAsset("materials/talisman.material");
  40. RegisterSourceAsset("materials/city.material");
  41. RegisterSourceAsset("materials/totem.material");
  42. RegisterSourceAsset("textures/orange.png");
  43. RegisterSourceAsset("textures/red.png");
  44. RegisterSourceAsset("textures/gold.png");
  45. RegisterSourceAsset("textures/fuzz.png");
  46. m_assetSystemStub.RegisterScanFolder(AtomToolsFramework::GetPathWithoutAlias("@exefolder@/root1/projects/project1/assets/"));
  47. m_assetSystemStub.RegisterScanFolder(AtomToolsFramework::GetPathWithoutAlias("@exefolder@/root1/projects/project2/assets/"));
  48. m_assetSystemStub.RegisterScanFolder(AtomToolsFramework::GetPathWithoutAlias("@exefolder@/root1/o3de/gems/atom/assets/"));
  49. m_assetSystemStub.RegisterScanFolder(AtomToolsFramework::GetPathWithoutAlias("@exefolder@/root1/o3de/gems/atom/testdata/"));
  50. m_assetSystemStub.RegisterScanFolder(AtomToolsFramework::GetPathWithoutAlias("@exefolder@/root1/o3de/gems/atom/tools/materialeditor/assets/"));
  51. }
  52. void TearDown() override
  53. {
  54. m_assetSystemStub.Deactivate();
  55. AZ::IO::FileIOBase::SetInstance(m_priorFileIO);
  56. m_localFileIO.reset();
  57. }
  58. void RegisterSourceAsset(const AZStd::string& path)
  59. {
  60. const AZStd::string assetRoot = "@exefolder@/root1/project/assets/";
  61. AZ::IO::FixedMaxPath assetRootPath(AtomToolsFramework::GetPathWithoutAlias(assetRoot));
  62. AZ::IO::FixedMaxPath normalizedPath(AtomToolsFramework::GetPathWithoutAlias(assetRoot + path));
  63. AZ::Data::AssetInfo assetInfo = {};
  64. assetInfo.m_assetId = AZ::Uuid::CreateRandom();
  65. assetInfo.m_relativePath = normalizedPath.LexicallyRelative(assetRootPath).StringAsPosix();
  66. m_assetSystemStub.RegisterSourceInfo(normalizedPath.StringAsPosix().c_str(), assetInfo, assetRootPath.StringAsPosix().c_str());
  67. }
  68. AssetSystemStub m_assetSystemStub;
  69. AZ::IO::FileIOBase* m_priorFileIO = nullptr;
  70. AZStd::unique_ptr<AZ::IO::FileIOBase> m_localFileIO;
  71. };
  72. TEST_F(AtomToolsFrameworkTest, GetPathToExteralReference_Succeeds)
  73. {
  74. ASSERT_EQ(AtomToolsFramework::GetPathToExteralReference("", ""), "");
  75. ASSERT_EQ(AtomToolsFramework::GetPathToExteralReference("@exefolder@/root1/project/assets/materials/condor.material", ""), "");
  76. ASSERT_EQ(AtomToolsFramework::GetPathToExteralReference("@exefolder@/root1/project/assets/materials/talisman.material", ""), "");
  77. ASSERT_EQ(AtomToolsFramework::GetPathToExteralReference("@exefolder@/root1/project/assets/materials/talisman.material", "@exefolder@/root1/project/assets/textures/gold.png"), "../textures/gold.png");
  78. ASSERT_EQ(AtomToolsFramework::GetPathToExteralReference("@exefolder@/root1/project/assets/objects/upgrades/materials/supercondor.material", "@exefolder@/root1/project/assets/materials/condor.material"), "../../../materials/condor.material");
  79. }
  80. TEST_F(AtomToolsFrameworkTest, IsDocumentPathInSupportedFolder_Succeeds)
  81. {
  82. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/somerandomasset.json"));
  83. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/project/somerandomasset.json"));
  84. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/projects/somerandomasset.json"));
  85. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/projects/project1/somerandomasset.json"));
  86. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root2/projects/project1/assets/somerandomasset.json"));
  87. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root2/projects/project1/assets/subfolder/somerandomasset.json"));
  88. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root2/projects/project2/assets/somerandomasset.json"));
  89. ASSERT_FALSE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root2/o3de/gems/atom/tools/materialeditor/assets/somerandomasset.json"));
  90. ASSERT_TRUE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/projects/project1/assets/somerandomasset.json"));
  91. ASSERT_TRUE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/projects/project1/assets/subfolder/somerandomasset.json"));
  92. ASSERT_TRUE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/projects/project2/assets/somerandomasset.json"));
  93. ASSERT_TRUE(AtomToolsFramework::IsDocumentPathInSupportedFolder("@exefolder@/root1/o3de/gems/atom/tools/materialeditor/assets/somerandomasset.json"));
  94. }
  95. TEST_F(AtomToolsFrameworkTest, ValidateDocumentPath_Succeeds)
  96. {
  97. AZStd::string testPath;
  98. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  99. testPath = "somerandomasset.json";
  100. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  101. testPath = "../somerandomasset.json";
  102. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  103. testPath = "@exefolder@/root1/somerandomasset.json";
  104. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  105. testPath = "@exefolder@/root1/project/somerandomasset.json";
  106. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  107. testPath = "@exefolder@/root1/projects/somerandomasset.json";
  108. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  109. testPath = "@exefolder@/root1/projects/project1/somerandomasset.json";
  110. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  111. testPath = "@exefolder@/root2/projects/project1/assets/somerandomasset.json";
  112. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  113. testPath = "@exefolder@/root2/projects/project1/assets/subfolder/somerandomasset.json";
  114. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  115. testPath = "@exefolder@/root2/projects/project2/assets/somerandomasset.json";
  116. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  117. testPath = "@exefolder@/root2/o3de/gems/atom/tools/materialeditor/assets/somerandomasset.json";
  118. ASSERT_FALSE(AtomToolsFramework::ValidateDocumentPath(testPath));
  119. testPath = "@exefolder@/root1/projects/project1/assets/somerandomasset.json";
  120. ASSERT_TRUE(AtomToolsFramework::ValidateDocumentPath(testPath));
  121. testPath = "@exefolder@/root1/projects/project1/assets/subfolder/somerandomasset.json";
  122. ASSERT_TRUE(AtomToolsFramework::ValidateDocumentPath(testPath));
  123. testPath = "@exefolder@/root1/projects/project2/assets/somerandomasset.json";
  124. ASSERT_TRUE(AtomToolsFramework::ValidateDocumentPath(testPath));
  125. testPath = "@exefolder@/root1/o3de/gems/atom/tools/materialeditor/assets/somerandomasset.json";
  126. ASSERT_TRUE(AtomToolsFramework::ValidateDocumentPath(testPath));
  127. }
  128. AZ_UNIT_TEST_HOOK(new AtomToolsFrameworkTestEnvironment);
  129. } // namespace UnitTest