mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
127 lines
3.9 KiB
C#
127 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime;
|
|
using Alphaleonis.Win32.Filesystem;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting.Logging;
|
|
using VFS;
|
|
using Wabbajack.Common;
|
|
|
|
namespace Wabbajack.Test
|
|
{
|
|
[TestClass]
|
|
public class SanityTests
|
|
{
|
|
public TestContext TestContext { get; set; }
|
|
|
|
private TestUtils utils { get; set; }
|
|
|
|
[TestInitialize]
|
|
public void TestInitialize()
|
|
{
|
|
Consts.TestMode = true;
|
|
|
|
utils = new TestUtils();
|
|
utils.GameName = "Skyrim Special Edition";
|
|
|
|
Utils.SetStatusFn((f, idx) => { });
|
|
Utils.SetLoggerFn(f => TestContext.WriteLine(f));
|
|
WorkQueue.Init((x, y, z) => { }, (min, max) => { });
|
|
|
|
}
|
|
|
|
[TestCleanup]
|
|
public void TestCleanup()
|
|
{
|
|
utils.Dispose();
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestDirectMatch()
|
|
{
|
|
|
|
var profile = utils.AddProfile();
|
|
var mod = utils.AddMod();
|
|
var test_pex = utils.AddModFile(mod, @"Data\scripts\test.pex", 10);
|
|
|
|
utils.Configure();
|
|
|
|
utils.AddManualDownload(
|
|
new Dictionary<string, byte[]> {{"/baz/biz.pex", File.ReadAllBytes(test_pex)}});
|
|
|
|
CompileAndInstall(profile);
|
|
|
|
utils.VerifyInstalledFile(mod, @"Data\scripts\test.pex");
|
|
}
|
|
|
|
[TestMethod]
|
|
public void UnmodifiedInlinedFilesArePulledFromArchives()
|
|
{
|
|
var profile = utils.AddProfile();
|
|
var mod = utils.AddMod();
|
|
var ini = utils.AddModFile(mod, @"foo.ini", 10);
|
|
utils.Configure();
|
|
|
|
utils.AddManualDownload(
|
|
new Dictionary<string, byte[]> { { "/baz/biz.pex", File.ReadAllBytes(ini) } });
|
|
|
|
var modlist = CompileAndInstall(profile);
|
|
var directive = modlist.Directives.Where(m => m.To == $"mods\\{mod}\\foo.ini").FirstOrDefault();
|
|
|
|
Assert.IsNotNull(directive);
|
|
Assert.IsInstanceOfType(directive, typeof(FromArchive));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ModifiedIniFilesArePatchedAgainstFileWithSameName()
|
|
{
|
|
var profile = utils.AddProfile();
|
|
var mod = utils.AddMod();
|
|
var ini = utils.AddModFile(mod, @"foo.ini", 10);
|
|
utils.Configure();
|
|
|
|
|
|
utils.AddManualDownload(
|
|
new Dictionary<string, byte[]> { { "/baz/foo.ini", File.ReadAllBytes(ini) } });
|
|
|
|
// Modify after creating mod archive in the downloads folder
|
|
File.WriteAllText(ini, "Wabbajack, Wabbajack, Wabbajack!");
|
|
|
|
var modlist = CompileAndInstall(profile);
|
|
var directive = modlist.Directives.Where(m => m.To == $"mods\\{mod}\\foo.ini").FirstOrDefault();
|
|
|
|
Assert.IsNotNull(directive);
|
|
Assert.IsInstanceOfType(directive, typeof(PatchedFromArchive));
|
|
}
|
|
|
|
|
|
private ModList CompileAndInstall(string profile)
|
|
{
|
|
var compiler = ConfigureAndRunCompiler(profile);
|
|
Install(compiler);
|
|
return compiler.ModList;
|
|
}
|
|
|
|
private void Install(Compiler compiler)
|
|
{
|
|
var modlist = Installer.LoadFromFile(compiler.ModListOutputFile);
|
|
var installer = new Installer(compiler.ModListOutputFile, modlist, utils.InstallFolder);
|
|
installer.DownloadFolder = utils.DownloadsFolder;
|
|
installer.GameFolder = utils.GameFolder;
|
|
installer.Install();
|
|
}
|
|
|
|
private Compiler ConfigureAndRunCompiler(string profile)
|
|
{
|
|
VirtualFileSystem.Reconfigure(utils.TestFolder);
|
|
var compiler = new Compiler(utils.MO2Folder);
|
|
compiler.VFS.Reset();
|
|
compiler.MO2Profile = profile;
|
|
compiler.ShowReportWhenFinished = false;
|
|
Assert.IsTrue(compiler.Compile());
|
|
return compiler;
|
|
}
|
|
}
|
|
}
|