Merge branch 'development' into cmake/SPEC-7484

Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>

# Conflicts:
#	Code/Editor/Animation/SkeletonHierarchy.cpp
#	Code/Editor/Animation/SkeletonMapper.cpp
#	Code/Editor/Animation/SkeletonMapperOperator.cpp
#	Code/Editor/LogFile.cpp
#	Code/Editor/ResourceSelectorHost.cpp
#	Code/Editor/SettingsManager.cpp
#	Code/Editor/Util/EditorUtils.cpp
#	Code/Editor/Util/FileUtil.cpp
#	Code/Editor/Util/IXmlHistoryManager.h
#	Code/Editor/Util/ImageTIF.cpp
#	Code/Editor/Util/StringHelpers.cpp
#	Code/Editor/Util/XmlHistoryManager.cpp
#	Code/Editor/Util/XmlHistoryManager.h
This commit is contained in:
Esteban Papp
2021-08-06 10:08:37 -07:00
252 changed files with 2886 additions and 1079 deletions
@@ -8,72 +8,100 @@
#include "Utils.h"
#include <AzCore/IO/Path/Path.h>
#include <AzCore/std/functional.h>
#include <AzCore/StringFunc/StringFunc.h>
UnitTest::ScopedTemporaryDirectory::ScopedTemporaryDirectory()
namespace UnitTest
{
constexpr int MaxAttempts = 255;
void DeleteFolderRecursive(const AZ::IO::PathView& path)
{
auto callback = [&path](AZStd::string_view filename, bool isFile) -> bool
{
if (isFile)
{
auto filePath = AZ::IO::FixedMaxPath(path) / filename;
AZ::IO::SystemFile::Delete(filePath.c_str());
}
else
{
if (filename != "." && filename != "..")
{
auto folderPath = AZ::IO::FixedMaxPath(path) / filename;
DeleteFolderRecursive(folderPath);
}
}
return true;
};
auto searchPath = AZ::IO::FixedMaxPath(path) / "*";
AZ::IO::SystemFile::FindFiles(searchPath.c_str(), callback);
AZ::IO::SystemFile::DeleteDir(AZ::IO::FixedMaxPathString(path.Native()).c_str());
}
ScopedTemporaryDirectory::ScopedTemporaryDirectory()
{
constexpr int MaxAttempts = 255;
#if !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
const auto userTempFolder = std::filesystem::temp_directory_path();
const auto userTempFolder = std::filesystem::temp_directory_path();
#else
AZ::IO::Path userTempFolder("/tmp");
AZ::IO::Path userTempFolder("/tmp");
#endif
for (int i = 0; i < MaxAttempts; ++i)
{
auto randomFolder = AZ::Uuid::CreateRandom().ToString<AZStd::fixed_string<512>>(false, false);
AZ::IO::FixedMaxPath testPath;
#if !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
auto path = userTempFolder / ("UnitTest-" + randomFolder).c_str();
testPath = path.string().c_str();
#else
userTempFolder /= ("UnitTest-" + randomFolder).c_str();
testPath = userTempFolder.c_str();
#endif
if (!AZ::IO::SystemFile::Exists(testPath.c_str()))
for (int i = 0; i < MaxAttempts; ++i)
{
#if !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
m_path = path;
m_tempDirectory = m_path.string().c_str();
auto randomFolder = AZ::Uuid::CreateRandom().ToString<AZStd::fixed_string<512>>(false, false);
AZ::IO::FixedMaxPath testPath;
#if !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
auto path = userTempFolder / ("UnitTest-" + randomFolder).c_str();
testPath = path.string().c_str();
#else
m_tempDirectory = testPath;
userTempFolder /= ("UnitTest-" + randomFolder).c_str();
testPath = userTempFolder.c_str();
#endif
m_directoryExists = AZ::IO::SystemFile::CreateDir(m_tempDirectory.c_str());
break;
if (!AZ::IO::SystemFile::Exists(testPath.c_str()))
{
#if !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
m_path = path;
m_tempDirectory = m_path.string().c_str();
#else
m_tempDirectory = testPath;
#endif
m_directoryExists = AZ::IO::SystemFile::CreateDir(m_tempDirectory.c_str());
break;
}
}
AZ_Error("ScopedTemporaryDirectory", !m_tempDirectory.empty(), "Failed to create unique temporary directory after attempting %d random folder names", MaxAttempts);
}
ScopedTemporaryDirectory::~ScopedTemporaryDirectory()
{
if (m_directoryExists)
{
DeleteFolderRecursive(m_tempDirectory);
}
}
AZ_Error("ScopedTemporaryDirectory", !m_tempDirectory.empty(), "Failed to create unique temporary directory after attempting %d random folder names", MaxAttempts);
}
UnitTest::ScopedTemporaryDirectory::~ScopedTemporaryDirectory()
{
if (m_directoryExists)
bool ScopedTemporaryDirectory::IsValid() const
{
AZ::IO::SystemFile::DeleteDir(m_tempDirectory.c_str());
return m_directoryExists;
}
}
bool UnitTest::ScopedTemporaryDirectory::IsValid() const
{
return m_directoryExists;
}
const char* UnitTest::ScopedTemporaryDirectory::GetDirectory() const
{
return m_tempDirectory.c_str();
}
const char* ScopedTemporaryDirectory::GetDirectory() const
{
return m_tempDirectory.c_str();
}
#if !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
const std::filesystem::path& UnitTest::ScopedTemporaryDirectory::GetPath() const
{
return m_path;
}
std::filesystem::path UnitTest::ScopedTemporaryDirectory::operator/(const std::filesystem::path& rhs) const
{
return m_path / rhs;
}
const std::filesystem::path& ScopedTemporaryDirectory::GetPath() const
{
return m_path;
}
std::filesystem::path ScopedTemporaryDirectory::operator/(const std::filesystem::path& rhs) const
{
return m_path / rhs;
}
#endif // !AZ_TRAIT_USE_POSIX_TEMP_FOLDER
}
@@ -18,6 +18,9 @@
namespace UnitTest
{
//! Deletes a folder hierarchy from the supplied path
void DeleteFolderRecursive(const AZ::IO::PathView& path);
// Creates a randomly named folder inside the user's temporary directory.
// The folder and all contents will be destroyed when the object goes out of scope
struct ScopedTemporaryDirectory