mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-28 02:56:36 -04:00
fix: keep generated defaults portable with conditional resources
This commit is contained in:
committed by
Matthew Stanley
parent
e5d92035a9
commit
b3abd6df01
@@ -2569,6 +2569,45 @@ int main() {
|
||||
check(!ModPackageManager::read_manifest(a,malformed,&error),"duplicate default roster rejected");
|
||||
}
|
||||
|
||||
{
|
||||
const auto old_root = root / "conditional-default-old";
|
||||
const auto new_root = root / "conditional-default-new";
|
||||
write_text(old_root / "bundled/conditional-default/1.0.0/manifest.toml",
|
||||
"format_version = 10\nid = \"conditional-default\"\nversion = \"1.0.0\"\nname = \"Conditional default\"\n"
|
||||
"[[target]]\ngame_id = \"SLUS-TEST\"\n"
|
||||
"[[feature]]\nid = \"media\"\nname = \"Media\"\ndefault_enabled = true\n"
|
||||
"[[option]]\nfeature = \"media\"\nid = \"language\"\nlabel = \"Language\"\n"
|
||||
"type = \"choice\"\ndefault = \"en\"\n"
|
||||
"[[option.choice]]\nvalue = \"en\"\nlabel = \"English\"\n"
|
||||
"[[option.choice]]\nvalue = \"es\"\nlabel = \"Spanish\"\n"
|
||||
"[[resource]]\nfeature = \"media\"\nid = \"english\"\nlabel = \"English\"\nrequired = true\nwhen = { language = \"en\" }\n"
|
||||
"[[resource]]\nfeature = \"media\"\nid = \"spanish\"\nlabel = \"Spanish\"\nrequired = true\nwhen = { language = \"es\" }\n");
|
||||
write_text(old_root / "english.dat", "English");
|
||||
const auto register_defaults = [&](ModPackageManager& manager) {
|
||||
check(manager.set_generated_feature_resource_default("conditional-default", "media", "english", "english.dat", &error), error.c_str());
|
||||
check(manager.set_generated_feature_resource_default("conditional-default", "media", "spanish", "spanish.dat", &error), error.c_str());
|
||||
};
|
||||
ModPackageManager original(old_root);
|
||||
check(original.scan(&error), error.c_str());
|
||||
register_defaults(original);
|
||||
check(original.resolve("SLUS-TEST").ok, "inactive missing generated default is not required");
|
||||
fs::rename(old_root, new_root, ec);
|
||||
check(!ec && !fs::exists(old_root), "old conditional default installation is unavailable");
|
||||
ModPackageManager relocated(new_root);
|
||||
check(relocated.scan(&error), error.c_str());
|
||||
register_defaults(relocated);
|
||||
const auto english = relocated.resolve("SLUS-TEST");
|
||||
check(english.ok && english.resources.size() == 1 && english.resources[0].id == "english" &&
|
||||
english.resources[0].path == fs::absolute(new_root / "english.dat"),
|
||||
"only the selected generated default resolves at the moved root");
|
||||
write_text(new_root / "spanish.dat", "Spanish");
|
||||
check(relocated.set_feature_option("conditional-default", "media", "language", "es", &error), error.c_str());
|
||||
const auto spanish = relocated.resolve("SLUS-TEST");
|
||||
check(spanish.ok && spanish.resources.size() == 1 && spanish.resources[0].id == "spanish" &&
|
||||
spanish.resources[0].path == fs::absolute(new_root / "spanish.dat"),
|
||||
"changing the option selects the other relocated generated default");
|
||||
}
|
||||
|
||||
fs::remove_all(root, ec);
|
||||
if (failures) {
|
||||
std::cerr << failures << " mod package test(s) failed\n";
|
||||
|
||||
Reference in New Issue
Block a user