added tests for parsing ModdedInstance
This commit is contained in:
180
tests/data/instance_complex.toml
Normal file
180
tests/data/instance_complex.toml
Normal 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
|
||||||
2
tests/data/instance_minimal.toml
Normal file
2
tests/data/instance_minimal.toml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
game = "sse"
|
||||||
|
|
||||||
@@ -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"
|
||||||
|
|||||||
53
tests/modded_instance_test.rs
Normal file
53
tests/modded_instance_test.rs
Normal 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);
|
||||||
|
}
|
||||||
@@ -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"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user