Even More Modifiers  1.0.0.0
A mod for rolling various bonus stats on items
EMMLoaderTests.cs
Go to the documentation of this file.
1 using System;
2 using System.Diagnostics;
3 using System.Reflection;
4 using Loot;
5 using Moq;
6 using NUnit.Framework;
7 using Terraria;
8 using Terraria.ModLoader;
9 
10 namespace LootTests
11 {
12  public interface IFakeMod
13  {
14  string Name { get; }
15  Assembly Code { get; }
16  }
17 
18  public class FakeMod : Mod, IFakeMod
19  {
20  // @todo if we inherit from Mod, we somehow don't stub Code correctly
21  public new virtual Assembly Code { get; }
22  }
23 
24  [TestFixture]
25  internal class EMMLoaderTests
26  {
27  [SetUp]
28  public void Setup()
29  {
30  Main.instance = new Main();
31  Main.dedServ = true;
32  EMMLoader.Initialize();
33  EMMLoader.Load();
34  }
35 
36  [Test]
37  public void TestRegisterMod()
38  {
39  var fakeMod = new Mock<FakeMod>();
40 
41  // since load has to be non public we can't stub it
42  fakeMod.Object.GetType()
43  .GetField("loading", BindingFlags.Instance | BindingFlags.NonPublic)
44  ?.SetValue(fakeMod.Object, false);
45 
46  Assert.Throws<Exception>(() => EMMLoader.RegisterMod(fakeMod.Object));
47 
48  fakeMod.Object.GetType()
49  .GetField("loading", BindingFlags.Instance | BindingFlags.NonPublic)
50  ?.SetValue(fakeMod.Object, true);
51 
52  fakeMod.SetupGet(x => x.Name).Returns("TestMod");
53  // @todo if we inherit from Mod, we somehow don't stub Code correctly
54  fakeMod.SetupGet(x => x.Code).Returns(Assembly.GetExecutingAssembly());
55 
56  Assert.AreEqual(fakeMod.Object.Name, "TestMod");
57  Assert.AreEqual(fakeMod.Object.Code, Assembly.GetExecutingAssembly());
58 
59  EMMLoader.RegisterMod(fakeMod.Object);
60 
61  fakeMod.VerifyGet(x => x.Name, Times.Exactly(7));
62  fakeMod.VerifyGet(x => x.Code, Times.Once);
63  TestData(1, testReserves:false, testDictionaries:false);
64  }
65 
66  [Test]
67  public void TestSetupMod()
68  {
69  EMMLoader.Initialize();
70  EMMLoader.Load();
71 
72  var fakeMod = new Mock<FakeMod>();
73 
74  fakeMod.Object.GetType()
75  .GetField("loading", BindingFlags.Instance | BindingFlags.NonPublic)
76  ?.SetValue(fakeMod.Object, true);
77 
78  fakeMod.SetupGet(x => x.Name).Returns("TestMod");
79  // @todo figure out how to stub Code assembly
80  //fakeMod.SetupGet(x => x.Code).Returns(Assembly.LoadFrom(TestContext.CurrentContext.TestDirectory + "\\LootTests.dll"));
81 
82  Assert.AreEqual(fakeMod.Object.Name, "TestMod");
83  //Assert.AreEqual(fakeMod.Object.Code, Assembly.LoadFrom(TestContext.CurrentContext.TestDirectory + "\\LootTests.dll"));
84 
85  EMMLoader.RegisterMod(fakeMod.Object);
86  FakeMod obj = fakeMod.Object;
87  obj.Load();
88  EMMLoader.SetupContent(obj);
89 
90  //Assert.IsTrue(EMMLoader.Modifiers.Any(x => x.Value.GetType() == typeof(TestApplyMod)));
91  //Assert.IsTrue(EMMLoader.Rarities.Any(x => x.Value.GetType() == typeof(TestRarity)));
92  //Assert.IsTrue(EMMLoader.Pools.Any(x => x.Value.GetType() == typeof(TestPool)));
93  }
94 
95  //[Test]
96  //public void TestModifierPool()
97  //{
98  // TestSetupMod();
99 
100  // var testPool = EMMLoader.Pools.FirstOrDefault(x => x.Value.GetType() == typeof(TestPool));
101  // Assert.AreNotEqual(testPool, null);
102  //}
103 
104  private void TestData(int num, bool testReserves = true, bool testMaps = true, bool testDictionaries = true, bool testMods = true)
105  {
106  if (testReserves)
107  {
108  Assert.IsTrue(EMMLoader.ReserveRarityID() == num);
109  Assert.IsTrue(EMMLoader.ReserveModifierID() == num);
110  Assert.IsTrue(EMMLoader.ReservePoolID() == num);
111  Assert.IsTrue(EMMLoader.ReserveEffectID() == num);
112  }
113 
114  if (testMaps)
115  {
116  Assert.IsTrue(EMMLoader.RaritiesMap.Count == num);
117  Assert.IsTrue(EMMLoader.ModifiersMap.Count == num);
118  Assert.IsTrue(EMMLoader.PoolsMap.Count == num);
119  Assert.IsTrue(EMMLoader.EffectsMap.Count == num);
120  }
121 
122  if (testDictionaries)
123  {
124  Assert.IsTrue(EMMLoader.Rarities.Count == num);
125  Assert.IsTrue(EMMLoader.Modifiers.Count == num);
126  Assert.IsTrue(EMMLoader.Pools.Count == num);
127  Assert.IsTrue(EMMLoader.Effects.Count == num);
128  }
129 
130  if (testMods)
131  {
132  Assert.IsTrue(EMMLoader.Mods.Count == num);
133  }
134  }
135 
136  [Test]
137  public void TestInitialize()
138  {
139  EMMLoader.Initialize();
140  EMMLoader.Load();
141 
142  TestData(0);
143  }
144  }
145 }