Even More Modifiers  1.0.0.0
A mod for rolling various bonus stats on items
ModifierPropertiesTests.cs
Go to the documentation of this file.
1 using System;
2 using Loot.Core;
3 using Moq;
4 using NUnit.Framework;
5 using Terraria;
6 using Terraria.ModLoader.IO;
7 using Terraria.Utilities;
8 
9 namespace LootTests
10 {
11  [TestFixture()]
13  {
14  public interface IFakeProperties
15  {
16  float MinMagnitude { get; set; }
17  float MaxMagnitude { get; set; }
18  float MagnitudeStrength { get; set; }
19  float BasePower { get; set; }
20  float Magnitude { get; set; }
21  float Power { get; set; }
22  }
23 
25  {
26  public virtual float MinMagnitude { get; set; }
27  public virtual float MaxMagnitude { get; set; }
28  public virtual float MagnitudeStrength { get; set; }
29  public virtual float BasePower { get; set; }
30  public virtual float Magnitude { get; set; }
31  public virtual float Power { get; set; }
32 
33  public FakeProperties RollMagnitudeAndPower(float magnitudePower = 1f, float lukStat = 0f)
34  {
35  Magnitude = RollMagnitude(magnitudePower, lukStat);
36 
37  int iterations = (int)Math.Ceiling(lukStat) / 2;
38 
39  // makes you more lucky rolling better magnitudes
40  for (int i = 0; i < iterations; i++)
41  {
42  float rolledMagnitude = RollMagnitude(magnitudePower, lukStat);
43  if (rolledMagnitude > Magnitude)
44  {
45  Magnitude = rolledMagnitude;
46  }
47  }
48 
49  Power = RollPower();
50 
51  return this;
52  }
53 
54  internal float RollMagnitude(float magnitudePower, float lukStat)
55  {
56  float useMin = MinMagnitude * (0.01f * lukStat);
57  float useMax = MaxMagnitude * magnitudePower;
58  float randomMag = (useMin + Main.rand.NextFloat() * (useMax - useMin));
59  return randomMag * MagnitudeStrength;
60  }
61 
62  internal float RollPower()
63  {
64  return BasePower * Magnitude;
65  }
66  }
67 
68  [SetUp]
69  public void Setup()
70  {
71  Main.instance = new Main();
72  Main.dedServ = true;
73  Main.rand = new UnifiedRandom();
74  }
75 
76  [Test]
77  public void TestMinMaxMagnitudes()
78  {
79  var p = new ModifierProperties();
80  Assert.AreEqual(p.Magnitude, 0f);
81  Assert.AreEqual(p.Power, 0f);
82  Assert.AreEqual(p.RoundedPower, 0f);
83 
84  float n = 10f, m = n * 2f;
85  p = new ModifierProperties(minMagnitude: n, maxMagnitude: m);
86  Assert.AreEqual(p.MinMagnitude, n);
87  Assert.AreEqual(p.MaxMagnitude, m);
88  Assert.AreEqual(p.MinMagnitude, p.MaxMagnitude - n);
89  Assert.AreEqual(p.MaxMagnitude, p.MinMagnitude + n);
90  Assert.IsTrue(p.MinMagnitude <= p.MaxMagnitude);
91  Assert.IsTrue(p.MaxMagnitude >= p.MinMagnitude);
92  }
93 
94  [Test]
95  public void TestSaveAndLoad()
96  {
97  //@todo why did this fail?
98  //Assert.AreEqual(new ModifierProperties(), new ModifierProperties());
99  var p = new ModifierProperties
100  {
101  Magnitude = 10f,
102  Power = 100f
103  };
104  var tc = ModifierProperties._Save(null, p);
105  Assert.IsInstanceOf<TagCompound>(tc);
106  Assert.IsTrue(tc.ContainsKey("Magnitude"));
107  Assert.IsTrue(tc.ContainsKey("Power"));
108  Assert.IsTrue(tc.ContainsKey("ModifierPropertiesSaveVersion"));
109  Assert.AreEqual(tc.Get<float>("Magnitude"), 10f);
110  Assert.AreEqual(tc.Get<float>("Power"), 100f);
111  Assert.IsTrue(tc.Get<int>("ModifierPropertiesSaveVersion") > 0);
112 
113  p = ModifierProperties._Load(null, tc);
114  Assert.IsInstanceOf<ModifierProperties>(p);
115  Assert.AreEqual(p.Magnitude, 10f);
116  Assert.AreEqual(p.Magnitude, tc.Get<float>("Magnitude"));
117  Assert.AreEqual(p.Power, 100f);
118  Assert.AreEqual(p.Power, tc.Get<float>("Power"));
119  }
120 
121  //@todo figure this one out
122  [Test]
123  public void TestRoll()
124  {
125  var mock = new Mock<FakeProperties>();
126  mock.SetupAllProperties();
127  mock.SetupProperty(x => x.Magnitude);
128  mock.SetupProperty(x => x.Power);
129  mock.SetupSet(x => x.Magnitude = 1f);
130  mock.SetupSet(x => x.Power = 2f);
131 
132  mock.Object.RollMagnitudeAndPower(10f, 10);
133 
134  mock.VerifySet(x => x.Magnitude = It.IsAny<float>(), Times.AtLeastOnce);
135  mock.VerifySet(x => x.Power = It.IsAny<float>(), Times.Once);
136  mock.Verify(x => x.RollMagnitude(It.IsAny<float>(), It.IsAny<float>()), Times.AtLeastOnce);
137  mock.Verify(x => x.RollPower(), Times.Once);
138 
139  Assert.AreEqual(mock.Object.Magnitude, 1f);
140  Assert.AreEqual(mock.Object.Power, 2f);
141  }
142  }
143 }
FakeProperties RollMagnitudeAndPower(float magnitudePower=1f, float lukStat=0f)