added tests for parsing ModdedInstance

This commit is contained in:
2026-03-15 17:33:22 +01:00
parent 41e261bb15
commit 74df0d1cc1
5 changed files with 249 additions and 2 deletions

View File

@@ -0,0 +1,180 @@
game = "sse"
load_order = [
"Skyrim.esm",
"Update.esm",
"Dawnguard.esm",
"HearthFires.esm",
"Dragonborn.esm",
"ccBGSSSE001-Fish.esm",
"ccQDRSSE001-SurvivalMode.esl",
"ccBGSSSE037-Curios.esl",
"ccBGSSSE025-AdvDSGS.esm",
"_ResourcePack.esl",
"SkyUI_SE.esp",
]
game_file_overrides = [[
"skse64_loader.exe",
"SkyrimSELauncher.exe",
]]
[[mods]]
id = "skyui"
files = [
[
"SkyUI_SE.esp",
"Data/SkyUI_SE.esp",
],
[
"SkyUI_SE.bsa",
"Data/SkyUI_SE.bsa",
],
]
priority = 0
[[mods]]
id = "skse"
files = [
[
"Data/Scripts/actorbase.pex",
"Data/Scripts/actorbase.pex",
],
[
"Data/Scripts/weather.pex",
"Data/Scripts/weather.pex",
],
[
"skse64_loader.exe",
"skse64_loader.exe",
],
[
"Data/Scripts/headpart.pex",
"Data/Scripts/headpart.pex",
],
[
"Data/Scripts/soulgem.pex",
"Data/Scripts/soulgem.pex",
],
[
"Data/Scripts/modevent.pex",
"Data/Scripts/modevent.pex",
],
[
"Data/Scripts/actorvalueinfo.pex",
"Data/Scripts/actorvalueinfo.pex",
],
[
"Data/Scripts/book.pex",
"Data/Scripts/book.pex",
],
[
"Data/Scripts/potion.pex",
"Data/Scripts/potion.pex",
],
[
"Data/Scripts/spell.pex",
"Data/Scripts/spell.pex",
],
[
"Data/Scripts/perk.pex",
"Data/Scripts/perk.pex",
],
[
"Data/Scripts/objectreference.pex",
"Data/Scripts/objectreference.pex",
],
]
priority = 0
[[mods]]
id = "deadly_spells"
files = [
[
"000 Core Files/textures/impactdecals/decalsnowhole01_n.dds",
"Data/textures/impactdecals/decalsnowhole01_n.dds",
],
[
"40 Two Fire Esp/textures/impactdecals/decalflamespread01_g.dds",
"Data/textures/impactdecals/decalflamespread01_g.dds",
],
[
"000 Core Files/textures/impactdecals/decalsparkburn01_g.dds",
"Data/textures/impactdecals/decalsparkburn01_g.dds",
],
[
"40 Two Fire Esp/textures/impactdecals/decalflamespread01.dds",
"Data/textures/impactdecals/decalflamespread01.dds",
],
[
"000 Core Files/textures/impactdecals/decalfrostimpact01_n.dds",
"Data/textures/impactdecals/decalfrostimpact01_n.dds",
],
[
"000 Core Files/textures/impactdecals/decalspitimpact01_n.dds",
"Data/textures/impactdecals/decalspitimpact01_n.dds",
],
[
"40 Two Fire Esp/DeadlySpellImpacts - Two Fire.esp",
"Data/DeadlySpellImpacts - Two Fire.esp",
],
[
"000 Core Files/textures/impactdecals/decalsnowmelt01.dds",
"Data/textures/impactdecals/decalsnowmelt01.dds",
],
[
"000 Core Files/textures/impactdecals/decalspitimpact01.dds",
"Data/textures/impactdecals/decalspitimpact01.dds",
],
[
"000 Core Files/textures/impactdecals/decalsnowhole01.dds",
"Data/textures/impactdecals/decalsnowhole01.dds",
],
[
"000 Core Files/textures/impactdecals/decalsparkburn01.dds",
"Data/textures/impactdecals/decalsparkburn01.dds",
],
[
"10 Fire Cracks/textures/impactdecals/decalflameburn01_g.dds",
"Data/textures/impactdecals/decalflameburn01_g.dds",
],
[
"000 Core Files/textures/impactdecals/decalsnowmelt01_n.dds",
"Data/textures/impactdecals/decalsnowmelt01_n.dds",
],
[
"000 Core Files/textures/impactdecals/decalfrostimpact01.dds",
"Data/textures/impactdecals/decalfrostimpact01.dds",
],
[
"10 Fire Cracks/textures/impactdecals/decalflameburn01_n.dds",
"Data/textures/impactdecals/decalflameburn01_n.dds",
],
[
"000 Core Files/textures/impactdecals/decalsnowmelt01_g.dds",
"Data/textures/impactdecals/decalsnowmelt01_g.dds",
],
[
"000 Core Files/textures/impactdecals/decalsparkburn01_n.dds",
"Data/textures/impactdecals/decalsparkburn01_n.dds",
],
[
"000 Core Files/textures/impactdecals/decalsnowhole01_g.dds",
"Data/textures/impactdecals/decalsnowhole01_g.dds",
],
[
"40 Two Fire Esp/Manual Installation of the Two Fire Option.txt",
"Data/Manual Installation of the Two Fire Option.txt",
],
[
"10 Fire Cracks/textures/impactdecals/decalflameburn01.dds",
"Data/textures/impactdecals/decalflameburn01.dds",
],
[
"40 Two Fire Esp/textures/impactdecals/decalflamespread01_n.dds",
"Data/textures/impactdecals/decalflamespread01_n.dds",
],
[
"000 Core Files/DeadlySpellImpacts.esp",
"Data/DeadlySpellImpacts.esp",
],
]
priority = 1

