Update the FileIO Aliases (#4186)
* Update the FileIOAlias naming to make the cache, project root and engine root paths more clear The alias of `@root@`, `@assets@`, and `@projectplatformcache@` has been collapsed to `@projectproductassets@` The alias of `@devroot@` and `@engroot@` has been collapsed to `@engroot@` The alias of `@devassets@` and `@projectroot@` has been collapsed to `@projectroot@` Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated use of devassets and devroot properties in python Those properties now use projectroot and engroot Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updating the alias @engroot@ alias path comment in each platform specific LocalFileIO_*.cpp file Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed hardcoded size of 9 for the product asset alias. The ResolvePath function now just appends the @projectproductassets@ alias with the input path Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Remove duplicate @projectproductassets@ check in ProcessFileTreeRequest Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fix for typos in Hydra python test Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated LocalFileIO::Copy call on Windows to use the Unicode aware CopyFileW API Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the AWSMetreicsGemAllocatorFixture to properly suppress asset cache write errors for Test file creation. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed unneeded call to set the @projectproductasstes@ alias at the bottom of the AssetSeedManagerTest SetUp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added a deprecated alias map to the FileIO System When a deprecated alias is accessed, the FileIO System logs an AZ_Error and indicates the alias that should be used Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated python test scripts to use the projectroot binding Retrieving the AutomatedTesting project path based on "<devroot>/AutomatedTesting" has been removed. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated references to devroot and devgame within the codebase The GetAbsoluteDevGameFolderPath functions has been replaced with direct call to AZ::Utils::GetProjectPath The GetAbsoluteDevRootFolderPath functions has been replaced with direct calls to AZ::Utils::GetEnginePath Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated <engroot>/AutomatedTesting references to projectroot Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Replaced references that assumes the project path is <engroot>/AutomatedTesting with <projectroot> in the AutomatedTesting python test Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Correct casing in emfxworkspace file Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed newly added AppendPathParts function Removed the Path constructors which accepts a PathIterable instance The PathIterable isn't safe to return to a user of the Path class as it might be referencing temporary paths supplied via PathView arguments Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed unused parameter warning Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Undid change to the LexicallyProximate function to set the path result to the base path. It needs to return the *this path if the pathResult is empty Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Moved the LocalFileIO ConvertToAbsolutePath implementations to AZ::Utils Fixed the ConvertToAbsolutePath implementation for Unix platforms to use a buffer that is size PATH_MAX(4096 on all our supported Unix platforms). Because the buffer before was AZ::IO::MaxPathLength which as a size of 1024, this was resulting in the Unix `realpath` function smashing the stack when it converts a path to an absolute path that is longer than 1024 characters Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the EditorCore.Tests to attach the AZ Environment to the EditorCore shared library that is statically loaded on launch. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed for DeprecatedAlaisesKeyVisitor Visit function causing the non string_view overloads being hidden causing a hidden base class function warning Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Changed the AWSMetricsGemMock to use a temporary for writing test assets Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the LocalFileIO::ResolvePath function to use HasRootPath to determine if a path starts with a root path such as "D:", "D:/" or "/" IsAbsolute was not the corect check as the path of "D:" is a relative path. To be absolute according to the Windows the path must have a root directory. i.e "D:/" or "D:\" Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removed absolute path comment from LocalFile_UnixLike.cpp and LocalFile_Android.cpp FindFiles implementations Updated the ConvertToAlias to supply an AZ::IO::FixedMaxPath Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Replaced usage of the @projectproductassets@ alias with @engroot@ when referring to the LmbrCentral source folder in the CopyDependencyBuilderTest and the SeedBuilderTests Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated the ScriptCanvas Upgrade Tool to output backed up files to the Project User Path instead of the engine root Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed whitespacing issues in Application.cpp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Remove unnecessary creation of a FixedMaxPath in the UpgradeTool.cpp Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Modified testSeedFolder variable in the SeedBuilderTests to use the @engroot@ alias instead of @projectproductassets@/.. alias when referring to the LmbrCentral Gem source path Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Updated references to the Project Asset Cache in the PythonTests. Those tests no longer use the logic `azlmbr.paths.projectroot / "Cache" / "pc"` to retrieve a path to the cache root but instead the `azlmbr.paths.projectproductassets` constant Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed the FileIO Deprecated Alias test on Windows Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Removing @projectsourceassets@ alias, as it is only used once. Updated the PhysX EditorSystemComponent.cpp to query the ProjectPath form the SettingsRegistry. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Replaced @projectproductassets@ alias with @products@ Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Rollback changes to the PhysX EditorSystemComponent.cpp The changes to use the ProjectPath from the SettingsRegistry has been implemented in PR #4497 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
643bd84739
commit
f648cb1fd8
@@ -26,7 +26,7 @@ protected:
|
||||
}
|
||||
if (auto fileIoBase = AZ::IO::FileIOBase::GetInstance(); fileIoBase != nullptr)
|
||||
{
|
||||
fileIoBase->SetAlias("@assets@", m_tempDirectory.GetDirectory());
|
||||
fileIoBase->SetAlias("@products@", m_tempDirectory.GetDirectory());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace UnitTest
|
||||
|
||||
m_application->Start({});
|
||||
// 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
|
||||
// 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);
|
||||
}
|
||||
@@ -262,7 +262,7 @@ namespace UnitTest
|
||||
pArchive.reset();
|
||||
EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders.c_str()));
|
||||
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders.c_str()));
|
||||
EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders.c_str()));
|
||||
|
||||
EXPECT_TRUE(archive->IsFileExist(fileInArchiveFile));
|
||||
}
|
||||
@@ -353,7 +353,7 @@ namespace UnitTest
|
||||
// and be able to IMMEDIATELY
|
||||
// * read the file in the subfolder
|
||||
// * enumerate the folders (including that subfolder) even though they are 'virtual', not real folders on physical media
|
||||
// * all of the above even though the mount point for the archive is @assets@ wheras the physical pack lives in @usercache@
|
||||
// * all of the above even though the mount point for the archive is @products@ wheras the physical pack lives in @usercache@
|
||||
// finally, we're going to repeat the above test but with files mounted with subfolders
|
||||
// so for example, the pack will contain levelinfo.xml at the root of it
|
||||
// but it will be mounted at a subfolder (levels/mylevel).
|
||||
@@ -388,7 +388,7 @@ namespace UnitTest
|
||||
pArchive.reset();
|
||||
EXPECT_TRUE(IsPackValid(testArchivePath_withSubfolders));
|
||||
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@", testArchivePath_withSubfolders));
|
||||
EXPECT_TRUE(archive->OpenPack("@products@", testArchivePath_withSubfolders));
|
||||
// ---- BARRAGE OF TESTS
|
||||
EXPECT_TRUE(archive->IsFileExist("levels\\mylevel\\levelinfo.xml"));
|
||||
EXPECT_TRUE(archive->IsFileExist("levels//mylevel//levelinfo.xml"));
|
||||
@@ -484,7 +484,7 @@ namespace UnitTest
|
||||
pArchive.reset();
|
||||
EXPECT_TRUE(IsPackValid(testArchivePath_withMountPoint));
|
||||
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2", testArchivePath_withMountPoint));
|
||||
EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2", testArchivePath_withMountPoint));
|
||||
|
||||
// ---- BARRAGE OF TESTS
|
||||
EXPECT_TRUE(archive->IsFileExist("uniquename\\mylevel2\\levelinfo.xml"));
|
||||
@@ -543,7 +543,7 @@ namespace UnitTest
|
||||
archive->ClosePack(testArchivePath_withMountPoint);
|
||||
|
||||
// --- test to make sure that when you iterate only the first component is found, so bury it deep and ask for the root
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint));
|
||||
EXPECT_TRUE(archive->OpenPack("@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4", testArchivePath_withMountPoint));
|
||||
|
||||
found_mylevel_folder = false;
|
||||
handle = archive->FindFirst("uniquename\\*");
|
||||
@@ -574,9 +574,9 @@ namespace UnitTest
|
||||
found_mylevel_folder = false;
|
||||
|
||||
// now make sure no red herrings appear
|
||||
// for example, if a file is mounted at "@assets@\\uniquename\\mylevel2\\mylevel3\\mylevel4"
|
||||
// and the file "@assets@\\somethingelse" is requested it should not be found
|
||||
// in addition if the file "@assets@\\uniquename\\mylevel3" is requested it should not be found
|
||||
// for example, if a file is mounted at "@products@\\uniquename\\mylevel2\\mylevel3\\mylevel4"
|
||||
// and the file "@products@\\somethingelse" is requested it should not be found
|
||||
// in addition if the file "@products@\\uniquename\\mylevel3" is requested it should not be found
|
||||
handle = archive->FindFirst("somethingelse\\*");
|
||||
EXPECT_FALSE(static_cast<bool>(handle));
|
||||
|
||||
@@ -610,7 +610,7 @@ namespace UnitTest
|
||||
cpfio.Remove(genericArchiveFileName);
|
||||
|
||||
// create the asset alias directory
|
||||
cpfio.CreatePath("@assets@");
|
||||
cpfio.CreatePath("@products@");
|
||||
|
||||
// create generic file
|
||||
|
||||
@@ -635,11 +635,11 @@ namespace UnitTest
|
||||
pArchive.reset();
|
||||
EXPECT_TRUE(IsPackValid(genericArchiveFileName));
|
||||
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@", genericArchiveFileName));
|
||||
EXPECT_TRUE(archive->OpenPack("@products@", genericArchiveFileName));
|
||||
|
||||
// ---- BARRAGE OF TESTS
|
||||
EXPECT_TRUE(cpfio.Exists("testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml")); // this should be hte same file
|
||||
EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml")); // this should be hte same file
|
||||
EXPECT_TRUE(!cpfio.Exists("@log@/testfile.xml"));
|
||||
EXPECT_TRUE(!cpfio.Exists("@usercache@/testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml"));
|
||||
@@ -685,9 +685,9 @@ namespace UnitTest
|
||||
EXPECT_EQ(ResultCode::Success, cpfio.Close(normalFileHandle));
|
||||
|
||||
EXPECT_TRUE(!cpfio.IsDirectory("testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.IsDirectory("@assets@"));
|
||||
EXPECT_TRUE(cpfio.IsDirectory("@products@"));
|
||||
EXPECT_TRUE(cpfio.IsReadOnly("testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.IsReadOnly("@assets@/testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.IsReadOnly("@products@/testfile.xml"));
|
||||
EXPECT_TRUE(!cpfio.IsReadOnly("@log@/unittesttemp/realfileforunittest.xml"));
|
||||
|
||||
|
||||
@@ -714,10 +714,10 @@ namespace UnitTest
|
||||
|
||||
// find files test.
|
||||
AZ::IO::FixedMaxPath resolvedTestFilePath;
|
||||
EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@assets@/testfile.xml")));
|
||||
EXPECT_TRUE(cpfio.ResolvePath(resolvedTestFilePath, AZ::IO::PathView("@products@/testfile.xml")));
|
||||
bool foundIt = false;
|
||||
// note that this file exists only in the archive.
|
||||
cpfio.FindFiles("@assets@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName)
|
||||
cpfio.FindFiles("@products@", "*.xml", [&foundIt, &cpfio, &resolvedTestFilePath](const char* foundName)
|
||||
{
|
||||
AZ::IO::FixedMaxPath resolvedFoundPath;
|
||||
EXPECT_TRUE(cpfio.ResolvePath(resolvedFoundPath, AZ::IO::PathView(foundName)));
|
||||
@@ -734,10 +734,10 @@ namespace UnitTest
|
||||
|
||||
|
||||
// The following test is disabled because it will trigger an AZ_ERROR which will affect the outcome of this entire test
|
||||
// EXPECT_NE(ResultCode::Success, cpfio.Remove("@assets@/testfile.xml")); // may not delete archive files
|
||||
// EXPECT_NE(ResultCode::Success, cpfio.Remove("@products@/testfile.xml")); // may not delete archive files
|
||||
|
||||
// make sure it works with and without alias:
|
||||
EXPECT_TRUE(cpfio.Exists("@assets@/testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.Exists("@products@/testfile.xml"));
|
||||
EXPECT_TRUE(cpfio.Exists("testfile.xml"));
|
||||
|
||||
EXPECT_TRUE(cpfio.Exists("@log@/unittesttemp/realfileforunittest.xml"));
|
||||
@@ -788,22 +788,22 @@ namespace UnitTest
|
||||
EXPECT_TRUE(archive->ClosePack(realNameBuf));
|
||||
|
||||
// change its actual location:
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@", realNameBuf));
|
||||
EXPECT_TRUE(archive->IsFileExist("@assets@/foundit.dat"));
|
||||
EXPECT_TRUE(archive->OpenPack("@products@", realNameBuf));
|
||||
EXPECT_TRUE(archive->IsFileExist("@products@/foundit.dat"));
|
||||
EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous location!
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat"));
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat"));
|
||||
EXPECT_TRUE(archive->ClosePack(realNameBuf));
|
||||
|
||||
// try sub-folders
|
||||
EXPECT_TRUE(archive->OpenPack("@assets@/mystuff", realNameBuf));
|
||||
EXPECT_TRUE(archive->IsFileExist("@assets@/mystuff/foundit.dat"));
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat")); // do not find it in the previous locations!
|
||||
EXPECT_TRUE(archive->OpenPack("@products@/mystuff", realNameBuf));
|
||||
EXPECT_TRUE(archive->IsFileExist("@products@/mystuff/foundit.dat"));
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat")); // do not find it in the previous locations!
|
||||
EXPECT_FALSE(archive->IsFileExist("@usercache@/foundit.dat")); // do not find it in the previous locations!
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/notfoundit.dat")); // non-existent file
|
||||
EXPECT_FALSE(archive->IsFileExist("@assets@/mystuff/notfoundit.dat")); // non-existent file
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/foundit.dat", AZ::IO::IArchive::eFileLocation_OnDisk));
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/notfoundit.dat")); // non-existent file
|
||||
EXPECT_FALSE(archive->IsFileExist("@products@/mystuff/notfoundit.dat")); // non-existent file
|
||||
EXPECT_TRUE(archive->ClosePack(realNameBuf));
|
||||
}
|
||||
|
||||
@@ -861,7 +861,7 @@ namespace UnitTest
|
||||
AZ::IO::FileIOBase* ioBase = AZ::IO::FileIOBase::GetInstance();
|
||||
ASSERT_NE(nullptr, ioBase);
|
||||
|
||||
const char* assetsPath = ioBase->GetAlias("@assets@");
|
||||
const char* assetsPath = ioBase->GetAlias("@products@");
|
||||
ASSERT_NE(nullptr, assetsPath);
|
||||
|
||||
auto stringToAdd = AZ::IO::Path(assetsPath) / "textures" / "test.dds";
|
||||
@@ -872,7 +872,7 @@ namespace UnitTest
|
||||
// it normalizes the string, so the slashes flip and everything is lowercased.
|
||||
AZ::IO::FixedMaxPath resolvedAddedPath;
|
||||
AZ::IO::FixedMaxPath resolvedResourcePath;
|
||||
EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@assets@/textures/test.dds"));
|
||||
EXPECT_TRUE(ioBase->ReplaceAlias(resolvedAddedPath, "@products@/textures/test.dds"));
|
||||
EXPECT_TRUE(ioBase->ReplaceAlias(resolvedResourcePath, reslist->GetFirst()));
|
||||
EXPECT_EQ(resolvedAddedPath, resolvedResourcePath);
|
||||
reslist->Clear();
|
||||
|
||||
@@ -802,6 +802,51 @@ namespace UnitTest
|
||||
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
|
||||
}
|
||||
|
||||
TEST_F(AliasTest, GetAlias_LogsError_WhenAccessingDeprecatedAlias_Succeeds)
|
||||
{
|
||||
AZ::IO::LocalFileIO local;
|
||||
|
||||
AZ::IO::FixedMaxPathString aliasFolder;
|
||||
EXPECT_TRUE(local.ConvertToAbsolutePath("/temp", aliasFolder.data(), aliasFolder.capacity()));
|
||||
aliasFolder.resize_no_construct(AZStd::char_traits<char>::length(aliasFolder.data()));
|
||||
|
||||
local.SetAlias("@test@", aliasFolder.c_str());
|
||||
local.SetDeprecatedAlias("@deprecated@", "@test@");
|
||||
local.SetDeprecatedAlias("@deprecatednonexistent@", "@nonexistent@");
|
||||
local.SetDeprecatedAlias("@deprecatedsecond@", "@deprecated@");
|
||||
local.SetDeprecatedAlias("@deprecatednonaliaspath@", aliasFolder);
|
||||
|
||||
AZ_TEST_START_TRACE_SUPPRESSION;
|
||||
const char* testAlias = local.GetAlias("@test@");
|
||||
ASSERT_NE(nullptr, testAlias);
|
||||
EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
|
||||
AZ_TEST_STOP_TRACE_SUPPRESSION(0);
|
||||
|
||||
// Validate that accessing Deprecated Alias results in AZ_Error
|
||||
AZ_TEST_START_TRACE_SUPPRESSION;
|
||||
testAlias = local.GetAlias("@deprecated@");
|
||||
ASSERT_NE(nullptr, testAlias);
|
||||
EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
|
||||
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
|
||||
|
||||
AZ_TEST_START_TRACE_SUPPRESSION;
|
||||
testAlias = local.GetAlias("@deprecatednonexistent@");
|
||||
EXPECT_EQ(nullptr, testAlias);
|
||||
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
|
||||
|
||||
AZ_TEST_START_TRACE_SUPPRESSION;
|
||||
testAlias = local.GetAlias("@deprecatedsecond@");
|
||||
ASSERT_NE(nullptr, testAlias);
|
||||
EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
|
||||
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
|
||||
|
||||
AZ_TEST_START_TRACE_SUPPRESSION;
|
||||
testAlias = local.GetAlias("@deprecatednonaliaspath@");
|
||||
ASSERT_NE(nullptr, testAlias);
|
||||
EXPECT_EQ(AZ::IO::PathView(aliasFolder), AZ::IO::PathView(testAlias));
|
||||
AZ_TEST_STOP_TRACE_SUPPRESSION(1);
|
||||
}
|
||||
|
||||
class SmartMoveTests
|
||||
: public FolderFixture
|
||||
{
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace UnitTest
|
||||
|
||||
const char DummyFile[] = "dummy.txt";
|
||||
const char AnotherDummyFile[] = "Foo/Dummy.txt";
|
||||
|
||||
|
||||
const char DummyPattern[] = R"(^(.+)_([a-z]+)\..+$)";
|
||||
const char MatchingPatternFile[] = "Foo/dummy_abc.txt";
|
||||
const char NonMatchingPatternFile[] = "Foo/dummy_a8c.txt";
|
||||
@@ -75,7 +75,7 @@ namespace UnitTest
|
||||
: public AllocatorsFixture
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
AllocatorsFixture::SetUp();
|
||||
@@ -89,7 +89,7 @@ namespace UnitTest
|
||||
const char* testAssetRoot = m_tempDirectory.GetDirectory();
|
||||
|
||||
// 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
|
||||
// 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);
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace UnitTest
|
||||
AZ::IO::FileIOBase::SetInstance(nullptr);
|
||||
AZ::IO::FileIOBase::SetInstance(m_data->m_localFileIO.get());
|
||||
|
||||
AZ::IO::FileIOBase::GetInstance()->SetAlias("@assets@", testAssetRoot);
|
||||
AZ::IO::FileIOBase::GetInstance()->SetAlias("@products@", testAssetRoot);
|
||||
|
||||
m_data->m_excludeFileQueryManager = AZStd::make_unique<FileTagQueryManagerTest>(FileTagType::Exclude);
|
||||
m_data->m_includeFileQueryManager = AZStd::make_unique<FileTagQueryManagerTest>(FileTagType::Include);
|
||||
@@ -114,7 +114,7 @@ namespace UnitTest
|
||||
|
||||
AZStd::vector<AZStd::string> includedWildcardTags = { DummyFileTags[DummyFileTagIndex::GIdx] };
|
||||
EXPECT_TRUE(m_data->m_fileTagManager.AddFilePatternTags(DummyWildcard, FilePatternType::Wildcard, FileTagType::Include, includedWildcardTags).IsSuccess());
|
||||
|
||||
|
||||
AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", ExcludeFile, FileTagAsset::Extension()).c_str(), m_data->m_excludeFile);
|
||||
|
||||
AzFramework::StringFunc::Path::Join(testAssetRoot, AZStd::string::format("%s.%s", IncludeFile, FileTagAsset::Extension()).c_str(), m_data->m_includeFile);
|
||||
@@ -184,7 +184,7 @@ namespace UnitTest
|
||||
TEST_F(FileTagTest, FileTags_QueryByAbsoluteFilePath_Valid)
|
||||
{
|
||||
AZStd::string absoluteDummyFilePath = DummyFile;
|
||||
EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath));
|
||||
EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteDummyFilePath.c_str(), absoluteDummyFilePath));
|
||||
|
||||
AZStd::set<AZStd::string> tags = m_data->m_excludeFileQueryManager->GetTags(absoluteDummyFilePath);
|
||||
|
||||
@@ -196,7 +196,7 @@ namespace UnitTest
|
||||
ASSERT_EQ(tags.size(), 0);
|
||||
|
||||
AZStd::string absoluteAnotherDummyFilePath = AnotherDummyFile;
|
||||
EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@assets@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath));
|
||||
EXPECT_TRUE(AzFramework::StringFunc::AssetDatabasePath::Join("@products@", absoluteAnotherDummyFilePath.c_str(), absoluteAnotherDummyFilePath));
|
||||
|
||||
tags = m_data->m_includeFileQueryManager->GetTags(absoluteAnotherDummyFilePath);
|
||||
ASSERT_EQ(tags.size(), 2);
|
||||
@@ -213,7 +213,7 @@ namespace UnitTest
|
||||
|
||||
// Set the customized alias
|
||||
AZStd::string customizedAliasFilePath;
|
||||
const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@assets@");
|
||||
const char* assetsAlias = AZ::IO::FileIOBase::GetInstance()->GetAlias("@products@");
|
||||
AzFramework::StringFunc::AssetDatabasePath::Join(assetsAlias, "foo", customizedAliasFilePath);
|
||||
AZ::IO::FileIOBase::GetInstance()->SetAlias("@customizedalias@", customizedAliasFilePath.c_str());
|
||||
|
||||
@@ -305,7 +305,7 @@ namespace UnitTest
|
||||
|
||||
m_data->m_excludeFileQueryManager->ClearData();
|
||||
EXPECT_TRUE(m_data->m_excludeFileQueryManager->Load(m_data->m_excludeFile));
|
||||
|
||||
|
||||
AZStd::set<AZStd::string> outputTags = m_data->m_excludeFileQueryManager->GetTags(MatchingWildcardFile);
|
||||
|
||||
EXPECT_EQ(outputTags.size(), 2);
|
||||
|
||||
@@ -6,81 +6,19 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <AzCore/IO/FileIO.h>
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzCore/Serialization/ObjectStream.h>
|
||||
#include <AzCore/UnitTest/TestTypes.h>
|
||||
#include <AzFramework/IO/LocalFileIO.h>
|
||||
#include <AzCore/Component/ComponentApplication.h>
|
||||
#include <AzTest/Utils.h>
|
||||
#include <AzFramework/Application/Application.h>
|
||||
|
||||
namespace UnitTest
|
||||
{
|
||||
using namespace AZ;
|
||||
|
||||
class FileIOBaseRAII
|
||||
{
|
||||
public:
|
||||
FileIOBaseRAII(AZ::IO::FileIOBase& fileIO)
|
||||
: m_prevFileIO(AZ::IO::FileIOBase::GetInstance())
|
||||
{
|
||||
AZ::IO::FileIOBase::SetInstance(&fileIO);
|
||||
}
|
||||
|
||||
~FileIOBaseRAII()
|
||||
{
|
||||
AZ::IO::FileIOBase::SetInstance(m_prevFileIO);
|
||||
}
|
||||
private:
|
||||
AZ::IO::FileIOBase* m_prevFileIO;
|
||||
};
|
||||
|
||||
class GenAppDescriptors
|
||||
: public AllocatorsTestFixture
|
||||
{
|
||||
public:
|
||||
|
||||
void run()
|
||||
{
|
||||
struct Config
|
||||
{
|
||||
const char* platformName;
|
||||
const char* configName;
|
||||
const char* libSuffix;
|
||||
};
|
||||
|
||||
ComponentApplication app;
|
||||
|
||||
SerializeContext serializeContext;
|
||||
AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app);
|
||||
AZ::Entity::Reflect(&serializeContext);
|
||||
DynamicModuleDescriptor::Reflect(&serializeContext);
|
||||
|
||||
AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity");
|
||||
|
||||
const Config config = {"Platform", "Config", "libSuffix"};
|
||||
|
||||
AZ::ComponentApplication::Descriptor descriptor;
|
||||
|
||||
if (config.libSuffix && config.libSuffix[0])
|
||||
{
|
||||
FakePopulateModules(descriptor, config.libSuffix);
|
||||
}
|
||||
|
||||
const AZStd::string filename = AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName);
|
||||
|
||||
IO::FileIOStream stream(filename.c_str(), IO::OpenMode::ModeWrite);
|
||||
ObjectStream* objStream = ObjectStream::Create(&stream, serializeContext, ObjectStream::ST_XML);
|
||||
bool descWriteOk = objStream->WriteClass(&descriptor);
|
||||
(void)descWriteOk;
|
||||
AZ_Warning("ComponentApplication", descWriteOk, "Failed to write memory descriptor to application descriptor file %s!", filename.c_str());
|
||||
bool entityWriteOk = objStream->WriteClass(&dummySystemEntity);
|
||||
(void)entityWriteOk;
|
||||
AZ_Warning("ComponentApplication", entityWriteOk, "Failed to write system entity to application descriptor file %s!", filename.c_str());
|
||||
bool flushOk = objStream->Finalize();
|
||||
(void)flushOk;
|
||||
AZ_Warning("ComponentApplication", flushOk, "Failed finalizing application descriptor file %s!", filename.c_str());
|
||||
|
||||
}
|
||||
|
||||
void FakePopulateModules(AZ::ComponentApplication::Descriptor& desc, const char* libSuffix)
|
||||
{
|
||||
static const char* modules[] =
|
||||
@@ -100,10 +38,44 @@ namespace UnitTest
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(GenAppDescriptors, Test)
|
||||
TEST_F(GenAppDescriptors, WriteDescriptor_ToXML_Succeeds)
|
||||
{
|
||||
AZ::IO::LocalFileIO fileIO;
|
||||
FileIOBaseRAII restoreFileIOScope(fileIO);
|
||||
run();
|
||||
struct Config
|
||||
{
|
||||
const char* platformName;
|
||||
const char* configName;
|
||||
const char* libSuffix;
|
||||
};
|
||||
|
||||
AzFramework::Application app;
|
||||
|
||||
AZ::SerializeContext serializeContext;
|
||||
AZ::ComponentApplication::Descriptor::Reflect(&serializeContext, &app);
|
||||
AZ::Entity::Reflect(&serializeContext);
|
||||
AZ::DynamicModuleDescriptor::Reflect(&serializeContext);
|
||||
|
||||
AZ::Entity dummySystemEntity(AZ::SystemEntityId, "SystemEntity");
|
||||
|
||||
const Config config = {"Platform", "Config", "libSuffix"};
|
||||
|
||||
AZ::ComponentApplication::Descriptor descriptor;
|
||||
|
||||
if (config.libSuffix && config.libSuffix[0])
|
||||
{
|
||||
FakePopulateModules(descriptor, config.libSuffix);
|
||||
}
|
||||
|
||||
AZ::Test::ScopedAutoTempDirectory tempDirectory;
|
||||
const auto filename = AZ::IO::Path(tempDirectory.GetDirectory()) /
|
||||
AZStd::string::format("LYConfig_%s%s.xml", config.platformName, config.configName);
|
||||
|
||||
AZ::IO::FileIOStream stream(filename.c_str(), AZ::IO::OpenMode::ModeWrite);
|
||||
auto objStream = AZ::ObjectStream::Create(&stream, serializeContext, AZ::ObjectStream::ST_XML);
|
||||
const bool descWriteOk = objStream->WriteClass(&descriptor);
|
||||
EXPECT_TRUE(descWriteOk) << "Failed to write memory descriptor to application descriptor file " << filename.c_str() << "!";
|
||||
const bool entityWriteOk = objStream->WriteClass(&dummySystemEntity);
|
||||
EXPECT_TRUE(entityWriteOk) << "Failed to write system entity to application descriptor file " << filename.c_str() << "!";
|
||||
const bool flushOk = objStream->Finalize();
|
||||
EXPECT_TRUE(flushOk) << "Failed finalizing application descriptor file " << filename.c_str() << "!";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user