Ray Koopa 88d07a1ff1 Fix remaining Scheme bugs.
- Implement IEquatable.
- Fix RoundTimeSeconds not properly being parsed.
- Uniquely throw ArgumentOutOfRangeException even for rounding properties.
- Fix FallDamage not being stored properly.
- Add tests for rounding properties and local scheme test files.
- Implement equality operations for SchemeWeapon.
2020-06-27 16:30:49 +02:00

80 lines
3.8 KiB
C#

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Syroot.Worms.Armageddon;
using Syroot.Worms.Test.Core;
namespace Syroot.Worms.Test.Armageddon
{
/// <summary>
/// Represents a collection of tests for the <see cref="Scheme"/> class.
/// </summary>
[TestClass]
public class SchemeTests
{
// ---- METHODS (PUBLIC) ---------------------------------------------------------------------------------------
/// <summary>
/// Loads all files found in the test directory.
/// </summary>
[TestMethod]
public void TestFiles() => FileTester.Run<Scheme>(Game.Test, "*.wsc");
/// <summary>
/// Tests rounding down to the nearest valid fall damage value.
/// </summary>
[TestMethod]
public void RoundFallDamage()
{
Scheme scheme = new Scheme();
Assert.ThrowsException<ArgumentOutOfRangeException>(() => scheme.FallDamage = -1);
scheme.FallDamage = 0; Assert.AreEqual(0, scheme.FallDamage);
scheme.FallDamage = 1; Assert.AreEqual(0, scheme.FallDamage);
scheme.FallDamage = 3; Assert.AreEqual(0, scheme.FallDamage);
scheme.FallDamage = 4; Assert.AreEqual(4, scheme.FallDamage);
scheme.FallDamage = 507; Assert.AreEqual(504, scheme.FallDamage);
scheme.FallDamage = 508; Assert.AreEqual(508, scheme.FallDamage);
Assert.ThrowsException<ArgumentOutOfRangeException>(() => scheme.FallDamage = 509);
}
/// <summary>
/// Tests rounding down to the nearest valid water rise rate value.
/// </summary>
[TestMethod]
public void RoundWaterRiseRate()
{
Scheme scheme = new Scheme();
scheme.WaterRiseRate = 0; Assert.AreEqual(0, scheme.WaterRiseRate);
scheme.WaterRiseRate = 1; Assert.AreEqual(0, scheme.WaterRiseRate);
scheme.WaterRiseRate = 4; Assert.AreEqual(0, scheme.WaterRiseRate);
scheme.WaterRiseRate = 5; Assert.AreEqual(5, scheme.WaterRiseRate);
scheme.WaterRiseRate = 252; Assert.AreEqual(245, scheme.WaterRiseRate);
scheme.WaterRiseRate = 253; Assert.AreEqual(253, scheme.WaterRiseRate);
Assert.ThrowsException<ArgumentOutOfRangeException>(() => scheme.WaterRiseRate = 254);
}
/// <summary>
/// Tests rounding down to the nearest valid fall damage value.
/// </summary>
[TestMethod]
public void RoundObjectCount()
{
Scheme scheme = new Scheme();
Assert.ThrowsException<ArgumentOutOfRangeException>(() => scheme.ObjectCount = 0);
scheme.ObjectCount = 1; Assert.AreEqual(1, scheme.ObjectCount);
scheme.ObjectCount = 2; Assert.AreEqual(2, scheme.ObjectCount);
scheme.ObjectCount = 30; Assert.AreEqual(30, scheme.ObjectCount);
scheme.ObjectCount = 31; Assert.AreEqual(30, scheme.ObjectCount);
scheme.ObjectCount = 34; Assert.AreEqual(30, scheme.ObjectCount);
scheme.ObjectCount = 35; Assert.AreEqual(35, scheme.ObjectCount);
scheme.ObjectCount = 99; Assert.AreEqual(95, scheme.ObjectCount);
scheme.ObjectCount = 100; Assert.AreEqual(100, scheme.ObjectCount);
scheme.ObjectCount = 101; Assert.AreEqual(100, scheme.ObjectCount);
scheme.ObjectCount = 109; Assert.AreEqual(100, scheme.ObjectCount);
scheme.ObjectCount = 110; Assert.AreEqual(110, scheme.ObjectCount);
scheme.ObjectCount = 249; Assert.AreEqual(240, scheme.ObjectCount);
scheme.ObjectCount = 250; Assert.AreEqual(250, scheme.ObjectCount);
Assert.ThrowsException<ArgumentOutOfRangeException>(() => scheme.ObjectCount = 251);
}
}
}