View File

@@ -0,0 +1,2 @@
game = "sse"

View File

@@ -8,9 +8,16 @@ path = "/home/user/games/sse"
[instances.example1] [instances.example1]
path = "example1.toml" path = "example1.toml"
[instances.example2] [instances.example2]
path = "/home/user/example2.toml" path = "/home/user/example2.toml"
[instances.instance_minimal]
path = "instance_minimal.toml"
[instances.instance_complex]
path = "instance_complex.toml"
[mods.mod1] [mods.mod1]
path = "/home/user/mods/mod1" path = "/home/user/mods/mod1"
@@ -18,4 +25,4 @@ path = "/home/user/mods/mod1"
path = "mod2" path = "mod2"
[mods.mod3] [mods.mod3]
path = "mods3" path = "mod3"

View File

@@ -0,0 +1,53 @@
use std::path::PathBuf;
use fomod_manager::types::{Link, RootConfig};
fn get_parent() -> PathBuf {
PathBuf::from(file!()).parent().unwrap().to_owned()
}
fn load_root() -> RootConfig {
RootConfig::load_from_file(get_parent().join("data/root_config_complex.toml")).unwrap()
}
#[test]
fn parse_minimal() {
let root = load_root();
let inst = root.load_instance_by_id("instance_minimal");
assert!(inst.is_ok(), "Failed to load instance");
let unwraped = inst.expect("Asserted before");
assert_eq!(unwraped.game_id(), "sse");
assert!(unwraped.mods().is_empty());
assert!(unwraped.game_file_overrides().is_empty());
assert!(unwraped.load_order().is_empty());
}
#[test]
fn parse_complex() {
let root = load_root();
let inst = root.load_instance_by_id("instance_complex");
assert!(inst.is_ok(), "Failed to load instance");
let unwraped = inst.expect("Asserted before");
assert_eq!(unwraped.game_id(), "sse");
assert_eq!(unwraped.load_order().len(), 11);
assert_eq!(
unwraped.game_file_overrides().first().unwrap(),
&Link::new("skse64_loader.exe", "SkyrimSELauncher.exe")
);
assert_eq!(unwraped.mods().len(), 3);
let test_mod = unwraped.mods().iter().find(|e| e.mod_id() == "skyui");
assert!(test_mod.is_some());
assert_eq!(test_mod.unwrap().priority(), 0);
assert_eq!(test_mod.unwrap().files().len(), 2);
}

View File

@@ -46,6 +46,11 @@ fn parse_complex() {
assert!( assert!(
config config
.mod_by_id("mod1") .mod_by_id("mod1")
.is_some_and(|e| e.path().ends_with("mods/mod1")) .is_some_and(|e| e.path() == "/home/user/mods/mod1")
);
assert!(
config
.mod_by_id("mod2")
.is_some_and(|e| e.path().ends_with("mod2"))
); );
} }