mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Use Starfield plugins in Starfield tests
This commit is contained in:
+2
-2
@@ -20,8 +20,8 @@ FetchContent_Declare(
|
||||
|
||||
FetchContent_Declare(
|
||||
testing-plugins
|
||||
URL "https://github.com/Ortham/testing-plugins/archive/1.5.0.tar.gz"
|
||||
URL_HASH "SHA256=98c9094fb0f0152b1af7a6206950207f7ddc6602cd44ed67ebf70603ef490791")
|
||||
URL "https://github.com/Ortham/testing-plugins/archive/1.6.2.tar.gz"
|
||||
URL_HASH "SHA256=f6e5b55e2669993ab650ba470424b725d1fab71ace979134a77de3373bd55620")
|
||||
|
||||
FetchContent_MakeAvailable(GTest testing-plugins)
|
||||
|
||||
|
||||
@@ -33,9 +33,22 @@ namespace test {
|
||||
class GameInterfaceTest : public ApiGameOperationsTest {
|
||||
protected:
|
||||
GameInterfaceTest() :
|
||||
emptyFile("EmptyFile.esm"),
|
||||
nonAsciiEsm(u8"non\u00C1scii.esm"),
|
||||
pluginsToLoad({
|
||||
emptyFile("EmptyFile.esm"), nonAsciiEsm(u8"non\u00C1scii.esm") {
|
||||
// Make sure the plugin with a non-ASCII filename exists.
|
||||
std::filesystem::copy_file(dataPath / blankEsm,
|
||||
dataPath / std::filesystem::u8path(nonAsciiEsm));
|
||||
|
||||
if (GetParam() == GameType::starfield) {
|
||||
pluginsToLoad = {
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankFullEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankEsp,
|
||||
blankMasterDependentEsp,
|
||||
};
|
||||
} else {
|
||||
pluginsToLoad = {
|
||||
// These are all ASCII filenames.
|
||||
masterFile,
|
||||
blankEsm,
|
||||
@@ -48,15 +61,13 @@ protected:
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankPluginDependentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
}) {
|
||||
// Make sure the plugin with a non-ASCII filename exists.
|
||||
std::filesystem::copy_file(dataPath / blankEsm,
|
||||
dataPath / std::filesystem::u8path(nonAsciiEsm));
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const std::string emptyFile;
|
||||
const std::string nonAsciiEsm;
|
||||
const std::vector<std::filesystem::path> pluginsToLoad;
|
||||
std::vector<std::filesystem::path> pluginsToLoad;
|
||||
};
|
||||
|
||||
// Pass an empty first argument, as it's a prefix for the test instantation,
|
||||
@@ -108,7 +119,11 @@ TEST_P(
|
||||
GameInterfaceTest,
|
||||
loadPluginsWithHeadersOnlyTrueShouldLoadTheHeadersOfAllInstalledPlugins) {
|
||||
handle_->LoadPlugins(pluginsToLoad, true);
|
||||
EXPECT_EQ(11, handle_->GetLoadedPlugins().size());
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(6, handle_->GetLoadedPlugins().size());
|
||||
} else {
|
||||
EXPECT_EQ(11, handle_->GetLoadedPlugins().size());
|
||||
}
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(handle_->GetPlugin(masterFile));
|
||||
@@ -132,7 +147,11 @@ TEST_P(GameInterfaceTest, loadPluginsShouldTrimDotGhostFileExtensions) {
|
||||
TEST_P(GameInterfaceTest,
|
||||
loadPluginsWithHeadersOnlyFalseShouldFullyLoadAllInstalledPlugins) {
|
||||
handle_->LoadPlugins(pluginsToLoad, false);
|
||||
EXPECT_EQ(11, handle_->GetLoadedPlugins().size());
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(6, handle_->GetLoadedPlugins().size());
|
||||
} else {
|
||||
EXPECT_EQ(11, handle_->GetLoadedPlugins().size());
|
||||
}
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(handle_->GetPlugin(masterFile));
|
||||
@@ -165,19 +184,31 @@ TEST_P(GameInterfaceTest,
|
||||
}
|
||||
|
||||
TEST_P(GameInterfaceTest, sortPluginsShouldSucceedIfPassedValidArguments) {
|
||||
std::vector<std::string> expectedOrder = {
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentEsm,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankEsp,
|
||||
blankPluginDependentEsp,
|
||||
blankDifferentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
};
|
||||
std::vector<std::string> expectedOrder;
|
||||
if (GetParam() == GameType::starfield) {
|
||||
expectedOrder = {
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankFullEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankEsp,
|
||||
blankMasterDependentEsp,
|
||||
};
|
||||
} else {
|
||||
expectedOrder = {
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentEsm,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankEsp,
|
||||
blankPluginDependentEsp,
|
||||
blankDifferentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
};
|
||||
}
|
||||
|
||||
if (GetParam() == GameType::fo4 || GetParam() == GameType::tes5se) {
|
||||
expectedOrder.insert(expectedOrder.begin() + 5, blankEsl);
|
||||
@@ -186,27 +217,12 @@ TEST_P(GameInterfaceTest, sortPluginsShouldSucceedIfPassedValidArguments) {
|
||||
ASSERT_NO_THROW(GenerateMasterlist());
|
||||
ASSERT_NO_THROW(handle_->GetDatabase().LoadLists(masterlistPath, ""));
|
||||
|
||||
std::vector<std::filesystem::path> pluginsToSort({
|
||||
// These are all ASCII filenames.
|
||||
blankEsp,
|
||||
blankPluginDependentEsp,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankDifferentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentEsm,
|
||||
});
|
||||
|
||||
if (GetParam() == GameType::fo4 || GetParam() == GameType::tes5se) {
|
||||
pluginsToSort.push_back(blankEsl);
|
||||
pluginsToLoad.push_back(blankEsl);
|
||||
}
|
||||
|
||||
handle_->LoadCurrentLoadOrderState();
|
||||
std::vector<std::string> actualOrder = handle_->SortPlugins(pluginsToSort);
|
||||
std::vector<std::string> actualOrder = handle_->SortPlugins(pluginsToLoad);
|
||||
|
||||
EXPECT_EQ(expectedOrder, actualOrder);
|
||||
}
|
||||
@@ -245,27 +261,41 @@ TEST_P(GameInterfaceTest, setLoadOrderShouldSetTheLoadOrder) {
|
||||
handle_->SetAdditionalDataPaths({});
|
||||
|
||||
handle_->LoadCurrentLoadOrderState();
|
||||
std::vector<std::string> loadOrder({
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentEsm,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankDifferentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
blankEsp,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankPluginDependentEsp,
|
||||
});
|
||||
|
||||
const auto gameSupportsEsl =
|
||||
GetParam() == GameType::fo4 || GetParam() == GameType::fo4vr ||
|
||||
GetParam() == GameType::tes5se || GetParam() == GameType::tes5vr ||
|
||||
GetParam() == GameType::starfield;
|
||||
|
||||
if (gameSupportsEsl) {
|
||||
loadOrder.insert(loadOrder.begin() + 5, blankEsl);
|
||||
std::vector<std::string> loadOrder;
|
||||
if (GetParam() == GameType::starfield) {
|
||||
loadOrder = {
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentEsm,
|
||||
blankDifferentEsp,
|
||||
blankEsp,
|
||||
blankMasterDependentEsp,
|
||||
};
|
||||
} else {
|
||||
loadOrder = {
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentEsm,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankDifferentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
blankEsp,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankPluginDependentEsp,
|
||||
};
|
||||
|
||||
if (gameSupportsEsl) {
|
||||
loadOrder.insert(loadOrder.begin() + 5, blankEsl);
|
||||
}
|
||||
}
|
||||
|
||||
EXPECT_NO_THROW(handle_->SetLoadOrder(loadOrder));
|
||||
|
||||
@@ -37,21 +37,34 @@ protected:
|
||||
}
|
||||
|
||||
void loadInstalledPlugins(Game& game, bool headersOnly) {
|
||||
const std::vector<std::filesystem::path> plugins({
|
||||
// These are all ASCII filenames.
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankDifferentEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankEsp,
|
||||
blankDifferentEsp,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankPluginDependentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
});
|
||||
game.LoadPlugins(plugins, headersOnly);
|
||||
if (GetParam() == GameType::starfield) {
|
||||
const std::vector<std::filesystem::path> plugins({
|
||||
// These are all ASCII filenames.
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankFullEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankEsp,
|
||||
blankMasterDependentEsp,
|
||||
});
|
||||
game.LoadPlugins(plugins, headersOnly);
|
||||
} else {
|
||||
const std::vector<std::filesystem::path> plugins({
|
||||
// These are all ASCII filenames.
|
||||
masterFile,
|
||||
blankEsm,
|
||||
blankDifferentEsm,
|
||||
blankMasterDependentEsm,
|
||||
blankDifferentMasterDependentEsm,
|
||||
blankEsp,
|
||||
blankDifferentEsp,
|
||||
blankMasterDependentEsp,
|
||||
blankDifferentMasterDependentEsp,
|
||||
blankPluginDependentEsp,
|
||||
blankDifferentPluginDependentEsp,
|
||||
});
|
||||
game.LoadPlugins(plugins, headersOnly);
|
||||
}
|
||||
}
|
||||
|
||||
const std::string blankArchive;
|
||||
@@ -208,7 +221,11 @@ TEST_P(
|
||||
Game game = Game(GetParam(), dataPath.parent_path(), localPath);
|
||||
|
||||
EXPECT_NO_THROW(loadInstalledPlugins(game, true));
|
||||
EXPECT_EQ(11, game.GetCache().GetPlugins().size());
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(6, game.GetCache().GetPlugins().size());
|
||||
} else {
|
||||
EXPECT_EQ(11, game.GetCache().GetPlugins().size());
|
||||
}
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(game.GetPlugin(masterFile));
|
||||
@@ -252,7 +269,11 @@ TEST_P(GameTest,
|
||||
Game game = Game(GetParam(), dataPath.parent_path(), localPath);
|
||||
|
||||
EXPECT_NO_THROW(loadInstalledPlugins(game, false));
|
||||
EXPECT_EQ(11, game.GetCache().GetPlugins().size());
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(6, game.GetCache().GetPlugins().size());
|
||||
} else {
|
||||
EXPECT_EQ(11, game.GetCache().GetPlugins().size());
|
||||
}
|
||||
|
||||
// Check that one plugin's header has been read.
|
||||
ASSERT_NO_THROW(game.GetPlugin(blankEsm));
|
||||
|
||||
@@ -71,14 +71,6 @@ protected:
|
||||
std::filesystem::copy(dataPath / blankEsp, dataPath / blankEsl));
|
||||
}
|
||||
|
||||
if (GetParam() == GameType::starfield) {
|
||||
// The ESL flag is not the same as in Skyrim SE, so modify the file
|
||||
// accordingly.
|
||||
auto bytes = ReadFile(dataPath / blankEsl);
|
||||
bytes[9] = 0x1;
|
||||
WriteFile(dataPath / blankEsl, bytes);
|
||||
}
|
||||
|
||||
// Copy across archive files.
|
||||
std::filesystem::path blankMasterDependentArchive;
|
||||
if (GetParam() == GameType::fo4 || GetParam() == GameType::fo4vr ||
|
||||
@@ -265,6 +257,8 @@ TEST_P(PluginTest, loadingHeaderOnlyShouldReadHeaderData) {
|
||||
EXPECT_FLOAT_EQ(1.2f, plugin.GetHeaderVersion().value());
|
||||
} else if (GetParam() == GameType::tes4) {
|
||||
EXPECT_FLOAT_EQ(0.8f, plugin.GetHeaderVersion().value());
|
||||
} else if (GetParam() == GameType::starfield) {
|
||||
EXPECT_FLOAT_EQ(0.96f, plugin.GetHeaderVersion().value());
|
||||
} else {
|
||||
EXPECT_FLOAT_EQ(0.94f, plugin.GetHeaderVersion().value());
|
||||
}
|
||||
@@ -291,6 +285,8 @@ TEST_P(PluginTest, loadingWholePluginShouldReadHeaderData) {
|
||||
EXPECT_FLOAT_EQ(1.2f, plugin.GetHeaderVersion().value());
|
||||
} else if (GetParam() == GameType::tes4) {
|
||||
EXPECT_FLOAT_EQ(0.8f, plugin.GetHeaderVersion().value());
|
||||
} else if (GetParam() == GameType::starfield) {
|
||||
EXPECT_FLOAT_EQ(0.96f, plugin.GetHeaderVersion().value());
|
||||
} else {
|
||||
EXPECT_FLOAT_EQ(0.94f, plugin.GetHeaderVersion().value());
|
||||
}
|
||||
@@ -304,6 +300,8 @@ TEST_P(PluginTest, loadingWholePluginShouldReadFields) {
|
||||
|
||||
if (GetParam() == GameType::tes3) {
|
||||
EXPECT_EQ(0, plugin.GetOverrideRecordCount());
|
||||
} else if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(1, plugin.GetOverrideRecordCount());
|
||||
} else {
|
||||
EXPECT_EQ(4, plugin.GetOverrideRecordCount());
|
||||
}
|
||||
@@ -348,15 +346,15 @@ TEST_P(
|
||||
|
||||
TEST_P(PluginTest,
|
||||
isOverridePluginShouldOnlyBeTrueForAStarfieldOverridePlugin) {
|
||||
auto bytes = ReadFile(dataPath / blankDifferentPluginDependentEsp);
|
||||
auto bytes = ReadFile(dataPath / blankMasterDependentEsp);
|
||||
bytes[9] = 0x2;
|
||||
WriteFile(dataPath / blankDifferentPluginDependentEsp, bytes);
|
||||
WriteFile(dataPath / blankMasterDependentEsp, bytes);
|
||||
|
||||
Plugin plugin1(
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / blankEsp, true);
|
||||
Plugin plugin2(game_.GetType(),
|
||||
game_.GetCache(),
|
||||
game_.DataPath() / blankDifferentPluginDependentEsp,
|
||||
game_.DataPath() / blankMasterDependentEsp,
|
||||
true);
|
||||
|
||||
EXPECT_FALSE(plugin1.IsOverridePlugin());
|
||||
@@ -369,7 +367,11 @@ TEST_P(PluginTest, loadingAPluginWithMastersShouldReadThemCorrectly) {
|
||||
game_.DataPath() / blankMasterDependentEsp,
|
||||
true);
|
||||
|
||||
EXPECT_EQ(std::vector<std::string>({blankEsm}), plugin.GetMasters());
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(std::vector<std::string>({blankFullEsm}), plugin.GetMasters());
|
||||
} else {
|
||||
EXPECT_EQ(std::vector<std::string>({blankEsm}), plugin.GetMasters());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_P(PluginTest, loadingAPluginThatDoesNotExistShouldThrow) {
|
||||
@@ -484,9 +486,12 @@ TEST_P(
|
||||
|
||||
TEST_P(PluginTest,
|
||||
loadsArchiveShouldReturnFalseForAPluginThatDoesNotLoadAnArchive) {
|
||||
const auto pluginName = GetParam() == GameType::starfield
|
||||
? blankDifferentEsp
|
||||
: blankDifferentMasterDependentEsp;
|
||||
EXPECT_FALSE(Plugin(game_.GetType(),
|
||||
game_.GetCache(),
|
||||
game_.DataPath() / blankDifferentMasterDependentEsp,
|
||||
game_.DataPath() / pluginName,
|
||||
true)
|
||||
.LoadsArchive());
|
||||
}
|
||||
@@ -529,11 +534,18 @@ TEST_P(
|
||||
TEST_P(
|
||||
PluginTest,
|
||||
IsValidAsOverridePluginShouldOnlyReturnTrueForAStarfieldPluginWithNoNewRecords) {
|
||||
Plugin plugin1(
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / blankEsp, false);
|
||||
const auto sourcePluginName =
|
||||
GetParam() == GameType::starfield ? blankFullEsm : blankEsp;
|
||||
const auto overridePluginName = GetParam() == GameType::starfield
|
||||
? blankMasterDependentEsp
|
||||
: blankDifferentPluginDependentEsp;
|
||||
Plugin plugin1(game_.GetType(),
|
||||
game_.GetCache(),
|
||||
game_.DataPath() / sourcePluginName,
|
||||
false);
|
||||
Plugin plugin2(game_.GetType(),
|
||||
game_.GetCache(),
|
||||
game_.DataPath() / blankDifferentPluginDependentEsp,
|
||||
game_.DataPath() / overridePluginName,
|
||||
false);
|
||||
|
||||
EXPECT_FALSE(plugin1.IsValidAsOverridePlugin());
|
||||
@@ -577,8 +589,11 @@ TEST_P(PluginTest,
|
||||
|
||||
TEST_P(PluginTest,
|
||||
doRecordsOverlapShouldReturnTrueIfOnePluginOverridesTheOthersRecords) {
|
||||
const auto plugin1Name =
|
||||
GetParam() == GameType::starfield ? blankFullEsm : blankEsm;
|
||||
|
||||
Plugin plugin1(
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / blankEsm, false);
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / plugin1Name, false);
|
||||
Plugin plugin2(game_.GetType(),
|
||||
game_.GetCache(),
|
||||
game_.DataPath() / (blankMasterDependentEsm + ".ghost"),
|
||||
@@ -600,19 +615,29 @@ TEST_P(PluginTest,
|
||||
}
|
||||
|
||||
TEST_P(PluginTest, getOverlapSizeShouldCountEachRecordOnce) {
|
||||
const auto plugin1Name =
|
||||
GetParam() == GameType::starfield ? blankFullEsm : blankEsm;
|
||||
|
||||
Plugin plugin1(
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / blankEsm, false);
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / plugin1Name, false);
|
||||
Plugin plugin2(game_.GetType(),
|
||||
game_.GetCache(),
|
||||
game_.DataPath() / (blankMasterDependentEsm + ".ghost"),
|
||||
false);
|
||||
|
||||
EXPECT_EQ(4, plugin1.GetOverlapSize({&plugin2, &plugin2}));
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(1, plugin1.GetOverlapSize({&plugin2, &plugin2}));
|
||||
} else {
|
||||
EXPECT_EQ(4, plugin1.GetOverlapSize({&plugin2, &plugin2}));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_P(PluginTest, getOverlapSizeShouldCheckAgainstAllGivenPlugins) {
|
||||
const auto plugin1Name =
|
||||
GetParam() == GameType::starfield ? blankFullEsm : blankEsm;
|
||||
|
||||
Plugin plugin1(
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / blankEsm, false);
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / plugin1Name, false);
|
||||
Plugin plugin2(
|
||||
game_.GetType(), game_.GetCache(), game_.DataPath() / blankEsp, false);
|
||||
Plugin plugin3(game_.GetType(),
|
||||
@@ -620,7 +645,11 @@ TEST_P(PluginTest, getOverlapSizeShouldCheckAgainstAllGivenPlugins) {
|
||||
game_.DataPath() / (blankMasterDependentEsm + ".ghost"),
|
||||
false);
|
||||
|
||||
EXPECT_EQ(4, plugin1.GetOverlapSize({&plugin2, &plugin3}));
|
||||
if (GetParam() == GameType::starfield) {
|
||||
EXPECT_EQ(1, plugin1.GetOverlapSize({&plugin2, &plugin3}));
|
||||
} else {
|
||||
EXPECT_EQ(4, plugin1.GetOverlapSize({&plugin2, &plugin3}));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_P(PluginTest,
|
||||
|
||||
@@ -65,6 +65,8 @@ protected:
|
||||
nonPluginFile("NotAPlugin.esm"),
|
||||
invalidPlugin("Invalid.esm"),
|
||||
blankEsm("Blank.esm"),
|
||||
blankFullEsm("Blank.full.esm"),
|
||||
blankMediumEsm("Blank.medium.esm"),
|
||||
blankDifferentEsm("Blank - Different.esm"),
|
||||
blankMasterDependentEsm("Blank - Master Dependent.esm"),
|
||||
blankDifferentMasterDependentEsm(
|
||||
@@ -97,19 +99,55 @@ protected:
|
||||
|
||||
auto sourcePluginsPath = getSourcePluginsPath();
|
||||
|
||||
copyPlugin(sourcePluginsPath, blankEsm);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentEsm);
|
||||
copyPlugin(sourcePluginsPath, blankMasterDependentEsm);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentMasterDependentEsm);
|
||||
copyPlugin(sourcePluginsPath, blankEsp);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankMasterDependentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentMasterDependentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankPluginDependentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentPluginDependentEsp);
|
||||
if (GetParam() == GameType::starfield) {
|
||||
copyPlugin(sourcePluginsPath, blankFullEsm);
|
||||
copyPlugin(sourcePluginsPath, blankMediumEsm);
|
||||
|
||||
std::filesystem::copy_file(sourcePluginsPath / blankFullEsm,
|
||||
dataPath / blankEsm);
|
||||
ASSERT_TRUE(exists(dataPath / blankEsm));
|
||||
|
||||
std::filesystem::copy_file(sourcePluginsPath / blankFullEsm,
|
||||
dataPath / blankDifferentEsm);
|
||||
ASSERT_TRUE(exists(dataPath / blankDifferentEsm));
|
||||
|
||||
std::filesystem::copy_file(
|
||||
sourcePluginsPath / "Blank - Override.full.esm",
|
||||
dataPath / blankMasterDependentEsm);
|
||||
ASSERT_TRUE(exists(dataPath / blankMasterDependentEsm));
|
||||
|
||||
std::filesystem::copy_file(sourcePluginsPath / "Blank.esp",
|
||||
dataPath / blankEsp);
|
||||
ASSERT_TRUE(exists(dataPath / blankEsp));
|
||||
|
||||
std::filesystem::copy_file(sourcePluginsPath / blankEsp,
|
||||
dataPath / blankDifferentEsp);
|
||||
ASSERT_TRUE(exists(dataPath / blankDifferentEsp));
|
||||
|
||||
std::filesystem::copy_file(sourcePluginsPath / "Blank - Override.esp",
|
||||
dataPath / blankMasterDependentEsp);
|
||||
ASSERT_TRUE(exists(dataPath / blankMasterDependentEsp));
|
||||
} else {
|
||||
copyPlugin(sourcePluginsPath, blankEsm);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentEsm);
|
||||
copyPlugin(sourcePluginsPath, blankMasterDependentEsm);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentMasterDependentEsm);
|
||||
copyPlugin(sourcePluginsPath, blankEsp);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankMasterDependentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentMasterDependentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankPluginDependentEsp);
|
||||
copyPlugin(sourcePluginsPath, blankDifferentPluginDependentEsp);
|
||||
}
|
||||
|
||||
if (supportsLightPlugins(GetParam())) {
|
||||
copyPlugin(sourcePluginsPath, blankEsl);
|
||||
if (GetParam() == GameType::starfield) {
|
||||
std::filesystem::copy_file(sourcePluginsPath / "Blank.small.esm",
|
||||
dataPath / blankEsl);
|
||||
ASSERT_TRUE(exists(dataPath / blankEsl));
|
||||
} else {
|
||||
copyPlugin(sourcePluginsPath, blankEsl);
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure the game master file exists.
|
||||
@@ -211,22 +249,40 @@ protected:
|
||||
}
|
||||
|
||||
std::vector<std::pair<std::string, bool>> getInitialLoadOrder() const {
|
||||
auto loadOrder = std::vector<std::pair<std::string, bool>>({
|
||||
{masterFile, true},
|
||||
{blankEsm, true},
|
||||
{blankDifferentEsm, false},
|
||||
{blankMasterDependentEsm, false},
|
||||
{blankDifferentMasterDependentEsm, false},
|
||||
{blankEsp, false},
|
||||
{blankDifferentEsp, false},
|
||||
{blankMasterDependentEsp, false},
|
||||
{blankDifferentMasterDependentEsp, true},
|
||||
{blankPluginDependentEsp, false},
|
||||
{blankDifferentPluginDependentEsp, false},
|
||||
});
|
||||
std::vector<std::pair<std::string, bool>> loadOrder;
|
||||
|
||||
if (supportsLightPlugins(GetParam())) {
|
||||
loadOrder.insert(loadOrder.begin() + 5, std::make_pair(blankEsl, false));
|
||||
if (GetParam() == GameType::starfield) {
|
||||
loadOrder = {
|
||||
{masterFile, true},
|
||||
{blankEsm, true},
|
||||
{blankDifferentEsm, false},
|
||||
{blankFullEsm, false},
|
||||
{blankMasterDependentEsm, false},
|
||||
{blankMediumEsm, false},
|
||||
{blankEsl, false},
|
||||
{blankEsp, false},
|
||||
{blankDifferentEsp, false},
|
||||
{blankMasterDependentEsp, false},
|
||||
};
|
||||
} else {
|
||||
loadOrder = {
|
||||
{masterFile, true},
|
||||
{blankEsm, true},
|
||||
{blankDifferentEsm, false},
|
||||
{blankMasterDependentEsm, false},
|
||||
{blankDifferentMasterDependentEsm, false},
|
||||
{blankEsp, false},
|
||||
{blankDifferentEsp, false},
|
||||
{blankMasterDependentEsp, false},
|
||||
{blankDifferentMasterDependentEsp, true},
|
||||
{blankPluginDependentEsp, false},
|
||||
{blankDifferentPluginDependentEsp, false},
|
||||
};
|
||||
|
||||
if (supportsLightPlugins(GetParam())) {
|
||||
loadOrder.insert(loadOrder.begin() + 5,
|
||||
std::make_pair(blankEsl, false));
|
||||
}
|
||||
}
|
||||
|
||||
return loadOrder;
|
||||
@@ -238,6 +294,8 @@ protected:
|
||||
return absolute("./Morrowind/Data Files");
|
||||
else if (GetParam() == GameType::tes4)
|
||||
return absolute("./Oblivion/Data");
|
||||
else if (GetParam() == GameType::starfield)
|
||||
return absolute("./Starfield/Data");
|
||||
else if (supportsLightPlugins(GetParam()))
|
||||
return absolute("./SkyrimSE/Data");
|
||||
else
|
||||
@@ -267,6 +325,8 @@ protected:
|
||||
const std::string nonPluginFile;
|
||||
const std::string invalidPlugin;
|
||||
const std::string blankEsm;
|
||||
const std::string blankFullEsm;
|
||||
const std::string blankMediumEsm;
|
||||
const std::string blankDifferentEsm;
|
||||
const std::string blankMasterDependentEsm;
|
||||
const std::string blankDifferentMasterDependentEsm;
|
||||
@@ -315,6 +375,8 @@ private:
|
||||
return 0x790DC6FB;
|
||||
case GameType::tes4:
|
||||
return 0x374E2A6F;
|
||||
case GameType::starfield:
|
||||
return 0xDE586309;
|
||||
default:
|
||||
return 0x6A1273DC;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user