2023-02-24 19:01:25 -05:00
|
|
|
using Content.Shared.DoAfter;
|
2021-02-11 01:13:03 -08:00
|
|
|
using Robust.Shared.GameObjects;
|
2020-08-09 02:16:13 +10:00
|
|
|
using Robust.Shared.Map;
|
2023-04-03 13:13:48 +12:00
|
|
|
using Robust.Shared.Reflection;
|
|
|
|
|
using Robust.Shared.Serialization;
|
2021-02-11 01:13:03 -08:00
|
|
|
using Robust.Shared.Timing;
|
2023-04-03 13:13:48 +12:00
|
|
|
using Robust.Shared.Utility;
|
2020-08-09 02:16:13 +10:00
|
|
|
|
|
|
|
|
namespace Content.IntegrationTests.Tests.DoAfter
|
|
|
|
|
{
|
|
|
|
|
[TestFixture]
|
|
|
|
|
[TestOf(typeof(DoAfterComponent))]
|
2023-08-22 18:14:33 -07:00
|
|
|
public sealed partial class DoAfterServerTest
|
2020-08-09 02:16:13 +10:00
|
|
|
{
|
2023-08-05 16:16:48 +12:00
|
|
|
[TestPrototypes]
|
2021-02-09 22:04:47 +01:00
|
|
|
private const string Prototypes = @"
|
2020-11-18 15:30:36 +01:00
|
|
|
- type: entity
|
2023-08-05 16:16:48 +12:00
|
|
|
name: DoAfterDummy
|
|
|
|
|
id: DoAfterDummy
|
2020-11-18 15:30:36 +01:00
|
|
|
components:
|
|
|
|
|
- type: DoAfter
|
|
|
|
|
";
|
|
|
|
|
|
2024-01-20 13:53:39 +11:00
|
|
|
[Serializable, NetSerializable]
|
2023-08-22 18:14:33 -07:00
|
|
|
private sealed partial class TestDoAfterEvent : DoAfterEvent
|
2023-02-24 19:01:25 -05:00
|
|
|
{
|
2023-04-03 13:13:48 +12:00
|
|
|
public override DoAfterEvent Clone()
|
2023-02-24 19:01:25 -05:00
|
|
|
{
|
2023-04-03 13:13:48 +12:00
|
|
|
return this;
|
2023-02-24 19:01:25 -05:00
|
|
|
}
|
2023-04-03 13:13:48 +12:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public async Task TestSerializable()
|
|
|
|
|
{
|
2023-08-25 02:56:51 +02:00
|
|
|
await using var pair = await PoolManager.GetServerClient();
|
|
|
|
|
var server = pair.Server;
|
2023-04-03 13:13:48 +12:00
|
|
|
await server.WaitIdleAsync();
|
|
|
|
|
var refMan = server.ResolveDependency<IReflectionManager>();
|
2023-02-24 19:01:25 -05:00
|
|
|
|
2023-04-03 13:13:48 +12:00
|
|
|
await server.WaitPost(() =>
|
2023-02-24 19:01:25 -05:00
|
|
|
{
|
2023-04-03 13:13:48 +12:00
|
|
|
Assert.Multiple(() =>
|
|
|
|
|
{
|
|
|
|
|
foreach (var type in refMan.GetAllChildren<DoAfterEvent>(true))
|
|
|
|
|
{
|
|
|
|
|
if (type.IsAbstract || type == typeof(TestDoAfterEvent))
|
|
|
|
|
continue;
|
2023-02-24 19:01:25 -05:00
|
|
|
|
2023-04-03 13:13:48 +12:00
|
|
|
Assert.That(type.HasCustomAttribute<NetSerializableAttribute>()
|
|
|
|
|
&& type.HasCustomAttribute<SerializableAttribute>(),
|
|
|
|
|
$"{nameof(DoAfterEvent)} is not NetSerializable. Event: {type.Name}");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2023-08-25 02:56:51 +02:00
|
|
|
await pair.CleanReturnAsync();
|
2023-04-03 13:13:48 +12:00
|
|
|
}
|
2023-02-24 19:01:25 -05:00
|
|
|
|
2020-08-09 02:16:13 +10:00
|
|
|
[Test]
|
2020-08-09 17:59:25 +10:00
|
|
|
public async Task TestFinished()
|
2020-08-09 02:16:13 +10:00
|
|
|
{
|
2023-08-25 02:56:51 +02:00
|
|
|
await using var pair = await PoolManager.GetServerClient();
|
|
|
|
|
var server = pair.Server;
|
2022-08-28 13:26:35 +10:00
|
|
|
await server.WaitIdleAsync();
|
|
|
|
|
|
|
|
|
|
var entityManager = server.ResolveDependency<IEntityManager>();
|
2023-06-07 21:08:52 +10:00
|
|
|
var timing = server.ResolveDependency<IGameTiming>();
|
2023-04-03 13:13:48 +12:00
|
|
|
var doAfterSystem = entityManager.EntitySysManager.GetEntitySystem<SharedDoAfterSystem>();
|
|
|
|
|
var ev = new TestDoAfterEvent();
|
2020-08-09 02:16:13 +10:00
|
|
|
|
|
|
|
|
// That it finishes successfully
|
2022-06-19 20:22:28 -07:00
|
|
|
await server.WaitPost(() =>
|
2020-08-09 02:16:13 +10:00
|
|
|
{
|
2023-06-07 21:08:52 +10:00
|
|
|
var tickTime = 1.0f / timing.TickRate;
|
2023-08-05 16:16:48 +12:00
|
|
|
var mob = entityManager.SpawnEntity("DoAfterDummy", MapCoordinates.Nullspace);
|
2023-09-11 09:42:41 +10:00
|
|
|
var args = new DoAfterArgs(entityManager, mob, tickTime / 2, ev, null) { Broadcast = true };
|
2023-07-05 21:54:25 -07:00
|
|
|
#pragma warning disable NUnit2045 // Interdependent assertions.
|
2023-04-03 13:13:48 +12:00
|
|
|
Assert.That(doAfterSystem.TryStartDoAfter(args));
|
|
|
|
|
Assert.That(ev.Cancelled, Is.False);
|
2023-07-05 21:54:25 -07:00
|
|
|
#pragma warning restore NUnit2045
|
2020-08-09 02:16:13 +10:00
|
|
|
});
|
2020-08-13 14:40:27 +02:00
|
|
|
|
2020-08-09 02:16:13 +10:00
|
|
|
await server.WaitRunTicks(1);
|
2023-04-03 13:13:48 +12:00
|
|
|
Assert.That(ev.Cancelled, Is.False);
|
2022-06-19 20:22:28 -07:00
|
|
|
|
2023-08-25 02:56:51 +02:00
|
|
|
await pair.CleanReturnAsync();
|
2020-08-09 17:59:25 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public async Task TestCancelled()
|
|
|
|
|
{
|
2023-08-25 02:56:51 +02:00
|
|
|
await using var pair = await PoolManager.GetServerClient();
|
|
|
|
|
var server = pair.Server;
|
2022-08-28 13:26:35 +10:00
|
|
|
var entityManager = server.ResolveDependency<IEntityManager>();
|
2023-06-07 21:08:52 +10:00
|
|
|
var timing = server.ResolveDependency<IGameTiming>();
|
2023-04-03 13:13:48 +12:00
|
|
|
var doAfterSystem = entityManager.EntitySysManager.GetEntitySystem<SharedDoAfterSystem>();
|
|
|
|
|
var ev = new TestDoAfterEvent();
|
|
|
|
|
|
2022-06-19 20:22:28 -07:00
|
|
|
await server.WaitPost(() =>
|
2020-08-09 02:16:13 +10:00
|
|
|
{
|
2023-06-07 21:08:52 +10:00
|
|
|
var tickTime = 1.0f / timing.TickRate;
|
2022-08-28 13:26:35 +10:00
|
|
|
|
2023-08-05 16:16:48 +12:00
|
|
|
var mob = entityManager.SpawnEntity("DoAfterDummy", MapCoordinates.Nullspace);
|
2023-09-11 09:42:41 +10:00
|
|
|
var args = new DoAfterArgs(entityManager, mob, tickTime * 2, ev, null) { Broadcast = true };
|
2023-04-03 13:13:48 +12:00
|
|
|
|
2023-07-05 21:54:25 -07:00
|
|
|
if (!doAfterSystem.TryStartDoAfter(args, out var id))
|
2023-04-03 13:13:48 +12:00
|
|
|
{
|
|
|
|
|
Assert.Fail();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Assert.That(!ev.Cancelled);
|
|
|
|
|
doAfterSystem.Cancel(id);
|
|
|
|
|
Assert.That(ev.Cancelled);
|
|
|
|
|
|
2020-08-09 02:16:13 +10:00
|
|
|
});
|
|
|
|
|
|
2020-08-09 17:59:25 +10:00
|
|
|
await server.WaitRunTicks(3);
|
2023-04-03 13:13:48 +12:00
|
|
|
Assert.That(ev.Cancelled);
|
2022-06-19 20:22:28 -07:00
|
|
|
|
2023-08-25 02:56:51 +02:00
|
|
|
await pair.CleanReturnAsync();
|
2020-08-09 02:16:13 +10:00
|
|
|
}
|
|
|
|
|
}
|
2020-08-13 14:40:27 +02:00
|
|
|
}
|