DoAfter Refactor (#13225)
Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.DoAfter;
|
||||
using Content.Shared.DoAfter;
|
||||
using NUnit.Framework;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
@@ -21,17 +22,34 @@ namespace Content.IntegrationTests.Tests.DoAfter
|
||||
- type: DoAfter
|
||||
";
|
||||
|
||||
public sealed class TestDoAfterSystem : EntitySystem
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<DoAfterEvent<TestDoAfterData>>(OnTestDoAfterFinishEvent);
|
||||
}
|
||||
|
||||
private void OnTestDoAfterFinishEvent(DoAfterEvent<TestDoAfterData> ev)
|
||||
{
|
||||
ev.AdditionalData.Cancelled = ev.Cancelled;
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class TestDoAfterData
|
||||
{
|
||||
public bool Cancelled;
|
||||
};
|
||||
|
||||
[Test]
|
||||
public async Task TestFinished()
|
||||
{
|
||||
Task<DoAfterStatus> task = null;
|
||||
await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings{NoClient = true, ExtraPrototypes = Prototypes});
|
||||
var server = pairTracker.Pair.Server;
|
||||
await server.WaitIdleAsync();
|
||||
|
||||
var mapManager = server.ResolveDependency<IMapManager>();
|
||||
var entityManager = server.ResolveDependency<IEntityManager>();
|
||||
var doAfterSystem = entityManager.EntitySysManager.GetEntitySystem<DoAfterSystem>();
|
||||
var data = new TestDoAfterData();
|
||||
|
||||
// That it finishes successfully
|
||||
await server.WaitPost(() =>
|
||||
@@ -39,15 +57,12 @@ namespace Content.IntegrationTests.Tests.DoAfter
|
||||
var tickTime = 1.0f / IoCManager.Resolve<IGameTiming>().TickRate;
|
||||
var mob = entityManager.SpawnEntity("Dummy", MapCoordinates.Nullspace);
|
||||
var cancelToken = new CancellationTokenSource();
|
||||
var args = new DoAfterEventArgs(mob, tickTime / 2, cancelToken.Token);
|
||||
task = doAfterSystem.WaitDoAfter(args);
|
||||
var args = new DoAfterEventArgs(mob, tickTime / 2, cancelToken.Token) { Broadcast = true };
|
||||
doAfterSystem.DoAfter(args, data);
|
||||
});
|
||||
|
||||
await server.WaitRunTicks(1);
|
||||
Assert.That(task.Status, Is.EqualTo(TaskStatus.RanToCompletion));
|
||||
#pragma warning disable RA0004
|
||||
Assert.That(task.Result == DoAfterStatus.Finished);
|
||||
#pragma warning restore RA0004
|
||||
Assert.That(data.Cancelled, Is.False);
|
||||
|
||||
await pairTracker.CleanReturnAsync();
|
||||
}
|
||||
@@ -55,13 +70,11 @@ namespace Content.IntegrationTests.Tests.DoAfter
|
||||
[Test]
|
||||
public async Task TestCancelled()
|
||||
{
|
||||
Task<DoAfterStatus> task = null;
|
||||
|
||||
await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings{NoClient = true, ExtraPrototypes = Prototypes});
|
||||
var server = pairTracker.Pair.Server;
|
||||
var entityManager = server.ResolveDependency<IEntityManager>();
|
||||
var mapManager = server.ResolveDependency<IMapManager>();
|
||||
var doAfterSystem = entityManager.EntitySysManager.GetEntitySystem<DoAfterSystem>();
|
||||
var data = new TestDoAfterData();
|
||||
|
||||
await server.WaitPost(() =>
|
||||
{
|
||||
@@ -69,16 +82,13 @@ namespace Content.IntegrationTests.Tests.DoAfter
|
||||
|
||||
var mob = entityManager.SpawnEntity("Dummy", MapCoordinates.Nullspace);
|
||||
var cancelToken = new CancellationTokenSource();
|
||||
var args = new DoAfterEventArgs(mob, tickTime * 2, cancelToken.Token);
|
||||
task = doAfterSystem.WaitDoAfter(args);
|
||||
var args = new DoAfterEventArgs(mob, tickTime * 2, cancelToken.Token) { Broadcast = true };
|
||||
doAfterSystem.DoAfter(args, data);
|
||||
cancelToken.Cancel();
|
||||
});
|
||||
|
||||
await server.WaitRunTicks(3);
|
||||
Assert.That(task.Status, Is.EqualTo(TaskStatus.RanToCompletion));
|
||||
#pragma warning disable RA0004
|
||||
Assert.That(task.Result, Is.EqualTo(DoAfterStatus.Cancelled), $"Result was {task.Result}");
|
||||
#pragma warning restore RA0004
|
||||
Assert.That(data.Cancelled, Is.False);
|
||||
|
||||
await pairTracker.CleanReturnAsync();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user