Move all battle state from IPokemon to an ephemeral IBattlePokemon wrapper

This commit is contained in:
2026-08-28 15:20:26 +02:00
parent 942be8eaeb
commit 8a2733a0a9
859 changed files with 4408 additions and 5331 deletions

View File

@@ -31,12 +31,12 @@ public class AuroraVeilTests
}
}
private static (AuroraVeil script, IExecutingMove move, IPokemon target, IPokemon user, IScriptSet sideScripts,
IHitData hitData) CreateTestSetup(StringKey? weather)
private static (AuroraVeil script, IExecutingMove move, IBattlePokemon target, IBattlePokemon user, IScriptSet
sideScripts, IHitData hitData) CreateTestSetup(StringKey? weather)
{
var script = new AuroraVeil();
var move = Substitute.For<IExecutingMove>();
var target = Substitute.For<IPokemon>();
var target = Substitute.For<IBattlePokemon>();
var hitData = Substitute.For<IHitData>();
move.GetHitData(target, 0).Returns(hitData);
@@ -51,13 +51,10 @@ public class AuroraVeilTests
side.VolatileScripts.Returns(sideScripts);
battle.Sides.Returns(new[] { side });
var battleData = Substitute.For<IPokemonBattleData>();
battleData.Battle.Returns(battle);
battleData.SideIndex.Returns((byte)0);
var user = Substitute.For<IPokemon>();
user.BattleData.Returns(battleData);
var user = Substitute.For<IBattlePokemon>();
user.GetScripts().Returns(_ => new ScriptIterator(new List<IEnumerable<ScriptContainer>>()));
user.SideIndex.Returns((byte)0);
user.Battle.Returns(battle);
move.User.Returns(user);
return (script, move, target, user, sideScripts, hitData);
@@ -154,25 +151,4 @@ public class AuroraVeilTests
var effect = (AuroraVeilEffect)((Func<Script?>)call.GetArguments()[1]!)()!;
await Assert.That(effect.NumberOfTurns).IsEqualTo(8);
}
/// <summary>
/// Technical test: outside of battle (no battle data) the script returns without throwing.
/// </summary>
[Test]
public async Task OnSecondaryEffect_NoBattleData_DoesNothing()
{
// Arrange
var script = new AuroraVeil();
var move = Substitute.For<IExecutingMove>();
var target = Substitute.For<IPokemon>();
var user = Substitute.For<IPokemon>();
user.BattleData.Returns((IPokemonBattleData?)null);
move.User.Returns(user);
// Act
script.OnSecondaryEffect(move, target, 0);
// Assert - no hit data was touched
await Assert.That(move.ReceivedCalls().Any(c => c.GetMethodInfo().Name == "GetHitData")).IsFalse();
}
}