Integrating latest from github/staging
Integrating up through commit 5e1bdae
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include <AzCore/base.h>
|
||||
#include <AzCore/Component/ComponentApplication.h>
|
||||
#include <AzCore/UnitTest/TestTypes.h>
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzToolsFramework/API/AssetDatabaseBus.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
@@ -44,7 +45,7 @@ namespace AssetProcessor
|
||||
public:
|
||||
AssetCatalogForUnitTest(QObject* parent, AssetProcessor::PlatformConfiguration* platformConfiguration)
|
||||
: AssetCatalog(parent, platformConfiguration) {}
|
||||
|
||||
|
||||
// prevent automatic save on shutdown, no point in doing that in unit test mode, just wastes time.
|
||||
virtual ~AssetCatalogForUnitTest()
|
||||
{
|
||||
@@ -68,7 +69,7 @@ namespace AssetProcessor
|
||||
: public ScopedAllocatorSetupFixture
|
||||
{
|
||||
protected:
|
||||
|
||||
|
||||
// store all data we create here so that it can be destroyed on shutdown before we remove allocators
|
||||
struct DataMembers
|
||||
{
|
||||
@@ -89,7 +90,7 @@ namespace AssetProcessor
|
||||
int argc = 0;
|
||||
DataMembers() : coreApp(argc, nullptr)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@@ -108,23 +109,28 @@ namespace AssetProcessor
|
||||
m_systemEntity = m_app->Create(desc);
|
||||
|
||||
m_data = azcreate(DataMembers, ());
|
||||
|
||||
|
||||
AssetUtilities::ComputeAssetRoot(m_data->m_priorAssetRoot);
|
||||
AssetUtilities::ResetAssetRoot();
|
||||
|
||||
// the canonicalization of the path here is to get around the fact that on some platforms
|
||||
// the "temporary" folder location could be junctioned into some other folder and getting "QDir::current()"
|
||||
// and other similar functions may actually return a different string but still be referring to the same folder
|
||||
// and other similar functions may actually return a different string but still be referring to the same folder
|
||||
m_data->m_temporarySourceDir = QDir(m_data->m_temporaryDir.path());
|
||||
QString canonicalTempDirPath = AssetUtilities::NormalizeDirectoryPath(m_data->m_temporarySourceDir.canonicalPath());
|
||||
m_data->m_temporarySourceDir = QDir(canonicalTempDirPath);
|
||||
m_data->m_scopedDir.Setup(m_data->m_temporarySourceDir.path());
|
||||
m_data->m_gameName = AssetUtilities::ComputeGameName("SamplesProject"); // uses the above file.
|
||||
m_data->m_gameName = AssetUtilities::ComputeProjectName("SamplesProject"); // uses the above file.
|
||||
|
||||
AssetUtilities::ResetAssetRoot();
|
||||
QDir newRoot; // throwaway dummy var - we just want to invoke the below function
|
||||
AssetUtilities::ComputeAssetRoot(newRoot, &m_data->m_temporarySourceDir);
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
auto cacheRootKey =
|
||||
AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_cache_path";
|
||||
settingsRegistry->Set(cacheRootKey, m_data->m_temporarySourceDir.absoluteFilePath("Cache").toUtf8().constData());
|
||||
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*settingsRegistry);
|
||||
AssetUtilities::ComputeProjectCacheRoot(m_data->m_cacheRootDir);
|
||||
QString normalizedCacheRoot = AssetUtilities::NormalizeDirectoryPath(m_data->m_cacheRootDir.absolutePath());
|
||||
m_data->m_cacheRootDir = QDir(normalizedCacheRoot);
|
||||
@@ -181,7 +187,7 @@ namespace AssetProcessor
|
||||
|
||||
m_data->m_databaseLocationListener.BusConnect();
|
||||
m_data->m_dbConn.OpenDatabase();
|
||||
|
||||
|
||||
BuildConfig(m_data->m_temporarySourceDir, &(m_data->m_dbConn), m_data->m_config);
|
||||
m_data->m_assetCatalog.reset(new AssetCatalogForUnitTest(nullptr, &(m_data->m_config)));
|
||||
}
|
||||
@@ -331,7 +337,7 @@ namespace AssetProcessor
|
||||
{
|
||||
bool relPathfound = false;
|
||||
AZStd::string relPath;
|
||||
AZStd::string fullPath(fileToCheck.toStdString().c_str());
|
||||
AZStd::string fullPath(fileToCheck.toUtf8().constData());
|
||||
|
||||
AzToolsFramework::AssetSystemRequestBus::BroadcastResult(relPathfound, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetRelativeProductPathFromFullSourceOrProductPath, fullPath, relPath);
|
||||
|
||||
@@ -356,7 +362,7 @@ namespace AssetProcessor
|
||||
{
|
||||
bool fullPathfound = false;
|
||||
AZStd::string fullPath;
|
||||
AZStd::string relPath(fileToCheck.toStdString().c_str());
|
||||
AZStd::string relPath(fileToCheck.toUtf8().constData());
|
||||
|
||||
AzToolsFramework::AssetSystemRequestBus::BroadcastResult(fullPathfound, &AzToolsFramework::AssetSystem::AssetSystemRequest::GetFullSourcePathFromRelativeProductPath, relPath, fullPath);
|
||||
|
||||
@@ -419,7 +425,7 @@ namespace AssetProcessor
|
||||
ASSERT_EQ(m_data->m_absorber.m_numAssertsAbsorbed, 2);
|
||||
// reset the absorber before we leave this assert-test, so that it doesn't cause failure of the test itself
|
||||
m_data->m_absorber.Clear();
|
||||
|
||||
|
||||
ASSERT_TRUE(TestGetRelativeProductPath("", false, { "" }));
|
||||
ASSERT_TRUE(TestGetFullSourcePath("", m_data->m_temporarySourceDir, false, ""));
|
||||
}
|
||||
@@ -444,75 +450,76 @@ namespace AssetProcessor
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_WithGameName_ReturnsFileInGameFolder)
|
||||
{
|
||||
// feed it a product path with gamename and a platform name, returns it without gamename
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName + "/aaa/basefile.txt");
|
||||
// feed it a product path with a platform name, returns it
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/aaa/basefile.txt");
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "aaa/basefile.txt" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_WithoutGameName_ReturnsFileInRootFolder)
|
||||
{
|
||||
// feed it a product path without gamename, just the file name since its supposed to be a root file
|
||||
// feed it a product path, just the file name since its supposed to be a root file
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/basefile.txt");
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "basefile.txt" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_BadCasingInPlatform_ReturnsRelativePath)
|
||||
{
|
||||
// feed it a product path with gamename but poor casing (test 1: the pc platform is not matching case)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("Pc/" + m_data->m_gameName + "/aaa/basefile.txt");
|
||||
// feed it a product path but with poor casing (test 1: the pc platform is not matching case)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("Pc") + "/aaa/basefile.txt");
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "aaa/basefile.txt" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_BadCasingInGameName_ReturnsRelativePath)
|
||||
{
|
||||
//feed it a product path with gamename but poor casing (test 2: the gameName is not matching case)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toUpper() + "/aaa/basefile.txt");
|
||||
//feed it a product path but with poor casing (test 2: the gameName is not matching case)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/aaa/basefile.txt");
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "aaa/basefile.txt" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_FolderName_ReturnsFolderNameOnly)
|
||||
{
|
||||
// feed it a product path that resolves to a directory name instead of a file. GameName is 'incorrect' (upper)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toUpper() + "/aaa");
|
||||
// feed it a product path that resolves to a directory name instead of a file.
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/aaa");
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "aaa" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_FolderNameExtraSlash_ReturnsFolderNameOnlyNoExtraSlash)
|
||||
{
|
||||
// make sure it doesn't keep any trailing slashes. GameName is 'incorrect' (upper)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toUpper() + "/aaa/"); // extra trailing slash
|
||||
// make sure it doesn't keep any trailing slashes.
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/aaa/"); // extra trailing slash
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "aaa" })); // the API should never result in a trailing slash
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_FolderNameExtraWrongWaySlash_ReturnsFolderNameOnlyNoExtraWrongSlash)
|
||||
{
|
||||
// make sure it doesn't keep any trailing slashes. GameName is 'incorrect' (upper)
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toUpper() + "/aaa\\"); // extra trailing wrongway slash
|
||||
// make sure it doesn't keep any trailing slashes.
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/aaa\\"); // extra trailing wrongway slash
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "aaa" })); // the API should never result in a trailing slash
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_RelativeDirectoryNameWhichDoesNotExist_ReturnsFolderNameOnly)
|
||||
{
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toLower() + "/nonexistantfolder"); // extra trailing wrongway slash
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "nonexistantfolder" }));
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/nonexistantfolder"); // extra trailing wrongway slash
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "nonexistantfolder" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_RelativeDirectoryNameWhichDoesNotExistWithExtraSlash_ReturnsFolderNameOnly)
|
||||
{
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toLower() + "/nonexistantfolder/"); // extra trailing wrongway slash
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/nonexistantfolder/"); // extra trailing wrongway slash
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "nonexistantfolder" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_RelativeDirectoryNameWhichDoesNotExistWithExtraWrongWaySlash_ReturnsFolderNameOnly)
|
||||
{
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc\\" + m_data->m_gameName.toLower() + "\\nonexistantfolder\\"); // extra trailing wrongway slash
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "\\nonexistantfolder\\"); // extra trailing wrongway slash
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "nonexistantfolder" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_RelativePathToSourceFile_ReturnsProductFilePath)
|
||||
{
|
||||
QString fileToCheck = m_data->m_temporarySourceDir.absoluteFilePath("subfolder3/BaseFile.txt");
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "basefilez.arc2", "basefileaz.azm2", "basefile.arc2", "basefile.azm2" }));
|
||||
ASSERT_TRUE(TestGetRelativeProductPath(fileToCheck, true, { "basefilez.arc2", "basefileaz.azm2",
|
||||
"basefile.arc2", "basefile.azm2" }));
|
||||
}
|
||||
|
||||
TEST_F(AssetCatalogTestWithProducts, GetRelativeProductPathFromFullSourceOrProductPath_RelativePathToSourceFile_BadCasing_ReturnsProductFilePath)
|
||||
@@ -533,9 +540,9 @@ namespace AssetProcessor
|
||||
// ----- Test the ProcessGetFullAssetPath function on product files
|
||||
{
|
||||
QStringList pcouts;
|
||||
pcouts.push_back(m_data->m_cacheRootDir.filePath(QString("pc/") + m_data->m_gameName + "/subfolder3/randomfileoutput.random"));
|
||||
pcouts.push_back(m_data->m_cacheRootDir.filePath(QString("pc/") + m_data->m_gameName + "/subfolder3/randomfileoutput.random1"));
|
||||
pcouts.push_back(m_data->m_cacheRootDir.filePath(QString("pc/") + m_data->m_gameName + "/subfolder3/randomfileoutput.random2"));
|
||||
pcouts.push_back(m_data->m_cacheRootDir.filePath(QString("pc") + "/subfolder3/randomfileoutput.random"));
|
||||
pcouts.push_back(m_data->m_cacheRootDir.filePath(QString("pc") + "/subfolder3/randomfileoutput.random1"));
|
||||
pcouts.push_back(m_data->m_cacheRootDir.filePath(QString("pc") + "/subfolder3/randomfileoutput.random2"));
|
||||
|
||||
AZ::s64 jobId;
|
||||
ASSERT_TRUE(AddSourceAndJob("subfolder3", "somerandomfile.random", &(m_data->m_dbConn), jobId));
|
||||
@@ -591,32 +598,32 @@ namespace AssetProcessor
|
||||
QString fileToCheck = "@somerandomalias@/subfolder3/randomfileoutput.random1";
|
||||
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
|
||||
}
|
||||
|
||||
|
||||
TEST_F(AssetCatalogTest_GetFullSourcePath, InvalidAliasMissingSeperator_ReturnsAbsolutePathToSource)
|
||||
{
|
||||
//feed it a path with some random alias and asset id but no separator
|
||||
QString fileToCheck = "@somerandomalias@subfolder3/randomfileoutput.random1";
|
||||
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
|
||||
}
|
||||
|
||||
|
||||
TEST_F(AssetCatalogTest_GetFullSourcePath, InvalidSourcePathContainingCacheAlias_ReturnsAbsolutePathToSource)
|
||||
{
|
||||
//feed it a path with alias and input name
|
||||
QString fileToCheck = "@assets@/somerandomfile.random";
|
||||
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
|
||||
}
|
||||
|
||||
|
||||
TEST_F(AssetCatalogTest_GetFullSourcePath, AbsolutePathToCache_ReturnsAbsolutePathToSource)
|
||||
{
|
||||
//feed it an absolute path with cacheroot
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath("pc/" + m_data->m_gameName.toLower() + "/subfolder3/randomfileoutput.random1");
|
||||
QString fileToCheck = m_data->m_cacheRootDir.filePath(QString("pc") + "/subfolder3/randomfileoutput.random1");
|
||||
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
|
||||
}
|
||||
|
||||
|
||||
TEST_F(AssetCatalogTest_GetFullSourcePath, ProductNameIncludingPlatformAndGameName_ReturnsAbsolutePathToSource)
|
||||
{
|
||||
//feed it a productName directly
|
||||
QString fileToCheck = "pc/" + m_data->m_gameName + "/subfolder3/randomfileoutput.random1";
|
||||
QString fileToCheck = QString("pc") + "/subfolder3/randomfileoutput.random1";
|
||||
EXPECT_TRUE(TestGetFullSourcePath(fileToCheck, m_data->m_temporarySourceDir, true, "subfolder3/somerandomfile.random"));
|
||||
}
|
||||
|
||||
@@ -624,7 +631,7 @@ namespace AssetProcessor
|
||||
: public AssetCatalogTest
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
struct AssetCatalogTest_AssetInfo_DataMembers
|
||||
{
|
||||
AssetId m_assetA = AssetId(Uuid::CreateRandom(), 0);
|
||||
@@ -650,7 +657,7 @@ namespace AssetProcessor
|
||||
|
||||
AzFramework::StringFunc::Path::Join(m_customDataMembers->m_subfolder1AbsolutePath.c_str(), m_customDataMembers->m_assetASourceRelPath.c_str(), m_customDataMembers->m_assetAFullPath);
|
||||
CreateDummyFile(QString::fromUtf8(m_customDataMembers->m_assetAFullPath.c_str()), m_customDataMembers->m_assetTestString.c_str());
|
||||
|
||||
|
||||
AzFramework::StringFunc::Path::Join(m_data->m_cacheRootDir.absolutePath().toUtf8().constData(), m_customDataMembers->m_assetAProductRelPath.c_str(), m_customDataMembers->m_assetAProductFullPath);
|
||||
CreateDummyFile(QString::fromUtf8(m_customDataMembers->m_assetAProductFullPath.c_str()), m_customDataMembers->m_productTestString.c_str());
|
||||
}
|
||||
@@ -724,7 +731,7 @@ namespace AssetProcessor
|
||||
return true;
|
||||
};
|
||||
|
||||
void TearDown() override
|
||||
void TearDown() override
|
||||
{
|
||||
azdestroy(m_customDataMembers);
|
||||
AssetCatalogTest::TearDown();
|
||||
@@ -848,7 +855,7 @@ namespace AssetProcessor
|
||||
using namespace AzFramework::AssetSystem;
|
||||
|
||||
PlatformConfiguration config;
|
||||
|
||||
|
||||
config.EnablePlatform(AssetBuilderSDK::PlatformInfo("pc", { "test" }));
|
||||
|
||||
{
|
||||
@@ -1060,7 +1067,7 @@ namespace AssetProcessor
|
||||
productDependency.m_dependencySourceGuid = m_sourceFileWithDifferentProductsPerPlatform;
|
||||
productDependency.m_unresolvedPath = AZStd::string();
|
||||
|
||||
QString platformGameDir = QDir(cacheRoot.absoluteFilePath(productDependency.m_platform.c_str())).filePath(AssetUtilities::ComputeGameName().toLower());
|
||||
QString platformGameDir = QDir(cacheRoot.absoluteFilePath(productDependency.m_platform.c_str())).filePath(AssetUtilities::ComputeProjectName().toLower());
|
||||
QString assetCatalogFile = QDir(platformGameDir).filePath("assetcatalog.xml");
|
||||
QFileInfo fileInfo(assetCatalogFile);
|
||||
|
||||
@@ -1071,7 +1078,7 @@ namespace AssetProcessor
|
||||
// process all events
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents);
|
||||
|
||||
// This ensures that no save catalog event was queued when we resolve dependency
|
||||
// This ensures that no save catalog event was queued when we resolve dependency
|
||||
EXPECT_FALSE(fileInfo.exists());
|
||||
}
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace AssetProcessorMessagesTests
|
||||
m_batchApplicationManager->BeforeRun();
|
||||
|
||||
// Override Game Name to be "SamplesProject"
|
||||
AssetUtilities::ComputeGameName("SamplesProject", true);
|
||||
AssetUtilities::ComputeProjectName("SamplesProject", true);
|
||||
|
||||
m_batchApplicationManager->m_platformConfiguration = new PlatformConfiguration();
|
||||
m_batchApplicationManager->InitAssetProcessorManager();
|
||||
@@ -144,7 +144,7 @@ namespace AssetProcessorMessagesTests
|
||||
RunNetworkRequest([]()
|
||||
{
|
||||
AZStd::string appBranchToken;
|
||||
AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::CalculateBranchTokenForAppRoot, appBranchToken);
|
||||
AzFramework::ApplicationRequests::Bus::Broadcast(&AzFramework::ApplicationRequests::CalculateBranchTokenForEngineRoot, appBranchToken);
|
||||
|
||||
AzFramework::AssetSystem::ConnectionSettings connectionSettings;
|
||||
connectionSettings.m_assetProcessorIp = "127.0.0.1";
|
||||
|
||||
@@ -181,9 +181,11 @@ namespace UnitTests
|
||||
ASSERT_TRUE(UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath("dev/testfolder/file.foo")));
|
||||
ASSERT_TRUE(UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath("dev/testfolder/File.bar")));
|
||||
|
||||
|
||||
AZ::IO::FileIOBase::SetInstance(nullptr); // The API requires the old instance to be destroyed first
|
||||
AZ::IO::FileIOBase::SetInstance(new AZ::IO::LocalFileIO());
|
||||
if (AZ::IO::FileIOBase::GetInstance() == nullptr)
|
||||
{
|
||||
m_localFileIo = AZStd::make_unique<AZ::IO::LocalFileIO>();
|
||||
AZ::IO::FileIOBase::SetInstance(m_localFileIo.get());
|
||||
}
|
||||
|
||||
m_data->m_reporter = AZStd::make_unique<SourceFileRelocator>(m_data->m_connection, &m_data->m_platformConfig);
|
||||
|
||||
@@ -204,6 +206,12 @@ namespace UnitTests
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
if (AZ::IO::FileIOBase::GetInstance() == m_localFileIo.get())
|
||||
{
|
||||
AZ::IO::FileIOBase::SetInstance(nullptr);
|
||||
}
|
||||
m_localFileIo.reset();
|
||||
|
||||
AZ::JobContext::SetGlobalContext(nullptr);
|
||||
delete m_data->m_jobContext;
|
||||
delete m_data->m_jobManager;
|
||||
@@ -405,6 +413,7 @@ namespace UnitTests
|
||||
// we store the above data in a unique_ptr so that its memory can be cleared during TearDown() in one call, before we destroy the memory
|
||||
// allocator, reducing the chance of missing or forgetting to destroy one in the future.
|
||||
AZStd::unique_ptr<StaticData> m_data;
|
||||
AZStd::unique_ptr<AZ::IO::LocalFileIO> m_localFileIo;
|
||||
};
|
||||
|
||||
TEST_F(SourceFileRelocatorTest, GetSources_SingleFile_Succeeds)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
#include "AssetProcessorManagerTest.h"
|
||||
#include "native/AssetManager/PathDependencyManager.h"
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzToolsFramework/ToolsFileUtils/ToolsFileUtils.h>
|
||||
|
||||
#include <AzTest/AzTest.h>
|
||||
@@ -41,7 +42,7 @@ public:
|
||||
friend class GTEST_TEST_CLASS_NAME_(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_WithDifferentTypes_BasicTest);
|
||||
friend class GTEST_TEST_CLASS_NAME_(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_Reverse_BasicTest);
|
||||
friend class GTEST_TEST_CLASS_NAME_(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_MissingFiles_ReturnsNoPathWithPlaceholders);
|
||||
|
||||
|
||||
friend class GTEST_TEST_CLASS_NAME_(AssetProcessorManagerTest, BuilderDirtiness_BeforeComputingDirtiness_AllDirty);
|
||||
friend class GTEST_TEST_CLASS_NAME_(AssetProcessorManagerTest, BuilderDirtiness_EmptyDatabase_AllDirty);
|
||||
friend class GTEST_TEST_CLASS_NAME_(AssetProcessorManagerTest, BuilderDirtiness_SameAsLastTime_NoneDirty);
|
||||
@@ -206,6 +207,12 @@ void AssetProcessorManagerTest::SetUp()
|
||||
m_scopeDir->Setup(m_tempDir.path());
|
||||
QDir tempPath(m_tempDir.path());
|
||||
|
||||
auto registry = AZ::SettingsRegistry::Get();
|
||||
auto cacheRootKey =
|
||||
AZ::SettingsRegistryInterface::FixedValueString(AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey) + "/project_cache_path";
|
||||
registry->Set(cacheRootKey, tempPath.absoluteFilePath("Cache").toUtf8().constData());
|
||||
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry);
|
||||
|
||||
m_data->m_databaseLocationListener.BusConnect();
|
||||
|
||||
// in other unit tests we may open the database called ":memory:" to use an in-memory database instead of one on disk.
|
||||
@@ -220,7 +227,7 @@ void AssetProcessorManagerTest::SetUp()
|
||||
SetArgReferee<0>(m_data->m_databaseLocation),
|
||||
Return(true)));
|
||||
|
||||
m_gameName = AssetUtilities::ComputeGameName("SamplesProject", true);
|
||||
m_gameName = AssetUtilities::ComputeProjectName("SamplesProject", true);
|
||||
|
||||
AssetUtilities::ResetAssetRoot();
|
||||
QDir newRoot;
|
||||
@@ -230,7 +237,6 @@ void AssetProcessorManagerTest::SetUp()
|
||||
AssetUtilities::ComputeProjectCacheRoot(cacheRoot);
|
||||
QString normalizedCacheRoot = AssetUtilities::NormalizeDirectoryPath(cacheRoot.absolutePath());
|
||||
|
||||
QString normalizedDirPathCheck = AssetUtilities::NormalizeDirectoryPath(QDir::current().absoluteFilePath("Cache/" + m_gameName));
|
||||
m_normalizedCacheRootDir.setPath(normalizedCacheRoot);
|
||||
|
||||
UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath("subfolder1/assetProcessorManagerTest.txt"));
|
||||
@@ -357,7 +363,7 @@ TEST_F(AssetProcessorManagerTest, UnitTestForGettingJobInfoBySourceUUIDSuccess)
|
||||
TEST_F(AssetProcessorManagerTest, WarningsAndErrorsReported_SuccessfullySavedToDatabase)
|
||||
{
|
||||
// This tests the JobDiagnosticTracker: Warnings/errors reported to it should be recorded in the database when AssetProcessed is fired and able to be retrieved when querying job status
|
||||
|
||||
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
@@ -471,7 +477,7 @@ TEST_F(AssetProcessorManagerTest, UnitTestForOutPutPrefix)
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
m_isIdling = false;
|
||||
// tell the APM about the files:
|
||||
QMetaObject::invokeMethod(m_assetProcessorManager.get(), "AssessModifiedFile", Qt::QueuedConnection, Q_ARG(QString, tempPath.absoluteFilePath("subfolder2/test.txt")));
|
||||
@@ -626,10 +632,10 @@ TEST_F(AssetProcessorManagerTest, BuilderDirtiness_EmptyDatabase_AllDirty)
|
||||
|
||||
MockBuilderResponder mockBuilderResponder;
|
||||
mockBuilderResponder.BusConnect();
|
||||
|
||||
|
||||
mockBuilderResponder.AddBuilder("builder1", { AssetBuilderSDK::AssetBuilderPattern("*.egg", AssetBuilderPattern::Wildcard) }, AZ::Uuid::CreateRandom(), 1, "fingerprint1");
|
||||
mockBuilderResponder.AddBuilder("builder2", { AssetBuilderSDK::AssetBuilderPattern("*.foo", AssetBuilderPattern::Wildcard) }, AZ::Uuid::CreateRandom(), 1, "fingerprint2");
|
||||
|
||||
|
||||
m_assetProcessorManager->ComputeBuilderDirty();
|
||||
|
||||
EXPECT_TRUE(m_assetProcessorManager->m_anyBuilderChange);
|
||||
@@ -666,7 +672,7 @@ TEST_F(AssetProcessorManagerTest, BuilderDirtiness_SameAsLastTime_NoneDirty)
|
||||
mockBuilderResponder.BusDisconnect();
|
||||
}
|
||||
|
||||
// when a new builder appears, the new builder should be dirty,
|
||||
// when a new builder appears, the new builder should be dirty,
|
||||
TEST_F(AssetProcessorManagerTest, BuilderDirtiness_MoreThanLastTime_NewOneIsDirty)
|
||||
{
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
@@ -677,13 +683,13 @@ TEST_F(AssetProcessorManagerTest, BuilderDirtiness_MoreThanLastTime_NewOneIsDirt
|
||||
mockBuilderResponder.BusConnect();
|
||||
|
||||
mockBuilderResponder.AddBuilder("builder1", { AssetBuilderSDK::AssetBuilderPattern("*.egg", AssetBuilderPattern::Wildcard) }, AZ::Uuid::CreateRandom(), 1, "fingerprint1");
|
||||
|
||||
|
||||
m_assetProcessorManager->ComputeBuilderDirty();
|
||||
|
||||
mockBuilderResponder.AddBuilder("builder2", { AssetBuilderSDK::AssetBuilderPattern("*.foo", AssetBuilderPattern::Wildcard) }, AZ::Uuid::CreateRandom(), 1, "fingerprint2");
|
||||
|
||||
m_assetProcessorManager->ComputeBuilderDirty();
|
||||
|
||||
|
||||
// one new builder should have been dirty:
|
||||
EXPECT_TRUE(m_assetProcessorManager->m_anyBuilderChange);
|
||||
EXPECT_TRUE(m_assetProcessorManager->m_buildersAddedOrRemoved);
|
||||
@@ -892,7 +898,7 @@ TEST_F(AssetProcessorManagerTest, BuilderDirtiness_NewAnalysisFingerprint_IsNotA
|
||||
TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_BasicTest)
|
||||
{
|
||||
using SourceFileDependencyEntry = AzToolsFramework::AssetDatabase::SourceFileDependencyEntry;
|
||||
|
||||
|
||||
// A depends on B, which depends on both C and D
|
||||
|
||||
QDir tempPath(m_tempDir.path());
|
||||
@@ -941,7 +947,7 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_BasicTe
|
||||
|
||||
dependencies.clear();
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("b.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, false);
|
||||
EXPECT_EQ(dependencies.size(), 3); // b depends on c, and d
|
||||
EXPECT_EQ(dependencies.size(), 3); // b depends on c, and d
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/b.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/c.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/d.txt").toUtf8().constData()), dependencies.end());
|
||||
@@ -961,7 +967,7 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_WithDif
|
||||
{
|
||||
// test to make sure that different TYPES of dependencies work as expected.
|
||||
using SourceFileDependencyEntry = AzToolsFramework::AssetDatabase::SourceFileDependencyEntry;
|
||||
|
||||
|
||||
QDir tempPath(m_tempDir.path());
|
||||
|
||||
UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath("subfolder1/a.txt"), QString("tempdata\n"));
|
||||
@@ -998,7 +1004,7 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_WithDif
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("a.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, false);
|
||||
// note that a depends on b, c, and d - with the latter two being indirect.
|
||||
// however, since b's dependency on C is via JOB, and we're asking for SOURCE only, we should not see C.
|
||||
EXPECT_EQ(dependencies.size(), 3);
|
||||
EXPECT_EQ(dependencies.size(), 3);
|
||||
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/a.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/b.txt").toUtf8().constData()), dependencies.end());
|
||||
@@ -1007,7 +1013,7 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_WithDif
|
||||
dependencies.clear();
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("b.txt", dependencies, SourceFileDependencyEntry::DEP_JobToJob, false);
|
||||
// b depends on c, and d - but we're asking for job dependencies only, so we should not get anything except C and B
|
||||
EXPECT_EQ(dependencies.size(), 2);
|
||||
EXPECT_EQ(dependencies.size(), 2);
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/b.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/c.txt").toUtf8().constData()), dependencies.end());
|
||||
|
||||
@@ -1063,13 +1069,13 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_Reverse
|
||||
AssetProcessor::SourceFilesForFingerprintingContainer dependencies;
|
||||
// sanity: what Depends on a? the only result should be a itself.
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("a.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, true /*reverse*/);
|
||||
EXPECT_EQ(dependencies.size(), 1);
|
||||
EXPECT_EQ(dependencies.size(), 1);
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/a.txt").toUtf8().constData()), dependencies.end());
|
||||
|
||||
dependencies.clear();
|
||||
// what depends on d? b and a should (indirectly)
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("d.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, true);
|
||||
EXPECT_EQ(dependencies.size(), 3);
|
||||
EXPECT_EQ(dependencies.size(), 3);
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/a.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/b.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/d.txt").toUtf8().constData()), dependencies.end());
|
||||
@@ -1077,7 +1083,7 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_Reverse
|
||||
// what depends on c? b and a should.
|
||||
dependencies.clear();
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("c.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, true);
|
||||
EXPECT_EQ(dependencies.size(), 3); // b depends on c, and d
|
||||
EXPECT_EQ(dependencies.size(), 3); // b depends on c, and d
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/c.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/b.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/a.txt").toUtf8().constData()), dependencies.end());
|
||||
@@ -1092,7 +1098,7 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_Reverse
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/c.txt").toUtf8().constData()), dependencies.end());
|
||||
}
|
||||
|
||||
// since we need these files to still produce a 0-based fingerprint, we need them to
|
||||
// since we need these files to still produce a 0-based fingerprint, we need them to
|
||||
// still do a best guess at absolute path, when they are missing.
|
||||
TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_MissingFiles_ReturnsNoPathWithPlaceholders)
|
||||
{
|
||||
@@ -1131,13 +1137,13 @@ TEST_F(AssetProcessorManagerTest, QueryAbsolutePathDependenciesRecursive_Missing
|
||||
AssetProcessor::SourceFilesForFingerprintingContainer dependencies;
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("a.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, false);
|
||||
EXPECT_EQ(dependencies.size(), 2); // a depends on b, c, and d - with the latter two being indirect.
|
||||
|
||||
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/a.txt").toUtf8().constData()), dependencies.end());
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/d.txt").toUtf8().constData()), dependencies.end());
|
||||
|
||||
dependencies.clear();
|
||||
m_assetProcessorManager->QueryAbsolutePathDependenciesRecursive("b.txt", dependencies, SourceFileDependencyEntry::DEP_SourceToSource, false);
|
||||
EXPECT_EQ(dependencies.size(), 1); // b depends on c, and d
|
||||
EXPECT_EQ(dependencies.size(), 1); // b depends on c, and d
|
||||
EXPECT_NE(dependencies.find(tempPath.absoluteFilePath("subfolder1/d.txt").toUtf8().constData()), dependencies.end());
|
||||
|
||||
// eliminate b --> c
|
||||
@@ -1161,7 +1167,7 @@ TEST_F(AssetProcessorManagerTest, BuilderSDK_API_CreateJobs_HasValidParameters_W
|
||||
|
||||
m_isIdling = false;
|
||||
QMetaObject::invokeMethod(m_assetProcessorManager.get(), "AssessModifiedFile", Qt::QueuedConnection, Q_ARG(QString, absPath));
|
||||
|
||||
|
||||
// wait for AP to become idle.
|
||||
ASSERT_TRUE(BlockUntilIdle(5000));
|
||||
|
||||
@@ -1189,10 +1195,10 @@ TEST_F(AssetProcessorManagerTest, BuilderSDK_API_CreateJobs_HasValidParameters_W
|
||||
UnitTestUtils::CreateDummyFile(absPath);
|
||||
|
||||
m_mockApplicationManager->ResetMockBuilderCreateJobCalls();
|
||||
|
||||
|
||||
m_isIdling = false;
|
||||
QMetaObject::invokeMethod(m_assetProcessorManager.get(), "AssessModifiedFile", Qt::QueuedConnection, Q_ARG(QString, absPath));
|
||||
|
||||
|
||||
ASSERT_TRUE(BlockUntilIdle(5000));
|
||||
|
||||
ASSERT_EQ(m_mockApplicationManager->GetMockBuilderCreateJobCalls(), 1);
|
||||
@@ -1461,14 +1467,14 @@ bool PathDependencyTest::ProcessAsset(TestAsset& asset, const OutputAssetSet& ou
|
||||
{
|
||||
ProcessJobResponse processJobResponse;
|
||||
processJobResponse.m_resultCode = ProcessJobResult_Success;
|
||||
|
||||
|
||||
for (const char* outputExtension : outputSet)
|
||||
{
|
||||
if(jobSet >= capturedDetails.size() || capturedDetails[jobSet].m_destinationPath.isEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
QString outputAssetPath = QDir(capturedDetails[jobSet].m_destinationPath).absoluteFilePath(QString(asset.m_name.c_str()) + outputExtension);
|
||||
|
||||
UnitTestUtils::CreateDummyFile(outputAssetPath, "this is a test output asset");
|
||||
@@ -1508,7 +1514,7 @@ bool SearchDependencies(AzToolsFramework::AssetDatabase::ProductDependencyDataba
|
||||
void VerifyDependencies(AzToolsFramework::AssetDatabase::ProductDependencyDatabaseEntryContainer dependencyContainer, AZStd::initializer_list<AZ::Data::AssetId> assetIds, AZStd::initializer_list<const char*> unresolvedPaths = {})
|
||||
{
|
||||
EXPECT_EQ(dependencyContainer.size(), assetIds.size() + unresolvedPaths.size());
|
||||
|
||||
|
||||
for (const AZ::Data::AssetId& assetId : assetIds)
|
||||
{
|
||||
bool found = false;
|
||||
@@ -1635,19 +1641,19 @@ TEST_F(PathDependencyTest, NoLongerProcessedFile_IsRemoved)
|
||||
{
|
||||
details = message;
|
||||
});
|
||||
|
||||
|
||||
QDir tempPath(m_tempDir.path());
|
||||
QString absPath(tempPath.absoluteFilePath("subfolder1/test1.txt"));
|
||||
|
||||
TestAsset testAsset("test1");
|
||||
|
||||
|
||||
ASSERT_TRUE(ProcessAsset(testAsset, { {".asset1"} }));
|
||||
|
||||
AzToolsFramework::AssetDatabase::ProductDatabaseEntryContainer products;
|
||||
m_sharedConnection->GetProductsBySourceName("test1.txt", products);
|
||||
|
||||
ASSERT_EQ(products.size(), 1);
|
||||
ASSERT_TRUE(QFile::exists(m_normalizedCacheRootDir.absoluteFilePath("pc/samplesproject/test1.asset1").toUtf8().constData()));
|
||||
ASSERT_TRUE(QFile::exists(m_normalizedCacheRootDir.absoluteFilePath("pc/test1.asset1").toUtf8().constData()));
|
||||
|
||||
m_mockApplicationManager->UnRegisterAllBuilders();
|
||||
|
||||
@@ -1723,15 +1729,15 @@ TEST_F(PathDependencyTest, AssetProcessed_Impl_DeferredPathResolution)
|
||||
AZStd::vector<TestAsset> dependencySources = { "dep1", "dep2" };
|
||||
// Start with mixed casing.
|
||||
ProductPathDependencySet dependencies = { {"Dep1.txt", AssetBuilderSDK::ProductPathDependencyType::SourceFile}, {"DEP2.asset2", AssetBuilderSDK::ProductPathDependencyType::ProductFile}, {"dep2.asset3", AssetBuilderSDK::ProductPathDependencyType::ProductFile} }; // Test depending on a source asset, and on a subset of product assets
|
||||
|
||||
|
||||
TestAsset mainFile("test_text");
|
||||
ASSERT_TRUE(ProcessAsset(mainFile, { { ".asset" }, {} }, dependencies));
|
||||
|
||||
|
||||
// ---------- Verify that we have unresolved path in ProductDependencies table ----------
|
||||
AzToolsFramework::AssetDatabase::ProductDependencyDatabaseEntryContainer dependencyContainer;
|
||||
ASSERT_TRUE(m_sharedConnection->GetProductDependencies(dependencyContainer));
|
||||
ASSERT_EQ(dependencyContainer.size(), dependencies.size());
|
||||
|
||||
|
||||
// All dependencies are stored lowercase in the database. Make the expected dependencies lowercase here to match that.
|
||||
for(auto& dependency : dependencies)
|
||||
{
|
||||
@@ -1752,12 +1758,12 @@ TEST_F(PathDependencyTest, AssetProcessed_Impl_DeferredPathResolution)
|
||||
{
|
||||
ASSERT_TRUE(ProcessAsset(dependency, { { ".asset1", ".asset2" }, { ".asset3" } }, {}));
|
||||
}
|
||||
|
||||
|
||||
// ---------- Verify that path has been found and resolved ----------
|
||||
dependencyContainer.clear();
|
||||
ASSERT_TRUE(m_sharedConnection->GetProductDependencies(dependencyContainer));
|
||||
|
||||
VerifyDependencies(dependencyContainer,
|
||||
VerifyDependencies(dependencyContainer,
|
||||
{
|
||||
dependencySources[0].m_products[0],
|
||||
dependencySources[0].m_products[1],
|
||||
@@ -1780,19 +1786,19 @@ TEST_F(PathDependencyTest, AssetProcessed_Impl_DeferredPathResolutionAlreadyReso
|
||||
// create dependees
|
||||
TestAsset dep1("dep1");
|
||||
TestAsset dep2("deP2"); // random casing to make sure the search is case-insensitive
|
||||
|
||||
|
||||
ASSERT_TRUE(ProcessAsset(dep1, { {".asset1"}, {".asset2"} }));
|
||||
ASSERT_TRUE(ProcessAsset(dep2, { {".asset1", ".asset2"}, {".asset3"} }));
|
||||
|
||||
|
||||
// -------- Make main test asset, with dependencies on products we just created -----
|
||||
TestAsset primaryFile("test_text");
|
||||
ASSERT_TRUE(ProcessAsset(primaryFile, { { ".asset" }, {} }, { {"dep1.txt", ProductPathDependencyType::SourceFile}, {"DEP2.asset2", ProductPathDependencyType::ProductFile}, {"Dep2.asset3", ProductPathDependencyType::ProductFile} }));
|
||||
|
||||
|
||||
// ---------- Verify that the dependency was recorded, and did not keep the path after resolution ----------
|
||||
AzToolsFramework::AssetDatabase::ProductDependencyDatabaseEntryContainer dependencyContainer;
|
||||
ASSERT_TRUE(m_sharedConnection->GetProductDependencies(dependencyContainer));
|
||||
|
||||
VerifyDependencies(dependencyContainer,
|
||||
VerifyDependencies(dependencyContainer,
|
||||
{
|
||||
dep1.m_products[0],
|
||||
dep1.m_products[1],
|
||||
@@ -1887,13 +1893,13 @@ TEST_F(PathDependencyTest, WildcardDependencies_Existing_ResolveCorrectly)
|
||||
|
||||
bool result = ProcessAsset(dep1, { {".asset1"}, {".asset2"} });
|
||||
ASSERT_TRUE(result) << "Failed to Process Assets";
|
||||
|
||||
|
||||
result = ProcessAsset(dep2, { {".asset1", ".asset2"}, {".asset3"} });
|
||||
ASSERT_TRUE(result) << "Failed to Process Assets";
|
||||
|
||||
|
||||
result = ProcessAsset(dep3, { {".asset1", ".asset2"}, {".asset3"} });
|
||||
ASSERT_TRUE(result) << "Failed to Process Assets";
|
||||
|
||||
|
||||
result = ProcessAsset(dep4, { {".asset1"}, {".asset3"} }); // This product will match on both dependencies, this will check to make sure we don't get duplicates
|
||||
ASSERT_TRUE(result) << "Failed to Process Assets";
|
||||
|
||||
@@ -1906,7 +1912,7 @@ TEST_F(PathDependencyTest, WildcardDependencies_Existing_ResolveCorrectly)
|
||||
AzToolsFramework::AssetDatabase::ProductDependencyDatabaseEntryContainer dependencyContainer;
|
||||
result = m_sharedConnection->GetProductDependencies(dependencyContainer);
|
||||
ASSERT_TRUE(result)<< "Failed to Get Product Dependencies";
|
||||
|
||||
|
||||
VerifyDependencies(dependencyContainer,
|
||||
{
|
||||
dep1.m_products[0],
|
||||
@@ -2054,14 +2060,14 @@ TEST_F(PathDependencyTest, WildcardDependencies_Deferred_ResolveCorrectly)
|
||||
AzToolsFramework::AssetDatabase::ProductDependencyDatabaseEntryContainer dependencyContainer;
|
||||
ASSERT_TRUE(m_sharedConnection->GetProductDependencies(dependencyContainer));
|
||||
|
||||
VerifyDependencies(dependencyContainer,
|
||||
VerifyDependencies(dependencyContainer,
|
||||
{
|
||||
dep1.m_products[0],
|
||||
dep1.m_products[1],
|
||||
dep2.m_products[2],
|
||||
dep3.m_products[2],
|
||||
dep4.m_products[0]
|
||||
},
|
||||
},
|
||||
{ "*p1.txt", "*.asset3" }
|
||||
);
|
||||
}
|
||||
@@ -2204,14 +2210,14 @@ void PathDependencyTest::RunWildcardTest(bool useCorrectDatabaseSeparator, Asset
|
||||
ASSERT_TRUE(ProcessAsset(matchingDepDeeperFolderMixedSlashes, { {".asset"}, {} })) << "Failed to Process " << matchingDepDeeperFolderMixedSlashes.m_name.c_str();
|
||||
ASSERT_TRUE(ProcessAsset(notMatchingDepInSubfolder, { {".asset"}, {} })) << "Failed to Process " << notMatchingDepInSubfolder.m_name.c_str();
|
||||
}
|
||||
|
||||
|
||||
// -------- Make main test asset, with dependencies on products we just created -----
|
||||
TestAsset primaryFile("test_text");
|
||||
const char* databaseSeparator = useCorrectDatabaseSeparator ? AZ_CORRECT_DATABASE_SEPARATOR_STRING : AZ_WRONG_DATABASE_SEPARATOR_STRING;
|
||||
|
||||
|
||||
AZStd::string extension = (pathDependencyType == ProductPathDependencyType::SourceFile) ? "txt" : "asset";
|
||||
AZStd::string wildcardString = AZStd::string::format("*testFolder%s*.%s", databaseSeparator, extension.c_str());
|
||||
|
||||
|
||||
ASSERT_TRUE(ProcessAsset(primaryFile, { { ".asset" }, {} }, { {wildcardString.c_str(), pathDependencyType}, })) << "Failed to Process " << primaryFile.m_name.c_str();
|
||||
|
||||
if (!buildDependenciesFirst)
|
||||
@@ -2354,7 +2360,7 @@ TEST_F(PathDependencyTest, AbsoluteDependencies_Deferred_ResolveCorrectly)
|
||||
// -------- Make main test asset, with dependencies on products that don't exist yet -----
|
||||
TestAsset primaryFile("test_text");
|
||||
ASSERT_TRUE(ProcessAsset(primaryFile, { { ".asset" }, {} },
|
||||
{
|
||||
{
|
||||
{absPathDep1.toUtf8().constData(), ProductPathDependencyType::SourceFile},
|
||||
{absPathDep2.toUtf8().constData(), ProductPathDependencyType::SourceFile},
|
||||
{absPathDep3.toUtf8().constData(), ProductPathDependencyType::SourceFile},
|
||||
@@ -2418,7 +2424,7 @@ TEST_F(PathDependencyTest, ChangeDependencies_Existing_ResolveCorrectly)
|
||||
|
||||
// Update again with different dependencies
|
||||
ASSERT_TRUE(ProcessAsset(primaryFile, { {".asset"} , {} }, { {absPath.toUtf8().constData(), ProductPathDependencyType::SourceFile} }));
|
||||
|
||||
|
||||
// ---------- Verify that the dependency was recorded, and did not keep the path after resolution ----------
|
||||
dependencyContainer.clear();
|
||||
ASSERT_TRUE(m_sharedConnection->GetProductDependencies(dependencyContainer));
|
||||
@@ -2582,7 +2588,7 @@ TEST_F(PathDependencyTest, SourceFileDependencyWithPrefix_Deferred_ResolvesCorre
|
||||
AzToolsFramework::AssetDatabase::ProductDependencyDatabaseEntryContainer dependencyContainer;
|
||||
ASSERT_TRUE(m_sharedConnection->GetProductDependencies(dependencyContainer));
|
||||
|
||||
VerifyDependencies(dependencyContainer,
|
||||
VerifyDependencies(dependencyContainer,
|
||||
{
|
||||
dep2.m_products[0],
|
||||
dep2.m_products[1],
|
||||
@@ -2834,7 +2840,7 @@ TEST_F(AssetProcessorManagerTest, AssetProcessedImpl_DifferentProductDependencie
|
||||
// and correctly stored the results into the dependency table.
|
||||
|
||||
//-------------------------------- EVALUATION PHASE -------------------------
|
||||
// at this point, the AP will have filed the asset away in its database and we can now validate that it actually
|
||||
// at this point, the AP will have filed the asset away in its database and we can now validate that it actually
|
||||
// did it correctly.
|
||||
// We expect to see two dependencies in the dependency table, each with the correct dependency, no duplicates, no lost data.
|
||||
AssetDatabaseConnection* sharedConnection = m_assetProcessorManager->m_stateData.get();
|
||||
@@ -2856,7 +2862,7 @@ TEST_F(AssetProcessorManagerTest, AssetProcessedImpl_DifferentProductDependencie
|
||||
// this also asserts uniqueness.
|
||||
ASSERT_EQ(countFound, 2);
|
||||
ASSERT_EQ(capturedTableEntries.size(), countFound); // if they were not unique asset IDs, they would have collapsed on top of each other.
|
||||
|
||||
|
||||
// make sure both assetIds are present:
|
||||
ASSERT_NE(capturedTableEntries.find(expectedIdOfProductA), capturedTableEntries.end());
|
||||
ASSERT_NE(capturedTableEntries.find(expectedIdOfProductB), capturedTableEntries.end());
|
||||
@@ -2927,7 +2933,7 @@ TEST_F(AssetProcessorManagerTest, AssessDeletedFile_OnJobInFlight_IsIgnored)
|
||||
m_isIdling = false;
|
||||
m_assetProcessorManager->AssetProcessed(capturedDetails.m_jobEntry, response);
|
||||
ASSERT_TRUE(BlockUntilIdle(5000));
|
||||
|
||||
|
||||
// at this point, everything should be up to date and ready for the test - there should be one source in the database
|
||||
// with numOutputsToSimulate products.
|
||||
// now, we simulate a job running to process the asset again, by modifying the timestamp on the file to be at least one second later.
|
||||
@@ -2959,7 +2965,7 @@ TEST_F(AssetProcessorManagerTest, AssessDeletedFile_OnJobInFlight_IsIgnored)
|
||||
ASSERT_FALSE(capturedDetails.m_destinationPath.isEmpty());
|
||||
// ----------------------------- TEST BEGINS HERE -----------------------------
|
||||
// simulte a very slow computer processing the file one output at a time and feeding file change notifies:
|
||||
|
||||
|
||||
// FROM THIS POINT ON we should see no new job create / cancellation or anything since we're just going to be messing with the cache.
|
||||
bool gotUnexpectedAssetToProcess = false;
|
||||
connection = QObject::connect(m_assetProcessorManager.get(), &AssetProcessorManager::AssetToProcess, [&gotUnexpectedAssetToProcess](JobDetails /*jobDetails*/)
|
||||
@@ -2994,7 +3000,7 @@ TEST_F(AssetProcessorManagerTest, AssessDeletedFile_OnJobInFlight_IsIgnored)
|
||||
|
||||
QString fileNameToGenerate = QString("test%1.txt").arg(outputIdx);
|
||||
QString filePathToGenerate = QDir(capturedDetails.m_destinationPath).absoluteFilePath(fileNameToGenerate);
|
||||
|
||||
|
||||
JobProduct product(filePathToGenerate.toUtf8().constData(), AZ::Uuid::CreateRandom(), static_cast<AZ::u32>(outputIdx));
|
||||
response.m_outputProducts.push_back(product);
|
||||
|
||||
@@ -3005,7 +3011,7 @@ TEST_F(AssetProcessorManagerTest, AssessDeletedFile_OnJobInFlight_IsIgnored)
|
||||
// simulate the file watcher showing the deletion occuring:
|
||||
notifyAPM("AssessDeletedFile", filePathToGenerate, shouldBlockAndWaitThisTime);
|
||||
UnitTestUtils::CreateDummyFile(filePathToGenerate, "an output");
|
||||
|
||||
|
||||
// let the APM go for a significant amount of time so that it simulates a slow thread copying a large file with lots of events about it pouring in.
|
||||
for (int repeatLoop = 0; repeatLoop < 100; ++repeatLoop)
|
||||
{
|
||||
@@ -3020,7 +3026,7 @@ TEST_F(AssetProcessorManagerTest, AssessDeletedFile_OnJobInFlight_IsIgnored)
|
||||
QMetaObject::invokeMethod(m_assetProcessorManager.get(), "AssessModifiedFile", Qt::QueuedConnection, Q_ARG(QString, QString(filePathToGenerate)));
|
||||
QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents, 1);
|
||||
ASSERT_FALSE(gotUnexpectedAssetToProcess);
|
||||
|
||||
|
||||
// now tell it to stop ignoring the cache delete and let it do the next one.
|
||||
EBUS_EVENT(AssetProcessor::ProcessingJobInfoBus, EndCacheFileUpdate, filePathToGenerate.toUtf8().data(), false);
|
||||
|
||||
@@ -3075,7 +3081,7 @@ TEST_F(AssetProcessorManagerTest, UpdateSourceFileDependenciesDatabase_BasicTest
|
||||
// each file we will take a different approach to publishing: rel path, and UUID:
|
||||
job.m_sourceFileDependencies.push_back(AZStd::make_pair<AZ::Uuid, AssetBuilderSDK::SourceFileDependency>(dummyBuilderUUID, { "a.txt", AZ::Uuid::CreateNull() }));
|
||||
job.m_sourceFileDependencies.push_back(AZStd::make_pair<AZ::Uuid, AssetBuilderSDK::SourceFileDependency>(dummyBuilderUUID, { "", uuidOfB }));
|
||||
|
||||
|
||||
// it is currently assumed that the only fields that we care about in JobDetails is the builder busId and the job dependencies themselves:
|
||||
JobDetails newDetails;
|
||||
newDetails.m_assetBuilderDesc.m_busId = dummyBuilderUUID;
|
||||
@@ -3267,7 +3273,7 @@ TEST_F(AssetProcessorManagerTest, UpdateSourceFileDependenciesDatabase_MissingFi
|
||||
// this indirectly verifies the QueryAbsolutePathDependenciesRecursive function also but it has its own dedicated tests, above.
|
||||
AssetProcessor::SourceFilesForFingerprintingContainer deps;
|
||||
m_assetProcessorManager.get()->QueryAbsolutePathDependenciesRecursive(QString::fromUtf8("assetProcessorManagerTest.txt"), deps, AzToolsFramework::AssetDatabase::SourceFileDependencyEntry::DEP_SourceToSource, false);
|
||||
|
||||
|
||||
// we should find all of the deps, but not the placeholders.
|
||||
|
||||
EXPECT_EQ(deps.size(), 2);
|
||||
@@ -3453,7 +3459,7 @@ TEST_F(AssetProcessorManagerTest, UpdateSourceFileDependenciesDatabase_MissingFi
|
||||
EXPECT_EQ(deps.size(), 2);
|
||||
EXPECT_NE(deps.find(absPath.toUtf8().constData()), deps.end());
|
||||
EXPECT_NE(deps.find(dependsOnFile1_Job.toUtf8().constData()), deps.end()); // c
|
||||
|
||||
|
||||
// in addition, we expect to have the original file that depends on B appear in the analysis queue, since something it depends on appeared:
|
||||
QString normalizedSourcePath = AssetUtilities::NormalizeFilePath(absPath);
|
||||
EXPECT_TRUE(m_assetProcessorManager->m_alreadyActiveFiles.contains(normalizedSourcePath));
|
||||
@@ -4407,7 +4413,7 @@ TEST_F(AssetProcessorManagerTest, SourceFileProcessFailure_ClearsFingerprint)
|
||||
|
||||
ASSERT_TRUE(found);
|
||||
ASSERT_NE(source.m_analysisFingerprint, "");
|
||||
|
||||
|
||||
// Modify the file and run it through AP again, but this time signal a failure
|
||||
|
||||
{
|
||||
@@ -4655,12 +4661,12 @@ TEST_F(ModtimeScanningTest, ModtimeSkipping_EnablePlatform_ShouldProcessFilesFor
|
||||
// Enable the features we're testing
|
||||
m_assetProcessorManager->m_allowModtimeSkippingFeature = true;
|
||||
AssetUtilities::SetUseFileHashOverride(true, true);
|
||||
|
||||
|
||||
// Enable es3 platform after the initial SetUp has already processed the files for pc
|
||||
QDir tempPath(m_tempDir.path());
|
||||
AssetBuilderSDK::PlatformInfo es3Platform("es3", { "host", "renderer" });
|
||||
m_config->EnablePlatform(es3Platform, true);
|
||||
|
||||
|
||||
// There's no way to remove scanfolders and adding a new one after enabling the platform will cause the pc assets to build as well, which we don't want
|
||||
// Instead we'll just const cast the vector and modify the enabled platforms for the scanfolder
|
||||
auto& platforms = const_cast<AZStd::vector<AssetBuilderSDK::PlatformInfo>&>(m_config->GetScanFolderAt(0).GetPlatforms());
|
||||
@@ -4743,7 +4749,7 @@ TEST_F(ModtimeScanningTest, ModtimeSkipping_ModifyFile)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
|
||||
SetFileContents(m_data->m_absolutePath[1].toUtf8().constData(), "hello world");
|
||||
|
||||
|
||||
// Enable the features we're testing
|
||||
m_assetProcessorManager->m_allowModtimeSkippingFeature = true;
|
||||
AssetUtilities::SetUseFileHashOverride(true, true);
|
||||
@@ -4861,7 +4867,7 @@ TEST_F(ModtimeScanningTest, ModtimeSkipping_DeleteFile)
|
||||
{
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 10);
|
||||
} while (m_data->m_deletedSources.size() < m_data->m_relativePathFromWatchFolder[0].size() && timer.elapsed() < 5000);
|
||||
|
||||
|
||||
ASSERT_EQ(m_data->m_mockBuilderInfoHandler.m_createJobsCount, 0);
|
||||
ASSERT_EQ(m_data->m_processResults.size(), 0);
|
||||
ASSERT_THAT(m_data->m_deletedSources, testing::ElementsAre(m_data->m_relativePathFromWatchFolder[0]));
|
||||
@@ -4885,7 +4891,7 @@ TEST_F(ModtimeScanningTest, ReprocessRequest_SourceWithDependency_BothWillProces
|
||||
|
||||
using SourceFileDependencyEntry = AzToolsFramework::AssetDatabase::SourceFileDependencyEntry;
|
||||
|
||||
SourceFileDependencyEntry newEntry1;
|
||||
SourceFileDependencyEntry newEntry1;
|
||||
newEntry1.m_sourceDependencyID = AzToolsFramework::AssetDatabase::InvalidEntryId;
|
||||
newEntry1.m_builderGuid = AZ::Uuid::CreateRandom();
|
||||
newEntry1.m_source = m_data->m_absolutePath[0].toUtf8().constData();
|
||||
@@ -4953,7 +4959,7 @@ void MockBuilderInfoHandler::CreateJobs(const AssetBuilderSDK::CreateJobsRequest
|
||||
|
||||
if (!m_jobDependencyFilePath.isEmpty())
|
||||
{
|
||||
jobDescriptor.m_jobDependencyList.push_back(AssetBuilderSDK::JobDependency("Mock Job", "pc", AssetBuilderSDK::JobDependencyType::Order,
|
||||
jobDescriptor.m_jobDependencyList.push_back(AssetBuilderSDK::JobDependency("Mock Job", "pc", AssetBuilderSDK::JobDependencyType::Order,
|
||||
AssetBuilderSDK::SourceFileDependency(m_jobDependencyFilePath.toUtf8().constData(), AZ::Uuid::CreateNull())));
|
||||
}
|
||||
|
||||
@@ -5127,7 +5133,7 @@ TEST_F(AssetProcessorManagerTest, UpdateSourceFileDependenciesDatabase_WildcardM
|
||||
m_assetProcessorManager.get()->m_stateData->QueryDependsOnSourceBySourceDependency("wildcardTest.txt", nullptr, AzToolsFramework::AssetDatabase::SourceFileDependencyEntry::DEP_SourceLikeMatch, callbackFunction);
|
||||
EXPECT_EQ(wildcardDeps.size(), 2);
|
||||
|
||||
// The database should have the wildcard record and the individual dependency on b and c at this point, now we add new files
|
||||
// The database should have the wildcard record and the individual dependency on b and c at this point, now we add new files
|
||||
ASSERT_TRUE(UnitTestUtils::CreateDummyFile(dependsOnFileb1_Source, QString("tempdata\n")));
|
||||
ASSERT_TRUE(UnitTestUtils::CreateDummyFile(dependsOnFilec1_Job, QString("tempdata\n")));
|
||||
|
||||
@@ -5307,7 +5313,7 @@ TEST_F(DuplicateProductsTest, SameSource_MultipleBuilder_DuplicateProductJobs_Em
|
||||
QDir tempPath(m_tempDir.path());
|
||||
QString sourceFile;
|
||||
AZStd::vector<JobDetails> jobDetails;
|
||||
|
||||
|
||||
ProcessJobResponse response;
|
||||
SetupDuplicateProductsTest(sourceFile, tempPath, productFile, jobDetails, response, false, "txt");
|
||||
|
||||
@@ -5397,7 +5403,7 @@ void JobDependencyTest::SetUp()
|
||||
m_data->m_mockBuilderInfoHandler.BusConnect();
|
||||
|
||||
QDir tempPath(m_tempDir.path());
|
||||
|
||||
|
||||
QString watchFolderPath = tempPath.absoluteFilePath("subfolder1");
|
||||
const ScanFolderInfo* scanFolder = m_config->GetScanFolderByPath(watchFolderPath);
|
||||
|
||||
@@ -5460,7 +5466,7 @@ TEST_F(JobDependencyTest, JobDependency_ThatWasJustRun_IsFound)
|
||||
TEST_F(JobDependencyTest, JobDependency_ThatHasNotRun_IsNotFound)
|
||||
{
|
||||
AZStd::vector<JobDetails> capturedDetails;
|
||||
|
||||
|
||||
capturedDetails.clear();
|
||||
m_data->m_mockBuilderInfoHandler.m_jobDependencyFilePath = "c.txt";
|
||||
CaptureJobs(capturedDetails, "subfolder1/b.txt");
|
||||
@@ -5654,7 +5660,7 @@ TEST_F(ChainJobDependencyTest, TestChainDependency_Multi)
|
||||
{
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 10);
|
||||
} while (finishedJobs.size() < capturedDetails.size() && timer.elapsed() < 5000);
|
||||
|
||||
|
||||
ASSERT_EQ(finishedJobs.size(), capturedDetails.size());
|
||||
|
||||
// Test that the jobs completed in the correct order (captureDetails has the correct ordering)
|
||||
@@ -5775,7 +5781,7 @@ TEST_F(DeleteTest, DeleteFolderSharedAcrossTwoScanFolders_CorrectFileAndFolderAr
|
||||
QDir tempPath(m_tempDir.path());
|
||||
QString absPath(tempPath.absoluteFilePath("subfolder1/textures"));
|
||||
QDir(absPath).removeRecursively();
|
||||
|
||||
|
||||
AZStd::vector<AZStd::string> deletedFolders;
|
||||
QObject::connect(m_assetProcessorManager.get(), &AssetProcessorManager::SourceFolderDeleted, [&deletedFolders](QString file)
|
||||
{
|
||||
|
||||
+95
-67
@@ -15,7 +15,7 @@
|
||||
|
||||
#include <AzTest/AzTest.h>
|
||||
|
||||
const char TestAppRoot[] = ":/testdata";
|
||||
const char TestAppRoot[] = "@exefolder@/testdata";
|
||||
const char EmptyDummyProjectName[] = "EmptyDummyProject";
|
||||
const char DummyProjectName[] = "DummyProject";
|
||||
|
||||
@@ -54,10 +54,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_BadPlatform)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_broken_badplatform";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_broken_badplatform");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_GT(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
}
|
||||
|
||||
@@ -67,10 +69,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_NoPlatform)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_broken_noplatform";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_broken_noplatform");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_GT(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
}
|
||||
|
||||
@@ -79,10 +83,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_NoScanFolders)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_broken_noscans";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_broken_noscans");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_GT(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
}
|
||||
|
||||
@@ -91,10 +97,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_BrokenRecognizers)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_broken_recognizers";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_broken_recognizers");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_FALSE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_GT(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
}
|
||||
|
||||
@@ -103,10 +111,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_Regular_Platforms)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_regular";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
// verify the data.
|
||||
@@ -127,42 +137,43 @@ TEST_F(PlatformConfigurationUnitTests, TestReadScanFolderRoot_FromSettingsRegist
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
ASSERT_NE(nullptr, settingsRegistry);
|
||||
|
||||
AZ::SettingsRegistryInterface::Specializations apSpecializations;
|
||||
AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_EngineRegistry(*settingsRegistry, AZ_TRAIT_OS_PLATFORM_CODENAME, apSpecializations);
|
||||
|
||||
struct ScanFolderVisitor
|
||||
: AZ::SettingsRegistryInterface::Visitor
|
||||
QTemporaryDir tempEngineRoot;
|
||||
QDir tempPath(tempEngineRoot.path());
|
||||
QString testScanFolderSetregPath = tempPath.absoluteFilePath("test.setreg");
|
||||
UnitTestUtils::CreateDummyFile(testScanFolderSetregPath, QString(R"({ "Amazon":
|
||||
{
|
||||
void Visit([[maybe_unused]] AZStd::string_view path, AZStd::string_view valueName, AZ::SettingsRegistryInterface::Type, AZ::s64 value)
|
||||
"AssetProcessor":
|
||||
{
|
||||
if (valueName == "recursive")
|
||||
{
|
||||
m_isRecursive = value != 0;
|
||||
}
|
||||
else if (valueName == "order")
|
||||
{
|
||||
m_scanOrder = value;
|
||||
"Settings":
|
||||
{
|
||||
"ScanFolder SettingsRegistryTest":
|
||||
{
|
||||
"watch": "_TestPath",
|
||||
"recursive": false,
|
||||
"order": 20000
|
||||
}
|
||||
}
|
||||
}
|
||||
void Visit([[maybe_unused]] AZStd::string_view path, AZStd::string_view valueName, AZ::SettingsRegistryInterface::Type, AZStd::string_view value)
|
||||
{
|
||||
if (valueName == "watch")
|
||||
{
|
||||
m_watchPath = value;
|
||||
}
|
||||
}
|
||||
AZ::SettingsRegistryInterface::FixedValueString m_watchPath;
|
||||
bool m_isRecursive{};
|
||||
int m_scanOrder{};
|
||||
};
|
||||
}
|
||||
}\n)"));
|
||||
|
||||
ScanFolderVisitor scanFolderVisitor;
|
||||
EXPECT_TRUE(settingsRegistry->Visit(scanFolderVisitor, "/Amazon/AssetProcessor/Settings/ScanFolder Root"));
|
||||
EXPECT_TRUE(AssetProcessor::PlatformConfiguration::MergeConfigFileToSettingsRegistry(*settingsRegistry, testScanFolderSetregPath.toUtf8().data()));
|
||||
|
||||
AZStd::string watchPath;
|
||||
bool recurseScanFolder{ true };
|
||||
AZ::s64 scanOrder{};
|
||||
|
||||
EXPECT_TRUE(settingsRegistry->Get(watchPath, AZ::SettingsRegistryInterface::FixedValueString(AssetProcessor::AssetProcessorSettingsKey)
|
||||
+ "/ScanFolder SettingsRegistryTest/watch"));
|
||||
EXPECT_TRUE(settingsRegistry->Get(recurseScanFolder, AZ::SettingsRegistryInterface::FixedValueString(AssetProcessor::AssetProcessorSettingsKey)
|
||||
+ "/ScanFolder SettingsRegistryTest/recursive"));
|
||||
EXPECT_TRUE(settingsRegistry->Get(scanOrder, AZ::SettingsRegistryInterface::FixedValueString(AssetProcessor::AssetProcessorSettingsKey)
|
||||
+ "/ScanFolder SettingsRegistryTest/order"));
|
||||
|
||||
// These test values come from the <dev_root>/Engine/Registry/AssetProcessorPlatformConfig.setreg file
|
||||
EXPECT_STREQ("@ROOT@", scanFolderVisitor.m_watchPath.c_str());
|
||||
EXPECT_FALSE(scanFolderVisitor.m_isRecursive);
|
||||
EXPECT_EQ(10000, scanFolderVisitor.m_scanOrder);
|
||||
EXPECT_STREQ("_TestPath", watchPath.c_str());
|
||||
EXPECT_FALSE(recurseScanFolder);
|
||||
EXPECT_EQ(20000, scanOrder);
|
||||
}
|
||||
|
||||
|
||||
@@ -340,34 +351,36 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_RegularScanfolder)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_regular";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
AssetUtilities::ComputeProjectName(EmptyDummyProjectName, true);
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
ASSERT_EQ(config.GetScanFolderCount(), 3); // the two, and then the one that has the same data as prior but different identifier.
|
||||
QString scanName = AssetUtilities::ComputeGameName() + " Scan Folder";
|
||||
QString scanName = AssetUtilities::ComputeProjectPath() + " Scan Folder";
|
||||
ASSERT_EQ(config.GetScanFolderAt(0).GetDisplayName(), scanName);
|
||||
ASSERT_EQ(config.GetScanFolderAt(0).GetOutputPrefix(), QString());
|
||||
ASSERT_EQ(config.GetScanFolderAt(0).RecurseSubFolders(), true);
|
||||
ASSERT_EQ(config.GetScanFolderAt(0).GetOrder(), 0);
|
||||
// its important that this does NOT change and this makes sure the old way of doing it (case-sensitive name) persists
|
||||
ASSERT_EQ(config.GetScanFolderAt(0).GetPortableKey(), QString("from-ini-file-Game"));
|
||||
ASSERT_EQ(config.GetScanFolderAt(0).GetPortableKey(), QString("Game"));
|
||||
|
||||
ASSERT_EQ(config.GetScanFolderAt(1).GetDisplayName(), QString("FeatureTests"));
|
||||
ASSERT_EQ(config.GetScanFolderAt(1).GetOutputPrefix(), QString("featuretestsoutputfolder")); // to prove its not related to display name
|
||||
ASSERT_EQ(config.GetScanFolderAt(1).RecurseSubFolders(), false);
|
||||
ASSERT_EQ(config.GetScanFolderAt(1).GetOrder(), 5000);
|
||||
// this proves that the featuretests name is used instead of the output prefix
|
||||
ASSERT_EQ(config.GetScanFolderAt(1).GetPortableKey(), QString("from-ini-file-FeatureTests"));
|
||||
ASSERT_EQ(config.GetScanFolderAt(1).GetPortableKey(), QString("FeatureTests"));
|
||||
|
||||
ASSERT_EQ(config.GetScanFolderAt(2).GetDisplayName(), QString("FeatureTests2"));
|
||||
ASSERT_EQ(config.GetScanFolderAt(2).GetOutputPrefix(), QString("featuretestsoutputfolder")); // to prove its not related to display name
|
||||
ASSERT_EQ(config.GetScanFolderAt(2).RecurseSubFolders(), false);
|
||||
ASSERT_EQ(config.GetScanFolderAt(2).GetOrder(), 6000);
|
||||
// this proves that the featuretests name is used instead of the output prefix
|
||||
ASSERT_EQ(config.GetScanFolderAt(2).GetPortableKey(), QString("from-ini-file-FeatureTests2"));
|
||||
ASSERT_EQ(config.GetScanFolderAt(2).GetPortableKey(), QString("FeatureTests2"));
|
||||
}
|
||||
|
||||
TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_RegularScanfolderPlatformSpecific)
|
||||
@@ -375,10 +388,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_RegularScanfolderP
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_regular_platform_scanfolder";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular_platform_scanfolder");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
ASSERT_EQ(config.GetScanFolderCount(), 5);
|
||||
@@ -419,10 +434,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_RegularExcludes)
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_regular";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
ASSERT_TRUE(config.IsFileExcluded("blahblah/$tmp_01.test"));
|
||||
@@ -446,10 +463,12 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_Recognizers)
|
||||
const char* platformWhichIsNotCurrentPlatform = "pc";
|
||||
#endif
|
||||
|
||||
const char* configRoot = ":/testdata/config_regular";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
const AssetProcessor::RecognizerContainer& recogs = config.GetAssetRecognizerContainer();
|
||||
@@ -519,11 +538,13 @@ TEST_F(PlatformConfigurationUnitTests, TestFailReadConfigFile_Overrides)
|
||||
{
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
const char* configRoot = ":/testdata/config_regular";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, DummyProjectName, false, false));
|
||||
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), DummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
const AssetProcessor::RecognizerContainer& recogs = config.GetAssetRecognizerContainer();
|
||||
@@ -565,7 +586,7 @@ TEST_F(PlatformConfigurationUnitTests, Test_GemHandling)
|
||||
QTemporaryDir tempEngineRoot;
|
||||
QDir tempPath(tempEngineRoot.path());
|
||||
AssetUtilities::ResetAssetRoot();
|
||||
AssetUtilities::ComputeGameName("SamplesProject", true);
|
||||
AssetUtilities::ComputeProjectName("SamplesProject", true);
|
||||
|
||||
QDir computedEngineRoot;
|
||||
ASSERT_TRUE(AssetUtilities::ComputeAssetRoot(computedEngineRoot, &tempPath));
|
||||
@@ -576,9 +597,11 @@ TEST_F(PlatformConfigurationUnitTests, Test_GemHandling)
|
||||
ASSERT_TRUE(UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath("Gems/LyShine/AssetProcessorGemConfig.ini"), ";nothing to see here"));
|
||||
|
||||
// note that it is expected that the gems system gives us absolute paths.
|
||||
AZStd::vector<AzToolsFramework::AssetUtils::GemInfo> fakeGems;
|
||||
fakeGems.push_back({ "LyShine", "Gems/LyShine", tempPath.absoluteFilePath("Gems/LyShine").toUtf8().constData(), "0fefab3f13364722b2eab3b96ce2bf20", true, false });// true = pretend this is a game gem.
|
||||
fakeGems.push_back({ "LmbrCentral", "Gems/LmbrCentral/v2", tempPath.absoluteFilePath("Gems/LmbrCentral/v2").toUtf8().constData(), "ff06785f7145416b9d46fde39098cb0c", false, false });
|
||||
AZStd::vector<AzFramework::GemInfo> fakeGems;
|
||||
fakeGems.emplace_back("LyShine");// true = pretend this is a game gem.
|
||||
fakeGems.back().m_absoluteSourcePaths.push_back(tempPath.absoluteFilePath("Gems/LyShine").toUtf8().constData());
|
||||
fakeGems.emplace_back("LmbrCentral");
|
||||
fakeGems.back().m_absoluteSourcePaths.push_back(tempPath.absoluteFilePath("Gems/LmbrCentral/v2").toUtf8().constData());
|
||||
|
||||
// reading gems via the Gems System is already to be tested in the actual Gems API tests.
|
||||
// to avoid trying to load those DLLs we avoid calling the actual ReadGems function
|
||||
@@ -593,8 +616,7 @@ TEST_F(PlatformConfigurationUnitTests, Test_GemHandling)
|
||||
EXPECT_TRUE(config.GetScanFolderAt(0).GetOutputPrefix().isEmpty());
|
||||
EXPECT_TRUE(config.GetScanFolderAt(0).RecurseSubFolders());
|
||||
// the first one is a game gem, so its order should be above 1 but below 100.
|
||||
EXPECT_GE(config.GetScanFolderAt(0).GetOrder(), 1);
|
||||
EXPECT_LE(config.GetScanFolderAt(0).GetOrder(), 100);
|
||||
EXPECT_GE(config.GetScanFolderAt(0).GetOrder(), 100);
|
||||
EXPECT_EQ(0, config.GetScanFolderAt(0).ScanPath().compare(expectedScanFolder, Qt::CaseInsensitive));
|
||||
|
||||
// for each gem, there are currently 1 scan folder, the gem assets folder, with no output prefix
|
||||
@@ -618,15 +640,17 @@ TEST_F(PlatformConfigurationUnitTests, Test_MetaFileTypes)
|
||||
ASSERT_TRUE(QString::compare(config.GetMetaDataFileTypeAt(1).second, "zzzz", Qt::CaseInsensitive) == 0);
|
||||
}
|
||||
|
||||
TEST_F(PlatformConfigurationUnitTests, ReadCheckSever_FromConfig_Valid)
|
||||
TEST_F(PlatformConfigurationUnitTests, ReadCheckServer_FromConfig_Valid)
|
||||
{
|
||||
using namespace AzToolsFramework::AssetSystem;
|
||||
using namespace AssetProcessor;
|
||||
|
||||
const char* configRoot = ":/testdata/config_regular";
|
||||
const auto testExeFolder = AZ::IO::FileIOBase::GetInstance()->ResolvePath(TestAppRoot);
|
||||
auto configRoot = AZ::IO::FileIOBase::GetInstance()->ResolvePath("@exefolder@/testdata/config_regular");
|
||||
ASSERT_TRUE(configRoot);
|
||||
UnitTestPlatformConfiguration config;
|
||||
m_absorber.Clear();
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot, TestAppRoot, EmptyDummyProjectName, false, false));
|
||||
ASSERT_TRUE(config.InitializeFromConfigFiles(configRoot->c_str(), testExeFolder->c_str(), EmptyDummyProjectName, false, false));
|
||||
ASSERT_EQ(m_absorber.m_numErrorsAbsorbed, 0);
|
||||
|
||||
const AssetProcessor::RecognizerContainer& recogs = config.GetAssetRecognizerContainer();
|
||||
@@ -642,7 +666,11 @@ TEST_F(PlatformConfigurationUnitTests, PlatformConfigFile_IsPresent_Found)
|
||||
QTemporaryDir tempEngineRoot;
|
||||
QDir tempPath(tempEngineRoot.path());
|
||||
AssetUtilities::ResetAssetRoot();
|
||||
AssetUtilities::ComputeGameName("SamplesProject", true);
|
||||
AssetUtilities::ComputeProjectName("SamplesProject", true);
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
ASSERT_NE(nullptr, settingsRegistry);
|
||||
settingsRegistry->Set(AZ::SettingsRegistryMergeUtils::FilePathKey_EngineRootFolder, tempPath.absolutePath().toUtf8().constData());
|
||||
|
||||
QDir computedEngineRoot;
|
||||
ASSERT_TRUE(AssetUtilities::ComputeAssetRoot(computedEngineRoot, &tempPath));
|
||||
@@ -655,7 +683,7 @@ TEST_F(PlatformConfigurationUnitTests, PlatformConfigFile_IsPresent_Found)
|
||||
platformConfigPath.append("TestPlatform/");
|
||||
platformConfigPath.append(AssetProcessor::AssetProcessorPlatformConfigFileName);
|
||||
|
||||
QStringList platformConfigList;
|
||||
AZStd::vector<AZ::IO::Path> platformConfigList;
|
||||
ASSERT_FALSE(config.AddPlatformConfigFilePaths(platformConfigList));
|
||||
ASSERT_TRUE(UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath(platformConfigPath), ";nothing to see here"));
|
||||
ASSERT_TRUE(config.AddPlatformConfigFilePaths(platformConfigList));
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
#include <QHash>
|
||||
|
||||
#include "native/tests/AssetProcessorTest.h"
|
||||
#include <native/utilities/PlatformConfiguration.h>
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzCore/std/parallel/thread.h>
|
||||
#include <AzTest/AzTest.h>
|
||||
|
||||
@@ -519,11 +521,18 @@ TEST_F(AssetUtilitiesTest, GetServerAddress_ReadFromConfig_Valid)
|
||||
QTemporaryDir tempDir;
|
||||
QDir tempPath(tempDir.path());
|
||||
QString assetServerAddress("T:/AssetServerCacheDummyFolder");
|
||||
UnitTestUtils::CreateDummyFile(tempPath.absoluteFilePath("AssetProcessorPlatformConfig.ini"), QString("[Server]\ncacheServerAddress=%1\n").arg(assetServerAddress));
|
||||
QString assetProcesorPlatformConfigPath = tempPath.absoluteFilePath("AssetProcessorPlatformConfig.ini");
|
||||
UnitTestUtils::CreateDummyFile(assetProcesorPlatformConfigPath, QString("[Server]\ncacheServerAddress=%1\n").arg(assetServerAddress));
|
||||
|
||||
AssetUtilities::ResetAssetRoot();
|
||||
QDir newRoot;
|
||||
AssetUtilities::ComputeEngineRoot(newRoot, &tempPath);
|
||||
|
||||
auto settingsRegistry = AZ::SettingsRegistry::Get();
|
||||
AZ::SettingsRegistryMergeUtils::ConfigParserSettings configParserSettings;
|
||||
configParserSettings.m_registryRootPointerPath = AssetProcessor::AssetProcessorSettingsKey;
|
||||
AssetProcessor::PlatformConfiguration::MergeConfigFileToSettingsRegistry(*settingsRegistry,
|
||||
assetProcesorPlatformConfigPath.toUtf8().data());
|
||||
QString assetServerAddressReturned = AssetUtilities::ServerAddress();
|
||||
EXPECT_STREQ(assetServerAddressReturned.toUtf8().data(), assetServerAddress.toUtf8().data());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user