This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using PkmnLib.Dynamic.Models;
|
||||
using PkmnLib.Plugin.Gen7.Scripts.Moves;
|
||||
using PkmnLib.Static;
|
||||
|
||||
namespace PkmnLib.Plugin.Gen7.Tests.Scripts.Moves;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for the <see cref="GuardianOfAlola"/> move script.
|
||||
/// Gen VII Bulbapedia behavior: "Guardian of Alola deals damage equal to 75% of the target's remaining HP
|
||||
/// (rounded down, but no less than 1)."
|
||||
/// </summary>
|
||||
public class GuardianOfAlolaTests
|
||||
{
|
||||
private static (GuardianOfAlola script, IExecutingMove move, IPokemon target) CreateTestSetup(uint maxHp,
|
||||
uint currentHp)
|
||||
{
|
||||
var script = new GuardianOfAlola();
|
||||
var move = Substitute.For<IExecutingMove>();
|
||||
|
||||
var target = Substitute.For<IPokemon>();
|
||||
target.BoostedStats.Returns(new StatisticSet<uint>(maxHp, 100, 100, 100, 100, 100));
|
||||
target.CurrentHealth.Returns(currentHp);
|
||||
|
||||
return (script, move, target);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Bulbapedia: "Guardian of Alola deals damage equal to 75% of the target's remaining HP". A target
|
||||
/// at full HP takes 75% of that HP as damage.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public async Task ChangeMoveDamage_TargetAtFullHp_DamageIsThreeQuartersOfHp()
|
||||
{
|
||||
// Arrange
|
||||
var (script, move, target) = CreateTestSetup(400, 400);
|
||||
uint damage = 10;
|
||||
|
||||
// Act
|
||||
script.ChangeMoveDamage(move, target, 0, ref damage);
|
||||
|
||||
// Assert
|
||||
await Assert.That(damage).IsEqualTo(300u);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Bulbapedia: the damage is "equal to 75% of the target's remaining HP", not its maximum HP. A
|
||||
/// target with 400 max HP but only 100 remaining takes 75 damage.
|
||||
/// </summary>
|
||||
[Test, Arguments(400u, 100u, 75u), Arguments(400u, 200u, 150u), Arguments(300u, 50u, 37u)]
|
||||
public async Task ChangeMoveDamage_TargetDamaged_DamageIsThreeQuartersOfRemainingHp(uint maxHp, uint currentHp,
|
||||
uint expectedDamage)
|
||||
{
|
||||
// Arrange
|
||||
var (script, move, target) = CreateTestSetup(maxHp, currentHp);
|
||||
uint damage = 10;
|
||||
|
||||
// Act
|
||||
script.ChangeMoveDamage(move, target, 0, ref damage);
|
||||
|
||||
// Assert
|
||||
await Assert.That(damage).IsEqualTo(expectedDamage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Bulbapedia: the damage is "rounded down, but no less than 1" — a target with a single HP remaining
|
||||
/// still takes 1 damage instead of 0.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public async Task ChangeMoveDamage_TargetAtOneHp_DamageIsAtLeastOne()
|
||||
{
|
||||
// Arrange
|
||||
var (script, move, target) = CreateTestSetup(400, 1);
|
||||
uint damage = 10;
|
||||
|
||||
// Act
|
||||
script.ChangeMoveDamage(move, target, 0, ref damage);
|
||||
|
||||
// Assert
|
||||
await Assert.That(damage).IsEqualTo(1u);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user