| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using Content.Shared.DoAfter;
- using Robust.Shared.GameObjects;
- using Robust.Shared.Map;
- using Robust.Shared.Reflection;
- using Robust.Shared.Serialization;
- using Robust.Shared.Timing;
- using Robust.Shared.Utility;
- namespace Content.IntegrationTests.Tests.DoAfter
- {
- [TestFixture]
- [TestOf(typeof(DoAfterComponent))]
- public sealed partial class DoAfterServerTest
- {
- [TestPrototypes]
- private const string Prototypes = @"
- - type: entity
- name: DoAfterDummy
- id: DoAfterDummy
- components:
- - type: DoAfter
- ";
- [Serializable, NetSerializable]
- private sealed partial class TestDoAfterEvent : DoAfterEvent
- {
- public override DoAfterEvent Clone()
- {
- return this;
- }
- };
- [Test]
- public async Task TestSerializable()
- {
- await using var pair = await PoolManager.GetServerClient();
- var server = pair.Server;
- await server.WaitIdleAsync();
- var refMan = server.ResolveDependency<IReflectionManager>();
- await server.WaitPost(() =>
- {
- Assert.Multiple(() =>
- {
- foreach (var type in refMan.GetAllChildren<DoAfterEvent>(true))
- {
- if (type.IsAbstract || type == typeof(TestDoAfterEvent))
- continue;
- Assert.That(type.HasCustomAttribute<NetSerializableAttribute>()
- && type.HasCustomAttribute<SerializableAttribute>(),
- $"{nameof(DoAfterEvent)} is not NetSerializable. Event: {type.Name}");
- }
- });
- });
- await pair.CleanReturnAsync();
- }
- [Test]
- public async Task TestFinished()
- {
- await using var pair = await PoolManager.GetServerClient();
- var server = pair.Server;
- await server.WaitIdleAsync();
- var entityManager = server.ResolveDependency<IEntityManager>();
- var timing = server.ResolveDependency<IGameTiming>();
- var doAfterSystem = entityManager.EntitySysManager.GetEntitySystem<SharedDoAfterSystem>();
- var ev = new TestDoAfterEvent();
- // That it finishes successfully
- await server.WaitPost(() =>
- {
- var tickTime = 1.0f / timing.TickRate;
- var mob = entityManager.SpawnEntity("DoAfterDummy", MapCoordinates.Nullspace);
- var args = new DoAfterArgs(entityManager, mob, tickTime / 2, ev, null) { Broadcast = true };
- #pragma warning disable NUnit2045 // Interdependent assertions.
- Assert.That(doAfterSystem.TryStartDoAfter(args));
- Assert.That(ev.Cancelled, Is.False);
- #pragma warning restore NUnit2045
- });
- await server.WaitRunTicks(1);
- Assert.That(ev.Cancelled, Is.False);
- await pair.CleanReturnAsync();
- }
- [Test]
- public async Task TestCancelled()
- {
- await using var pair = await PoolManager.GetServerClient();
- var server = pair.Server;
- var entityManager = server.ResolveDependency<IEntityManager>();
- var timing = server.ResolveDependency<IGameTiming>();
- var doAfterSystem = entityManager.EntitySysManager.GetEntitySystem<SharedDoAfterSystem>();
- var ev = new TestDoAfterEvent();
- await server.WaitPost(() =>
- {
- var tickTime = 1.0f / timing.TickRate;
- var mob = entityManager.SpawnEntity("DoAfterDummy", MapCoordinates.Nullspace);
- var args = new DoAfterArgs(entityManager, mob, tickTime * 2, ev, null) { Broadcast = true };
- if (!doAfterSystem.TryStartDoAfter(args, out var id))
- {
- Assert.Fail();
- return;
- }
- Assert.That(!ev.Cancelled);
- doAfterSystem.Cancel(id);
- Assert.That(ev.Cancelled);
- });
- await server.WaitRunTicks(3);
- Assert.That(ev.Cancelled);
- await pair.CleanReturnAsync();
- }
- }
- }
|