diff --git a/tests/data/instance_complex.toml b/tests/data/instance_complex.toml new file mode 100644 index 0000000..3c0b05c --- /dev/null +++ b/tests/data/instance_complex.toml @@ -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 diff --git a/tests/data/instance_minimal.toml b/tests/data/instance_minimal.toml new file mode 100644 index 0000000..3d71f91 --- /dev/null +++ b/tests/data/instance_minimal.toml @@ -0,0 +1,2 @@ +game = "sse" + diff --git a/tests/data/root_config_complex.toml b/tests/data/root_config_complex.toml index bdfab3f..c5074e6 100644 --- a/tests/data/root_config_complex.toml +++ b/tests/data/root_config_complex.toml @@ -8,9 +8,16 @@ path = "/home/user/games/sse" [instances.example1] path = "example1.toml" + [instances.example2] path = "/home/user/example2.toml" +[instances.instance_minimal] +path = "instance_minimal.toml" + +[instances.instance_complex] +path = "instance_complex.toml" + [mods.mod1] path = "/home/user/mods/mod1" @@ -18,4 +25,4 @@ path = "/home/user/mods/mod1" path = "mod2" [mods.mod3] -path = "mods3" +path = "mod3" diff --git a/tests/modded_instance_test.rs b/tests/modded_instance_test.rs new file mode 100644 index 0000000..0d3491c --- /dev/null +++ b/tests/modded_instance_test.rs @@ -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); +} diff --git a/tests/root_config_test.rs b/tests/root_config_test.rs index e5a62f2..848d486 100644 --- a/tests/root_config_test.rs +++ b/tests/root_config_test.rs @@ -46,6 +46,11 @@ fn parse_complex() { assert!( config .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")) ); }