Gametest Part 2: Preliminary refactor every test to use GameTest as the framework. (#43207)

* Pass 1.

* i'm FREE

* Prevent hangups.

* okay fine here's an attribute for settings, will polish later and prolly remove the overridable thing.

* sigh.

* fix singular trigger bug so LatheTest doesn't flake.

* Remove SystemAttribute usage.

* Poke

* I used the shotgun. You know why? Cause the shot gun doesn’t miss, and unlike the shitty hybrid taser it stops a criminal in their tracks in two hits. Bang, bang, and they’re fucking done. I use four shots just to make damn sure. Because, once again, I’m not there to coddle a buncha criminal scum sucking f------, I’m there to 1) Survive the fucking round. 2) Guard the armory. So you can absolutely get fucked. If I get unbanned, which I won’t, you can guarantee I will continue to use the shotgun to apprehend criminals. Because it’s quick, clean and effective as fuck. Why in the seven hells would I fuck around with the disabler shots, which take half a clip just to bring someone down, or with the tazer bolts which are slow as balls, impossible to aim and do about next to jack shit, fuck all. The shotgun is the superior law enforcement weapon. Because it stops crime. And it stops crime by reducing the number of criminals roaming the fucking halls.

* Change the faulty store test into two tests, one of which is ignored for failing.
This commit is contained in:
Moony
2026-04-01 09:06:26 -07:00
committed by GitHub
parent 4b9e7352d5
commit d42adbf05d
163 changed files with 1005 additions and 1317 deletions
@@ -1,5 +1,6 @@
#nullable enable
using System;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@@ -44,7 +45,7 @@ public class ComponentQueryBenchmark
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup(typeof(QueryBenchSystem).Assembly);
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
_entMan = _pair.Server.ResolveDependency<IEntityManager>();
_itemQuery = _entMan.GetEntityQuery<ItemComponent>();
+2 -1
View File
@@ -1,3 +1,4 @@
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@@ -68,7 +69,7 @@ public class DeltaPressureBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
var mapdata = await _pair.CreateTestMap();
+2 -1
View File
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@@ -69,7 +70,7 @@ public class DestructibleBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
_entMan = server.ResolveDependency<IEntityManager>();
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@@ -60,7 +61,7 @@ public class DeviceNetworkingBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup(typeof(DeviceNetworkingBenchmark).Assembly);
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
await server.WaitPost(() =>
+2 -1
View File
@@ -1,3 +1,4 @@
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
@@ -51,7 +52,7 @@ public class GasReactionBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
// Create test map and grid
+3 -2
View File
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
@@ -27,7 +28,7 @@ public class HeatCapacityBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
await _pair.Connect();
_cEntMan = _pair.Client.ResolveDependency<IEntityManager>();
_sEntMan = _pair.Server.ResolveDependency<IEntityManager>();
+2 -1
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@@ -29,7 +30,7 @@ public class MapLoadBenchmark
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
var server = _pair.Server;
Paths = server.ResolveDependency<IPrototypeManager>()
+2 -1
View File
@@ -1,5 +1,6 @@
#nullable enable
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@@ -50,7 +51,7 @@ public class PvsBenchmark
#endif
PoolManager.Startup();
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
_entMan = _pair.Server.ResolveDependency<IEntityManager>();
_pair.Server.CfgMan.SetCVar(CVars.NetPVS, true);
_pair.Server.CfgMan.SetCVar(CVars.ThreadParallelCount, 0);
+2 -1
View File
@@ -1,4 +1,5 @@
#nullable enable
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
@@ -21,7 +22,7 @@ public class RaiseEventBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup(typeof(BenchSystem).Assembly);
_pair = PoolManager.GetServerClient().GetAwaiter().GetResult();
_pair = PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null)).GetAwaiter().GetResult();
var entMan = _pair.Server.EntMan;
var fact = _pair.Server.ResolveDependency<IComponentFactory>();
var bus = (EntityEventBus)entMan.EventBus;
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.IO;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using Content.IntegrationTests;
using Content.IntegrationTests.Pair;
@@ -36,7 +37,7 @@ public class SpawnEquipDeleteBenchmark
{
ProgramShared.PathOffset = "../../../../";
PoolManager.Startup();
_pair = await PoolManager.GetServerClient();
_pair = await PoolManager.GetServerClient(testContext: new ExternalTestContext("Benchmark", StreamWriter.Null));
var server = _pair.Server;
var mapData = await _pair.CreateTestMap();
@@ -1,16 +1,17 @@
#nullable enable
using System.Collections.Generic;
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Fixtures.Attributes;
using Content.Shared.Access;
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Access
{
[TestFixture]
[TestOf(typeof(AccessReaderComponent))]
public sealed class AccessReaderTest
public sealed class AccessReaderTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -21,91 +22,85 @@ namespace Content.IntegrationTests.Tests.Access
- type: AccessReader
";
[SidedDependency(Side.Server)] private readonly AccessReaderSystem _system = null!;
[Test]
[RunOnSide(Side.Server)]
public async Task TestTags()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
var ent = SSpawn("TestAccessReader");
var reader = new Entity<AccessReaderComponent>(ent, SComp<AccessReaderComponent>(ent));
await server.WaitAssertion(() =>
// test empty
Assert.Multiple(() =>
{
var system = entityManager.System<AccessReaderSystem>();
var ent = entityManager.SpawnEntity("TestAccessReader", MapCoordinates.Nullspace);
var reader = new Entity<AccessReaderComponent>(ent, entityManager.GetComponent<AccessReaderComponent>(ent));
// test empty
Assert.Multiple(() =>
{
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "Foo" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "Bar" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.True);
});
// test deny
system.AddDenyTag(reader, "A");
Assert.Multiple(() =>
{
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "Foo" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "Foo" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.True);
});
system.ClearDenyTags(reader);
// test one list
system.TryAddAccess(reader, "A");
Assert.Multiple(() =>
{
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
system.TryClearAccesses(reader);
// test one list - two items
system.TryAddAccess(reader, new HashSet<ProtoId<AccessLevelPrototype>> { "A", "B" });
Assert.Multiple(() =>
{
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
system.TryClearAccesses(reader);
// test two list
var accesses = new List<HashSet<ProtoId<AccessLevelPrototype>>>() {
new HashSet<ProtoId<AccessLevelPrototype>> () { "A" },
new HashSet<ProtoId<AccessLevelPrototype>> () { "B", "C" }
};
system.TryAddAccesses(reader, accesses);
Assert.Multiple(() =>
{
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "C", "B" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "C", "B", "A" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
system.TryClearAccesses(reader);
// test deny list
system.TryAddAccess(reader, new HashSet<ProtoId<AccessLevelPrototype>> { "A" });
system.AddDenyTag(reader, "B");
Assert.Multiple(() =>
{
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.True);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.False);
Assert.That(system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
system.TryClearAccesses(reader);
system.ClearDenyTags(reader);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "Foo" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "Bar" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.True);
});
await pair.CleanReturnAsync();
// test deny
_system.AddDenyTag(reader, "A");
Assert.Multiple(() =>
{
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "Foo" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "Foo" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.True);
});
_system.ClearDenyTags(reader);
// test one list
_system.TryAddAccess(reader, "A");
Assert.Multiple(() =>
{
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
_system.TryClearAccesses(reader);
// test one list - two items
_system.TryAddAccess(reader, new HashSet<ProtoId<AccessLevelPrototype>> { "A", "B" });
Assert.Multiple(() =>
{
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
_system.TryClearAccesses(reader);
// test two list
var accesses = new List<HashSet<ProtoId<AccessLevelPrototype>>>() {
new HashSet<ProtoId<AccessLevelPrototype>> () { "A" },
new HashSet<ProtoId<AccessLevelPrototype>> () { "B", "C" }
};
_system.TryAddAccesses(reader, accesses);
Assert.Multiple(() =>
{
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "C", "B" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "C", "B", "A" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
_system.TryClearAccesses(reader);
// test deny list
_system.TryAddAccess(reader, new HashSet<ProtoId<AccessLevelPrototype>> { "A" });
_system.AddDenyTag(reader, "B");
Assert.Multiple(() =>
{
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A" }, reader), Is.True);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "B" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(new List<ProtoId<AccessLevelPrototype>> { "A", "B" }, reader), Is.False);
Assert.That(_system.AreAccessTagsAllowed(Array.Empty<ProtoId<AccessLevelPrototype>>(), reader), Is.False);
});
_system.TryClearAccesses(reader);
_system.ClearDenyTags(reader);
}
}
@@ -1,4 +1,7 @@
#nullable enable
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Fixtures.Attributes;
using Content.Shared.Actions;
using Content.Shared.Eye;
using Robust.Server.GameObjects;
@@ -7,15 +10,18 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.Actions;
[TestFixture]
public sealed class ActionPvsDetachTest
public sealed class ActionPvsDetachTest : GameTest
{
[SidedDependency(Side.Server)] private readonly SharedActionsSystem _sActionsSys = null!;
[SidedDependency(Side.Client)] private readonly SharedActionsSystem _cActionsSys = null!;
[Test]
public async Task TestActionDetach()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var (server, client) = pair;
var sys = server.System<SharedActionsSystem>();
var cSys = client.System<SharedActionsSystem>();
var pair = Pair;
var (server, client) = (Server, Client);
var sys = _sActionsSys;
var cSys = _cActionsSys;
// Spawn mob that has some actions
EntityUid ent = default;
@@ -60,6 +66,5 @@ public sealed class ActionPvsDetachTest
Assert.That(cSys.GetActions(cEnt).Count(), Is.EqualTo(initActions));
await server.WaitPost(() => server.EntMan.DeleteEntity(map.MapUid));
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,6 @@
#nullable enable
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Actions;
using Content.Shared.Actions.Components;
using Content.Shared.CombatMode;
@@ -11,15 +13,17 @@ namespace Content.IntegrationTests.Tests.Actions;
/// This tests checks that actions properly get added to an entity's actions component..
/// </summary>
[TestFixture]
public sealed class ActionsAddedTest
public sealed class ActionsAddedTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings { Connected = true, DummyTicker = false };
// TODO add magboot test (inventory action)
// TODO add ghost toggle-fov test (client-side action)
[Test]
public async Task TestCombatActionsAdded()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true, DummyTicker = false });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
var sEntMan = server.ResolveDependency<IEntityManager>();
@@ -67,7 +71,5 @@ public sealed class ActionsAddedTest
// required, because integration tests do not respect the [NonSerialized] attribute and will simply events by reference.
Assert.That(ReferenceEquals(sAct.Comp, cAct.Comp), Is.False);
Assert.That(ReferenceEquals(sQuery.GetComponent(sAct).Event, cQuery.GetComponent(cAct).Event), Is.False);
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,7 @@
using System.Collections.Generic;
#nullable enable
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Administration.Logs;
using Content.Server.Database;
using Content.Server.GameTicking;
@@ -12,9 +14,9 @@ namespace Content.IntegrationTests.Tests.Administration.Logs;
[TestFixture]
[TestOf(typeof(AdminLogSystem))]
public sealed class AddTests
public sealed class AddTests : GameTest
{
public static PoolSettings LogTestSettings = new()
public override PoolSettings PoolSettings => new()
{
AdminLogsEnabled = true,
DummyTicker = false,
@@ -24,7 +26,7 @@ public sealed class AddTests
[Test]
public async Task AddAndGetSingleLog()
{
await using var pair = await PoolManager.GetServerClient(LogTestSettings);
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -33,7 +35,7 @@ public sealed class AddTests
var guid = Guid.NewGuid();
await pair.CreateTestMap();
var coordinates = pair.TestMap.GridCoords;
var coordinates = pair.TestMap!.GridCoords;
await server.WaitPost(() =>
{
var entity = sEntities.SpawnEntity(null, coordinates);
@@ -62,14 +64,12 @@ public sealed class AddTests
return false;
});
await pair.CleanReturnAsync();
}
[Test]
public async Task AddAndGetUnformattedLog()
{
await using var pair = await PoolManager.GetServerClient(LogTestSettings);
var pair = Pair;
var server = pair.Server;
var sDatabase = server.ResolveDependency<IServerDbManager>();
@@ -127,15 +127,13 @@ public sealed class AddTests
json.Dispose();
}
await pair.CleanReturnAsync();
}
[Test]
[TestCase(500)]
public async Task BulkAddLogs(int amount)
{
await using var pair = await PoolManager.GetServerClient(LogTestSettings);
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -158,14 +156,12 @@ public sealed class AddTests
var messages = await sAdminLogSystem.CurrentRoundLogs();
return messages.Count >= amount;
});
await pair.CleanReturnAsync();
}
[Test]
public async Task AddPlayerSessionLog()
{
await using var pair = await PoolManager.GetServerClient(LogTestSettings);
var pair = Pair;
var server = pair.Server;
var sPlayers = server.ResolveDependency<IPlayerManager>();
@@ -195,20 +191,91 @@ public sealed class AddTests
Assert.That(logs.First().Players, Does.Contain(playerGuid));
return true;
});
await pair.CleanReturnAsync();
}
[Test]
public async Task DuplicatePlayerDoesNotThrowTest()
{
var pair = Pair;
var server = pair.Server;
var sPlayers = server.ResolveDependency<IPlayerManager>();
var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
var guid = Guid.NewGuid();
await server.WaitPost(() =>
{
var player = sPlayers.Sessions.Single();
sAdminLogSystem.Add(LogType.Unknown, $"{player} {player} test log: {guid}");
});
await PoolManager.WaitUntil(server, async () =>
{
var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
{
Search = guid.ToString()
});
if (logs.Count == 0)
{
return false;
}
return true;
});
}
[Test]
public async Task DuplicatePlayerIdDoesNotThrowTest()
{
var pair = Pair;
var server = pair.Server;
var sPlayers = server.ResolveDependency<IPlayerManager>();
var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
var guid = Guid.NewGuid();
await server.WaitPost(() =>
{
var player = sPlayers.Sessions.Single();
sAdminLogSystem.Add(LogType.Unknown, $"{player:first} {player:second} test log: {guid}");
});
await PoolManager.WaitUntil(server, async () =>
{
var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
{
Search = guid.ToString()
});
if (logs.Count == 0)
{
return false;
}
return true;
});
}
}
public sealed class PreRoundAddTests : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings
{
Dirty = true,
InLobby = true,
AdminLogsEnabled = true
};
[Test]
public async Task PreRoundAddAndGetSingle()
{
var setting = new PoolSettings
{
Dirty = true,
InLobby = true,
AdminLogsEnabled = true
};
await using var pair = await PoolManager.GetServerClient(setting);
var pair = Pair;
var server = pair.Server;
var sDatabase = server.ResolveDependency<IServerDbManager>();
@@ -262,81 +329,6 @@ public sealed class AddTests
json.Dispose();
}
await pair.CleanReturnAsync();
}
[Test]
public async Task DuplicatePlayerDoesNotThrowTest()
{
await using var pair = await PoolManager.GetServerClient(LogTestSettings);
var server = pair.Server;
var sPlayers = server.ResolveDependency<IPlayerManager>();
var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
var guid = Guid.NewGuid();
await server.WaitPost(() =>
{
var player = sPlayers.Sessions.Single();
sAdminLogSystem.Add(LogType.Unknown, $"{player} {player} test log: {guid}");
});
await PoolManager.WaitUntil(server, async () =>
{
var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
{
Search = guid.ToString()
});
if (logs.Count == 0)
{
return false;
}
return true;
});
await pair.CleanReturnAsync();
Assert.Pass();
}
[Test]
public async Task DuplicatePlayerIdDoesNotThrowTest()
{
await using var pair = await PoolManager.GetServerClient(LogTestSettings);
var server = pair.Server;
var sPlayers = server.ResolveDependency<IPlayerManager>();
var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
var guid = Guid.NewGuid();
await server.WaitPost(() =>
{
var player = sPlayers.Sessions.Single();
sAdminLogSystem.Add(LogType.Unknown, $"{player:first} {player:second} test log: {guid}");
});
await PoolManager.WaitUntil(server, async () =>
{
var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
{
Search = guid.ToString()
});
if (logs.Count == 0)
{
return false;
}
return true;
});
await pair.CleanReturnAsync();
Assert.Pass();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Administration.Logs;
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
@@ -7,14 +8,21 @@ namespace Content.IntegrationTests.Tests.Administration.Logs;
[TestFixture]
[TestOf(typeof(AdminLogSystem))]
public sealed class FilterTests
public sealed class FilterTests : GameTest
{
public override PoolSettings PoolSettings => new()
{
AdminLogsEnabled = true,
DummyTicker = false,
Connected = true
};
[Test]
[TestCase(DateOrder.Ascending)]
[TestCase(DateOrder.Descending)]
public async Task Date(DateOrder order)
{
await using var pair = await PoolManager.GetServerClient(AddTests.LogTestSettings);
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -96,6 +104,5 @@ public sealed class FilterTests
return firstFound && secondFound;
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Administration.Logs;
using Content.Server.GameTicking;
using Content.Shared.Database;
@@ -11,12 +12,19 @@ namespace Content.IntegrationTests.Tests.Administration.Logs;
[TestFixture]
[TestOf(typeof(AdminLogSystem))]
public sealed class QueryTests
public sealed class QueryTests : GameTest
{
public override PoolSettings PoolSettings => new()
{
AdminLogsEnabled = true,
DummyTicker = false,
Connected = true
};
[Test]
public async Task QuerySingleLog()
{
await using var pair = await PoolManager.GetServerClient(AddTests.LogTestSettings);
var pair = Pair;
var server = pair.Server;
var sSystems = server.ResolveDependency<IEntitySystemManager>();
@@ -55,7 +63,5 @@ public sealed class QueryTests
return false;
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Atmos.Monitor;
using Robust.Shared.Prototypes;
@@ -5,7 +6,7 @@ namespace Content.IntegrationTests.Tests.Atmos
{
[TestFixture]
[TestOf(typeof(AtmosAlarmThreshold))]
public sealed class AlarmThresholdTest
public sealed class AlarmThresholdTest : GameTest
{
private const string AlarmThresholdTestDummyId = "AlarmThresholdTestDummy";
@@ -26,7 +27,7 @@ namespace Content.IntegrationTests.Tests.Atmos
[Test]
public async Task TestAlarmThreshold()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var prototypeManager = server.ResolveDependency<IPrototypeManager>();
@@ -136,7 +137,6 @@ namespace Content.IntegrationTests.Tests.Atmos
Assert.That(alarmType, Is.EqualTo(AtmosAlarmType.Normal));
}
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Prototypes;
@@ -6,12 +7,12 @@ using Content.Shared.Atmos.Prototypes;
namespace Content.IntegrationTests.Tests.Atmos;
[TestOf(typeof(Atmospherics))]
public sealed class ConstantsTest
public sealed class ConstantsTest : GameTest
{
[Test]
public async Task TotalGasesTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.EntMan;
var protoManager = server.ProtoMan;
@@ -42,7 +43,6 @@ public sealed class ConstantsTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
using Robust.Shared.GameObjects;
@@ -8,7 +9,7 @@ namespace Content.IntegrationTests.Tests.Atmos;
[TestFixture]
[TestOf(typeof(Atmospherics))]
public sealed class GasArrayTest
public sealed class GasArrayTest : GameTest
{
private const string GasTankTestDummyId = "GasTankTestDummy";
@@ -42,7 +43,7 @@ public sealed class GasArrayTest
[Test]
public async Task TestGasArrayDeserialization()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var compFactory = server.ResolveDependency<IComponentFactory>();
@@ -80,6 +81,5 @@ public sealed class GasArrayTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using Content.Server.Atmos;
using Content.IntegrationTests.Fixtures;
using Content.Server.Atmos;
using Content.Server.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Robust.Shared.GameObjects;
@@ -7,12 +8,12 @@ namespace Content.IntegrationTests.Tests.Atmos
{
[TestFixture]
[TestOf(typeof(GasMixture))]
public sealed class GasMixtureTest
public sealed class GasMixtureTest : GameTest
{
[Test]
public async Task TestMerge()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var atmosphereSystem = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<AtmosphereSystem>();
@@ -56,8 +57,6 @@ namespace Content.IntegrationTests.Tests.Atmos
Assert.That(a.GetMoles(Gas.Oxygen), Is.EqualTo(50));
});
});
await pair.CleanReturnAsync();
}
[Test]
@@ -69,7 +68,7 @@ namespace Content.IntegrationTests.Tests.Atmos
[TestCase(Atmospherics.BreathPercentage)]
public async Task RemoveRatio(float ratio)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitAssertion(() =>
@@ -103,8 +102,6 @@ namespace Content.IntegrationTests.Tests.Atmos
Assert.That(a.GetMoles(Gas.Nitrogen), Is.EqualTo(100 - b.GetMoles(Gas.Nitrogen)));
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using Content.Server.Atmos.EntitySystems;
using Content.IntegrationTests.Fixtures;
using Content.Server.Atmos.Piping.EntitySystems;
using Content.Shared.Atmos.Components;
using Robust.Shared.GameObjects;
@@ -6,14 +7,14 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.Atmos;
[TestFixture]
public sealed class GridJoinTest
public sealed class GridJoinTest : GameTest
{
private const string CanisterProtoId = "AirCanister";
[Test]
public async Task TestGridJoinAtmosphere()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.EntMan;
@@ -46,7 +47,5 @@ public sealed class GridJoinTest
// Make sure that the canister is now properly tracked as on-grid
Assert.That(atmosDeviceSystem.IsJoinedOffGrid(canisterEnt), Is.False);
});
await pair.CleanReturnAsync();
}
}
@@ -37,7 +37,7 @@ public sealed class SharedGasSpecificHeatsTest
{
Connected = true,
};
_pair = await PoolManager.GetServerClient(poolSettings);
_pair = await PoolManager.GetServerClient(poolSettings, new NUnitTestContextWrap(TestContext.CurrentContext, TestContext.Out));
_sEntMan = Server.ResolveDependency<IEntityManager>();
_cEntMan = Client.ResolveDependency<IEntityManager>();
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Body;
using Content.Shared.Gibbing;
using Robust.Shared.GameObjects;
@@ -6,7 +7,7 @@ namespace Content.IntegrationTests.Tests.Body;
[TestFixture]
[TestOf(typeof(GibbableOrganSystem))]
public sealed class GibletTest
public sealed class GibletTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -33,7 +34,7 @@ public sealed class GibletTest
[Test]
public async Task GibletCountTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
@@ -54,7 +55,5 @@ public sealed class GibletTest
Assert.That(entityManager.HasComponent<GibbableOrganComponent>(giblet), Is.True);
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Body;
using Content.Shared.Hands.Components;
using Robust.Shared.Containers;
@@ -9,7 +10,7 @@ namespace Content.IntegrationTests.Tests.Body;
[TestFixture]
[TestOf(typeof(HandOrganSystem))]
public sealed class HandOrganTest
public sealed class HandOrganTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -46,7 +47,7 @@ public sealed class HandOrganTest
[Test]
public async Task HandInsertionAndRemovalTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
@@ -81,7 +82,5 @@ public sealed class HandOrganTest
Assert.That(hands.Count, Is.EqualTo(expectedCount));
}
});
await pair.CleanReturnAsync();
}
}
@@ -12,7 +12,7 @@ public sealed partial class BuckleTest
[Test]
public async Task BuckleInteractUnbuckleOther()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.ResolveDependency<IServerEntityManager>();
@@ -55,14 +55,12 @@ public sealed partial class BuckleTest
Assert.That(strap.BuckledEntities, Does.Not.Contain(victim));
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task BuckleInteractBuckleUnbuckleSelf()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.ResolveDependency<IServerEntityManager>();
@@ -102,7 +100,5 @@ public sealed partial class BuckleTest
Assert.That(strap.BuckledEntities, Does.Not.Contain(user));
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Buckle;
using Content.Shared.ActionBlocker;
using Content.Shared.Buckle.Components;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.Buckle
[TestFixture]
[TestOf(typeof(BuckleComponent))]
[TestOf(typeof(StrapComponent))]
public sealed partial class BuckleTest
public sealed partial class BuckleTest : GameTest
{
private const string BuckleDummyId = "BuckleDummy";
private const string StrapDummyId = "StrapDummy";
@@ -50,7 +51,7 @@ namespace Content.IntegrationTests.Tests.Buckle
[Test]
public async Task BuckleUnbuckleCooldownRangeTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -228,14 +229,12 @@ namespace Content.IntegrationTests.Tests.Buckle
Assert.That(strap.BuckledEntities, Is.Empty);
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task BuckledDyingDropItemsTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -298,14 +297,12 @@ namespace Content.IntegrationTests.Tests.Buckle
buckleSystem.Unbuckle(human, human);
Assert.That(buckle.Buckled, Is.False);
});
await pair.CleanReturnAsync();
}
[Test]
public async Task ForceUnbuckleBuckleTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -373,7 +370,6 @@ namespace Content.IntegrationTests.Tests.Buckle
Assert.That(buckle.Buckled);
});
});
await pair.CleanReturnAsync();
}
}
}
+8 -19
View File
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Server.Cargo.Components;
using Content.Server.Cargo.Systems;
using Content.Server.Nutrition.Components;
@@ -17,7 +18,7 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class CargoTest
public sealed class CargoTest : GameTest
{
private static readonly HashSet<ProtoId<CargoProductPrototype>> Ignored =
[
@@ -28,7 +29,7 @@ public sealed class CargoTest
[Test]
public async Task NoCargoOrderArbitrage()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -54,13 +55,11 @@ public sealed class CargoTest
}
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task NoCargoBountyArbitrageTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -94,14 +93,12 @@ public sealed class CargoTest
mapSystem.DeleteMap(mapId);
});
await pair.CleanReturnAsync();
}
[Test]
public async Task NoStaticPriceAndStackPrice()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoManager = server.ProtoMan;
@@ -133,8 +130,6 @@ public sealed class CargoTest
}
}
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -144,7 +139,7 @@ public sealed class CargoTest
[Test]
public async Task NoSliceableBountyArbitrageTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -209,8 +204,6 @@ public sealed class CargoTest
}
mapSystem.DeleteMap(mapId);
});
await pair.CleanReturnAsync();
}
[TestPrototypes]
@@ -233,7 +226,7 @@ public sealed class CargoTest
[Test]
public async Task StackPrice()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entManager = server.ResolveDependency<IEntityManager>();
@@ -245,14 +238,12 @@ public sealed class CargoTest
var price = priceSystem.GetPrice(ent);
Assert.That(price, Is.EqualTo(100.0));
});
await pair.CleanReturnAsync();
}
[Test]
public async Task MobPrice()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var componentFactory = pair.Server.ResolveDependency<IComponentFactory>();
@@ -266,7 +257,5 @@ public sealed class CargoTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Tests.Interaction;
using Content.Shared.Chemistry.Reagent;
using Robust.Shared.Reflection;
@@ -8,12 +9,12 @@ namespace Content.IntegrationTests.Tests.Chemistry;
[TestFixture]
[TestOf(typeof(ReagentData))]
public sealed class ReagentDataTest
public sealed class ReagentDataTest : GameTest
{
[Test]
public async Task ReagentDataIsSerializable()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var reflection = pair.Server.ResolveDependency<IReflectionManager>();
Assert.Multiple(() =>
@@ -24,7 +25,5 @@ public sealed class ReagentDataTest
Assert.That(instance.HasCustomAttribute<SerializableAttribute>(), $"{instance} must have the serializable attribute.");
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Reaction;
@@ -9,7 +10,7 @@ namespace Content.IntegrationTests.Tests.Chemistry;
[TestFixture]
[TestOf(typeof(ChemicalReactionSystem))]
public sealed class SolutionRoundingTest
public sealed class SolutionRoundingTest : GameTest
{
// This test tests two things:
// * A rounding error in reaction code while I was making chloral hydrate
@@ -72,7 +73,7 @@ public sealed class SolutionRoundingTest
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -121,7 +122,5 @@ public sealed class SolutionRoundingTest
Is.EqualTo((FixedPoint2) 30));
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Chemistry.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.FixedPoint;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.Chemistry;
// reactions can change this assumption
[TestFixture]
[TestOf(typeof(SharedSolutionContainerSystem))]
public sealed class SolutionSystemTests
public sealed class SolutionSystemTests : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -53,7 +54,7 @@ public sealed class SolutionSystemTests
[Test]
public async Task TryAddTwoNonReactiveReagent()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
@@ -88,8 +89,6 @@ public sealed class SolutionSystemTests
Assert.That(oil, Is.EqualTo(oilQuantity));
});
});
await pair.CleanReturnAsync();
}
// This test mimics current behavior
@@ -97,7 +96,7 @@ public sealed class SolutionSystemTests
[Test]
public async Task TryAddTooMuchNonReactiveReagent()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -133,15 +132,13 @@ public sealed class SolutionSystemTests
Assert.That(oil, Is.EqualTo(FixedPoint2.Zero));
});
});
await pair.CleanReturnAsync();
}
// Unlike TryAddSolution this adds and two solution without then splits leaving only threshold in original
[Test]
public async Task TryMixAndOverflowTooMuchReagent()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
@@ -188,15 +185,13 @@ public sealed class SolutionSystemTests
Assert.That(oilOverFlow, Is.EqualTo(oilQuantity - oilMix));
});
});
await pair.CleanReturnAsync();
}
// TryMixAndOverflow will fail if Threshold larger than MaxVolume
[Test]
public async Task TryMixAndOverflowTooBigOverflow()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
@@ -226,14 +221,12 @@ public sealed class SolutionSystemTests
.TryMixAndOverflow(solutionEnt.Value, oilAdded, threshold, out _),
Is.False);
});
await pair.CleanReturnAsync();
}
[Test]
public async Task TestTemperatureCalculations()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
const float temp = 100.0f;
@@ -264,7 +257,5 @@ public sealed class SolutionSystemTests
solutionOne.AddSolution(solutionTwo, protoMan);
Assert.That(solutionOne.GetHeatCapacity(protoMan) * solutionOne.Temperature, Is.EqualTo(thermalEnergyOne + thermalEnergyTwo));
});
await pair.CleanReturnAsync();
}
}
@@ -5,6 +5,7 @@ using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Utility;
using Content.Shared.Chemistry.EntitySystems;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.Chemistry
{
[TestFixture]
[TestOf(typeof(ReactionPrototype))]
public sealed class TryAllReactionsTest
public sealed class TryAllReactionsTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -33,7 +34,7 @@ namespace Content.IntegrationTests.Tests.Chemistry
[Description("Tries an individual reaction to see if it succeeds.")]
public async Task TryReaction(string reaction)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
@@ -134,8 +135,6 @@ namespace Content.IntegrationTests.Tests.Chemistry
server.EntMan.DeleteEntity(beaker);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,35 +1,37 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Administration.UI;
using Content.Server.EUI;
using Robust.Server.Player;
namespace Content.IntegrationTests.Tests.Cleanup;
public sealed class EuiManagerTest
public sealed class EuiManagerTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings
{
Connected = true,
Dirty = true
};
[Test]
[Retry(2)]
// Even though we are using the server EUI here, we actually want to see if the client EUIManager crashes
public async Task EuiManagerRecycleWithOpenWindowTest()
{
// Even though we are using the server EUI here, we actually want to see if the client EUIManager crashes
for (var i = 0; i < 2; i++)
var pair = Pair;
var server = pair.Server;
var sPlayerManager = server.ResolveDependency<IPlayerManager>();
var eui = server.ResolveDependency<EuiManager>();
await server.WaitAssertion(() =>
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
Dirty = true
});
var server = pair.Server;
var clientSession = sPlayerManager.Sessions.Single();
var ui = new AdminAnnounceEui();
eui.OpenEui(ui, clientSession);
});
var sPlayerManager = server.ResolveDependency<IPlayerManager>();
var eui = server.ResolveDependency<EuiManager>();
await server.WaitAssertion(() =>
{
var clientSession = sPlayerManager.Sessions.Single();
var ui = new AdminAnnounceEui();
eui.OpenEui(ui, clientSession);
});
await pair.CleanReturnAsync();
}
await RunUntilSynced();
}
}
@@ -1,5 +1,6 @@
using System.Numerics;
using Content.Client.Clickable;
using Content.IntegrationTests.Fixtures;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests
{
[TestFixture]
public sealed class ClickableTest
public sealed class ClickableTest : GameTest
{
private const double DirSouth = 0;
private const double DirNorth = Math.PI;
@@ -44,7 +45,7 @@ namespace Content.IntegrationTests.Tests
[TestCase("ClickTestRotatingCornerInvisibleNoRot", 0.25f, 0.25f, DirSouthEastJustShy, 1, ExpectedResult = true)]
public async Task<bool> Test(string prototype, float clickPosX, float clickPosY, double angle, float scale)
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -66,7 +67,7 @@ namespace Content.IntegrationTests.Tests
});
// Let client sync up.
await pair.RunTicksSync(5);
await RunUntilSynced();
var hit = false;
var clientEnt = clientEntManager.GetEntity(serverEntManager.GetNetEntity(serverEnt));
@@ -89,8 +90,6 @@ namespace Content.IntegrationTests.Tests
serverEntManager.DeleteEntity(serverEnt);
});
await pair.CleanReturnAsync();
return hit;
}
}
@@ -1,8 +1,9 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Cloning;
namespace Content.IntegrationTests.Tests.Cloning;
public sealed class CloningSettingsPrototypeTest
public sealed class CloningSettingsPrototypeTest : GameTest
{
/// <summary>
/// Checks that the components named in every <see cref="CloningSettingsPrototype"/> are valid components known to the server.
@@ -12,7 +13,7 @@ public sealed class CloningSettingsPrototypeTest
[Test]
public async Task ValidatePrototypes()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ProtoMan;
var compFactory = server.EntMan.ComponentFactory;
@@ -40,7 +41,5 @@ public sealed class CloningSettingsPrototypeTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Maps;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
@@ -6,7 +7,7 @@ using Robust.Shared.Console;
namespace Content.IntegrationTests.Tests.Commands;
[TestFixture]
public sealed class ForceMapTest
public sealed class ForceMapTest : GameTest
{
private const string DefaultMapName = "Empty";
private const string BadMapName = "asdf_asd-fa__sdfAsd_f"; // Hopefully no one ever names a map this...
@@ -44,7 +45,7 @@ public sealed class ForceMapTest
[Test]
public async Task TestForceMapCommand()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.EntMan;
@@ -82,7 +83,5 @@ public sealed class ForceMapTest
// Cleanup
configManager.SetCVar(CCVars.GameMap, DefaultMapName);
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
#nullable enable
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Objectives;
using Content.Shared.Mind;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ using Robust.Shared.Player;
namespace Content.IntegrationTests.Tests.Commands;
public sealed class ObjectiveCommandsTest
public sealed class ObjectiveCommandsTest : GameTest
{
private const string ObjectiveProtoId = "MindCommandsTestObjective";
@@ -27,6 +28,11 @@ public sealed class ObjectiveCommandsTest
- type: DieCondition
""";
public override PoolSettings PoolSettings => new ()
{
Connected = false
};
/// <summary>
/// Creates a dummy session, and assigns it a mind, then
/// tests using <c>addobjective</c>, <c>lsobjectives</c>,
@@ -35,7 +41,7 @@ public sealed class ObjectiveCommandsTest
[Test]
public async Task AddListRemoveObjectiveTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.EntMan;
var playerMan = server.ResolveDependency<ISharedPlayerManager>();
@@ -66,7 +72,5 @@ public sealed class ObjectiveCommandsTest
await pair.WaitCommand($"rmobjective {playerSession.Name} 0");
Assert.That(mindComp.Objectives, Is.Empty, "rmobjective failed to remove objective");
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Database;
using Robust.Server.Console;
using Robust.Server.Player;
@@ -8,14 +9,14 @@ namespace Content.IntegrationTests.Tests.Commands
{
[TestFixture]
[TestOf(typeof(PardonCommand))]
public sealed class PardonCommand
public sealed class PardonCommand : GameTest
{
private static readonly TimeSpan MarginOfError = TimeSpan.FromMinutes(1);
[Test]
public async Task PardonTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -148,8 +149,6 @@ namespace Content.IntegrationTests.Tests.Commands
await client.WaitPost(() => netMan.ClientConnect(null!, 0, null!));
await pair.RunTicksSync(5);
Assert.That(sPlayerManager.Sessions, Has.Length.EqualTo(1));
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using Content.Shared.Administration.Systems;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Administration.Systems;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
@@ -14,7 +15,7 @@ namespace Content.IntegrationTests.Tests.Commands
{
[TestFixture]
[TestOf(typeof(RejuvenateSystem))]
public sealed class RejuvenateTest
public sealed class RejuvenateTest : GameTest
{
private static readonly ProtoId<DamageGroupPrototype> TestDamageGroup = "Toxin";
@@ -36,7 +37,7 @@ namespace Content.IntegrationTests.Tests.Commands
[Test]
public async Task RejuvenateDeadTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entManager = server.ResolveDependency<IEntityManager>();
var prototypeManager = server.ResolveDependency<IPrototypeManager>();
@@ -92,7 +93,6 @@ namespace Content.IntegrationTests.Tests.Commands
Assert.That(damSystem.GetTotalDamage((human, damageable)), Is.EqualTo(FixedPoint2.Zero));
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Commands;
using Content.Shared.CCVar;
@@ -10,25 +11,27 @@ namespace Content.IntegrationTests.Tests.Commands
{
[TestFixture]
[TestOf(typeof(RestartRoundNowCommand))]
public sealed class RestartRoundNowTest
public sealed class RestartRoundNowTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings
{
DummyTicker = false,
Dirty = true
};
[Test]
[TestCase(true)]
[TestCase(false)]
public async Task RestartRoundAfterStart(bool lobbyEnabled)
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
DummyTicker = false,
Dirty = true
});
var pair = Pair;
var server = pair.Server;
var configManager = server.ResolveDependency<IConfigurationManager>();
var entityManager = server.ResolveDependency<IEntityManager>();
var gameTicker = entityManager.System<GameTicker>();
await pair.RunTicksSync(5);
await pair.RunUntilSynced();
GameTick tickBeforeRestart = default;
@@ -58,8 +61,7 @@ namespace Content.IntegrationTests.Tests.Commands
Assert.That(tickBeforeRestart, Is.LessThan(tickAfterRestart));
});
await pair.RunTicksSync(5);
await pair.CleanReturnAsync();
await pair.RunUntilSynced();
}
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
@@ -21,7 +22,7 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Commands;
[TestFixture]
public sealed class SuicideCommandTests
public sealed class SuicideCommandTests : GameTest
{
[TestPrototypes]
@@ -57,6 +58,13 @@ public sealed class SuicideCommandTests
private static readonly ProtoId<TagPrototype> CannotSuicideTag = "CannotSuicide";
private static readonly ProtoId<DamageTypePrototype> DamageType = "Slash";
public override PoolSettings PoolSettings => new PoolSettings
{
Connected = true,
Dirty = true,
DummyTicker = false
};
/// <summary>
/// Run the suicide command in the console
/// Should successfully kill the player and ghost them
@@ -64,12 +72,7 @@ public sealed class SuicideCommandTests
[Test]
public async Task TestSuicide()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
Dirty = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var consoleHost = server.ResolveDependency<IConsoleHost>();
var entManager = server.ResolveDependency<IEntityManager>();
@@ -104,8 +107,6 @@ public sealed class SuicideCommandTests
!ghostComp.CanReturnToBody);
});
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -115,12 +116,7 @@ public sealed class SuicideCommandTests
[Test]
public async Task TestSuicideWhileDamaged()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
Dirty = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var consoleHost = server.ResolveDependency<IConsoleHost>();
var entManager = server.ResolveDependency<IEntityManager>();
@@ -166,8 +162,6 @@ public sealed class SuicideCommandTests
Assert.That(damageableSystem.GetTotalDamage(player), Is.EqualTo(lethalDamageThreshold));
});
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -177,12 +171,7 @@ public sealed class SuicideCommandTests
[Test]
public async Task TestSuicideWhenCannotSuicide()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
Dirty = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var consoleHost = server.ResolveDependency<IConsoleHost>();
var entManager = server.ResolveDependency<IEntityManager>();
@@ -217,8 +206,6 @@ public sealed class SuicideCommandTests
!ghostComp.CanReturnToBody);
});
});
await pair.CleanReturnAsync();
}
@@ -228,12 +215,7 @@ public sealed class SuicideCommandTests
[Test]
public async Task TestSuicideByHeldItem()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
Dirty = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var consoleHost = server.ResolveDependency<IConsoleHost>();
var entManager = server.ResolveDependency<IEntityManager>();
@@ -292,8 +274,6 @@ public sealed class SuicideCommandTests
Assert.That(damageableSystem.GetAllDamage((player, damageableComp)).DamageDict["Slash"], Is.EqualTo(lethalDamageThreshold));
});
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -303,12 +283,7 @@ public sealed class SuicideCommandTests
[Test]
public async Task TestSuicideByHeldItemSpreadDamage()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
Dirty = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var consoleHost = server.ResolveDependency<IConsoleHost>();
var entManager = server.ResolveDependency<IEntityManager>();
@@ -367,7 +342,5 @@ public sealed class SuicideCommandTests
Assert.That(damageableSystem.GetAllDamage((player, damageableComp)).DamageDict["Slash"], Is.EqualTo(lethalDamageThreshold / 2));
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.IO;
using Content.IntegrationTests.Fixtures;
using Content.Server.Entry;
using Robust.Shared.Configuration;
using Robust.Shared.ContentPack;
@@ -7,12 +8,12 @@ using Robust.Shared.ContentPack;
namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class ConfigPresetTests
public sealed class ConfigPresetTests : GameTest
{
[Test]
public async Task TestLoadAll()
{
var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var resources = server.ResolveDependency<IResourceManager>();
@@ -70,7 +71,5 @@ public sealed class ConfigPresetTests
Assert.Fail($"CVar {name} was not reset to its original value.");
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Text;
using Content.IntegrationTests.Fixtures;
using Content.Server.Construction.Completions;
using Content.Shared.Construction;
using Content.Shared.Construction.Prototypes;
@@ -7,7 +8,7 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Construction
{
[TestFixture]
public sealed class ConstructionActionValid
public sealed class ConstructionActionValid : GameTest
{
private bool IsValid(IGraphAction action, IPrototypeManager protoMan, out string prototype)
{
@@ -47,7 +48,7 @@ namespace Content.IntegrationTests.Tests.Construction
[Test]
public async Task ConstructionGraphSpawnPrototypeValid()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -84,13 +85,12 @@ namespace Content.IntegrationTests.Tests.Construction
});
Assert.That(valid, Is.True, $"One or more SpawnPrototype actions specified invalid entity prototypes!\n{message}");
await pair.CleanReturnAsync();
}
[Test]
public async Task ConstructionGraphEdgeValid()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -118,7 +118,6 @@ namespace Content.IntegrationTests.Tests.Construction
});
Assert.That(valid, Is.True, $"One or more edges specified invalid node targets!\n{message}");
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Utility;
using Content.Server.Construction.Components;
using Content.Shared.Construction.Prototypes;
@@ -7,7 +8,7 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Construction
{
[TestFixture]
public sealed class ConstructionPrototypeTest
public sealed class ConstructionPrototypeTest : GameTest
{
// discount linter for construction graphs
// TODO: Create serialization validators for these?
@@ -25,7 +26,7 @@ namespace Content.IntegrationTests.Tests.Construction
[Description("Tests that a given entity specifies a valid node for construction, and optionally a valid one for deconstruction.")]
public async Task ConstructionComponentValid(string protoKey)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -49,8 +50,6 @@ namespace Content.IntegrationTests.Tests.Construction
$"Invalid deconstruction node \"{target}\" on graph \"{graph.ID}\" for construction entity \"{proto.ID}\"!");
}
});
await pair.CleanReturnAsync();
}
[Test]
@@ -59,7 +58,7 @@ namespace Content.IntegrationTests.Tests.Construction
[Description("Tests that a given construction prototype has a valid starting and target node, and a valid path between them.")]
public async Task ConstructionFormsValidGraph(string protoKey)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -95,7 +94,6 @@ namespace Content.IntegrationTests.Tests.Construction
$"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) specified an entity prototype ({next.Entity}) without a ConstructionComponent.");
#pragma warning restore NUnit2045
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Server.Storage.EntitySystems;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ using Robust.Shared.Maths;
namespace Content.IntegrationTests.Tests
{
public sealed class ContainerOcclusionTest
public sealed class ContainerOcclusionTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -34,7 +35,7 @@ namespace Content.IntegrationTests.Tests
[Test]
public async Task TestA()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -69,14 +70,12 @@ namespace Content.IntegrationTests.Tests
Assert.That(light.ContainerOccluded);
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task TestB()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -112,14 +111,12 @@ namespace Content.IntegrationTests.Tests
Assert.That(light.ContainerOccluded, Is.False);
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task TestAb()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -157,8 +154,6 @@ namespace Content.IntegrationTests.Tests
Assert.That(light.ContainerOccluded);
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Contraband;
using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;
@@ -5,12 +6,12 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class ContrabandTest
public sealed class ContrabandTest : GameTest
{
[Test]
public async Task EntityShowDepartmentsAndJobs()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var client = pair.Client;
var protoMan = client.ResolveDependency<IPrototypeManager>();
var componentFactory = client.ResolveDependency<IComponentFactory>();
@@ -41,7 +42,5 @@ public sealed class ContrabandTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.Damageable
[TestFixture]
[TestOf(typeof(DamageableComponent))]
[TestOf(typeof(DamageableSystem))]
public sealed class DamageableTest
public sealed class DamageableTest : GameTest
{
private const string TestDamageableEntityId = "TestDamageableEntityId";
private const string TestGroup1 = "TestGroup1";
@@ -95,7 +96,7 @@ namespace Content.IntegrationTests.Tests.Damageable
[Test]
public async Task TestDamageableComponents()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntityManager = server.ResolveDependency<IEntityManager>();
@@ -254,7 +255,6 @@ namespace Content.IntegrationTests.Tests.Damageable
sDamageableSystem.ChangeDamage(uid, new DamageSpecifier(group3, -100));
Assert.That(sDamageableSystem.GetTotalDamage(ent), Is.EqualTo(FixedPoint2.Zero));
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,10 +1,11 @@
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Utility;
using Content.Shared.Alert;
using Content.Shared.Mobs.Components;
namespace Content.IntegrationTests.Tests.Damageable;
public sealed class MobThresholdsTest
public sealed class MobThresholdsTest : GameTest
{
private static string[] _entitiesWithThresholds = GameDataScrounger.EntitiesWithComponent("MobThresholds");
@@ -14,7 +15,7 @@ public sealed class MobThresholdsTest
[Description("Ensures every entity with mob thresholds has valid mob state configuration corresponding to some AlertPrototype.")]
public async Task ValidateMobThresholds(string protoKey)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ProtoMan;
@@ -33,7 +34,5 @@ public sealed class MobThresholdsTest
Assert.That(alertStates, Does.Contain(state), $"{proto.ID} does not have an alert state for mob state {state}");
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,11 +1,12 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Utility;
using Content.Shared.Damage.Components;
using Content.Shared.FixedPoint;
namespace Content.IntegrationTests.Tests.Damageable;
public sealed class StaminaComponentTest
public sealed class StaminaComponentTest : GameTest
{
private static string[] _entitiesWithStamina = GameDataScrounger.EntitiesWithComponent("Stamina");
@@ -15,7 +16,7 @@ public sealed class StaminaComponentTest
[Description("Ensures every entity with Stamina has a valid stamina configuration.")]
public async Task ValidateStamina(string protoKey)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ProtoMan;
@@ -46,7 +47,5 @@ public sealed class StaminaComponentTest
#pragma warning restore NUnit2041
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Clothing.Components;
using Content.Shared.Clothing.EntitySystems;
using Content.Shared.Inventory;
@@ -7,14 +8,14 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests
{
[TestFixture]
public sealed class DeleteInventoryTest
public sealed class DeleteInventoryTest : GameTest
{
// Test that when deleting an entity with an InventoryComponent,
// any equipped items also get deleted.
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
var entMgr = server.ResolveDependency<IEntityManager>();
@@ -44,7 +45,6 @@ namespace Content.IntegrationTests.Tests
// Assert that child item was also deleted.
Assert.That(item.Deleted, Is.True);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
@@ -13,12 +14,12 @@ namespace Content.IntegrationTests.Tests.Destructible
[TestFixture]
[TestOf(typeof(DamageGroupTrigger))]
[TestOf(typeof(AndTrigger))]
public sealed class DestructibleDamageGroupTest
public sealed class DestructibleDamageGroupTest : GameTest
{
[Test]
public async Task AndTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -193,7 +194,6 @@ namespace Content.IntegrationTests.Tests.Destructible
// No new thresholds reached as triggers once is set to true and it already triggered before
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Damage;
using Content.Shared.Damage.Components;
using Content.Shared.Damage.Prototypes;
@@ -12,12 +13,12 @@ namespace Content.IntegrationTests.Tests.Destructible
[TestFixture]
[TestOf(typeof(DamageTypeTrigger))]
[TestOf(typeof(AndTrigger))]
public sealed class DestructibleDamageTypeTest
public sealed class DestructibleDamageTypeTest : GameTest
{
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -188,7 +189,6 @@ namespace Content.IntegrationTests.Tests.Destructible
// No new thresholds reached as triggers once is set to true and it already triggered before
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Destructible.Thresholds.Behaviors;
using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes;
@@ -10,12 +11,12 @@ using static Content.IntegrationTests.Tests.Destructible.DestructibleTestPrototy
namespace Content.IntegrationTests.Tests.Destructible
{
public sealed class DestructibleDestructionTest
public sealed class DestructibleDestructionTest : GameTest
{
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -89,7 +90,6 @@ namespace Content.IntegrationTests.Tests.Destructible
Assert.That(found, Is.True, $"Unable to find {SpawnedEntityId} nearby for destructible test; found {entitiesInRange.Count} entities.");
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Destructible;
using Content.Server.Destructible.Thresholds;
using Content.Server.Destructible.Thresholds.Behaviors;
@@ -19,12 +20,12 @@ namespace Content.IntegrationTests.Tests.Destructible
[TestFixture]
[TestOf(typeof(DestructibleComponent))]
[TestOf(typeof(DamageThreshold))]
public sealed class DestructibleThresholdActivationTest
public sealed class DestructibleThresholdActivationTest : GameTest
{
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntityManager = server.ResolveDependency<IEntityManager>();
@@ -289,7 +290,6 @@ namespace Content.IntegrationTests.Tests.Destructible
Assert.That(sTestThresholdListenerSystem.ThresholdsReached, Is.Empty);
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Utility;
using Content.Server.DeviceLinking.Systems;
using Content.Shared.DeviceLinking;
@@ -7,7 +8,7 @@ using Robust.Shared.Maths;
namespace Content.IntegrationTests.Tests.DeviceLinking;
public sealed class DeviceLinkingTest
public sealed class DeviceLinkingTest : GameTest
{
private const string PortTesterProtoId = "DeviceLinkingSinkPortTester";
@@ -29,7 +30,7 @@ public sealed class DeviceLinkingTest
[Description("Ensures all devices that can sink signals will not cause exceptions when signaled.")]
public async Task DeviceLinkSinkAllPortsTest(string protoKey)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ProtoMan;
var compFact = server.ResolveDependency<IComponentFactory>();
@@ -77,7 +78,5 @@ public sealed class DeviceLinkingTest
}
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Server.DeviceNetwork.Components;
using Content.Server.DeviceNetwork.Systems;
using Content.Shared.DeviceNetwork;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.DeviceNetwork
[TestOf(typeof(DeviceNetworkComponent))]
[TestOf(typeof(WiredNetworkComponent))]
[TestOf(typeof(WirelessNetworkComponent))]
public sealed class DeviceNetworkTest
public sealed class DeviceNetworkTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -50,7 +51,7 @@ namespace Content.IntegrationTests.Tests.DeviceNetwork
[Test]
public async Task NetworkDeviceSendAndReceive()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var mapManager = server.ResolveDependency<IMapManager>();
@@ -104,13 +105,12 @@ namespace Content.IntegrationTests.Tests.DeviceNetwork
{
Assert.That(payload, Is.EquivalentTo(deviceNetTestSystem.LastPayload));
});
await pair.CleanReturnAsync();
}
[Test]
public async Task WirelessNetworkDeviceSendAndReceive()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
var coordinates = testMap.GridCoords;
@@ -188,14 +188,12 @@ namespace Content.IntegrationTests.Tests.DeviceNetwork
{
Assert.That(payload, Is.Not.EqualTo(deviceNetTestSystem.LastPayload).AsCollection);
});
await pair.CleanReturnAsync();
}
[Test]
public async Task WiredNetworkDeviceSendAndReceive()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
var coordinates = testMap.GridCoords;
@@ -271,8 +269,6 @@ namespace Content.IntegrationTests.Tests.DeviceNetwork
{
Assert.That(payload, Is.EqualTo(deviceNetTestSystem.LastPayload).AsCollection);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,6 +1,7 @@
#nullable enable annotations
using System.Linq;
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Server.Disposal.Unit;
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
@@ -16,7 +17,7 @@ namespace Content.IntegrationTests.Tests.Disposal
[TestOf(typeof(DisposalHolderComponent))]
[TestOf(typeof(DisposalEntryComponent))]
[TestOf(typeof(DisposalUnitComponent))]
public sealed class DisposalUnitTest
public sealed class DisposalUnitTest : GameTest
{
[Reflect(false)]
private sealed class DisposalUnitTestSystem : EntitySystem
@@ -145,7 +146,7 @@ namespace Content.IntegrationTests.Tests.Disposal
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -240,8 +241,6 @@ namespace Content.IntegrationTests.Tests.Disposal
// Re-pressurizing
Flush(disposalUnit, unitComponent, false, disposalSystem);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using Content.IntegrationTests.Fixtures;
using Content.Shared.DoAfter;
using Content.Shared.Interaction;
using Robust.Shared.GameObjects;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.DoAfter
{
[TestFixture]
[TestOf(typeof(DoAfterComponent))]
public sealed partial class DoAfterServerTest
public sealed partial class DoAfterServerTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -35,7 +36,7 @@ namespace Content.IntegrationTests.Tests.DoAfter
[Test]
public async Task TestSerializable()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
var refMan = server.ResolveDependency<IReflectionManager>();
@@ -55,14 +56,12 @@ namespace Content.IntegrationTests.Tests.DoAfter
}
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task TestFinished()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
@@ -84,14 +83,12 @@ namespace Content.IntegrationTests.Tests.DoAfter
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 pair = Pair;
var server = pair.Server;
var entityManager = server.EntMan;
var timing = server.ResolveDependency<IGameTiming>();
@@ -113,8 +110,6 @@ namespace Content.IntegrationTests.Tests.DoAfter
await server.WaitRunTicks(3);
Assert.That(ev.Cancelled);
await pair.CleanReturnAsync();
}
/// <summary>
@@ -124,7 +119,7 @@ namespace Content.IntegrationTests.Tests.DoAfter
[Test]
public async Task TestGetInteractingEntities()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.EntMan;
var timing = server.ResolveDependency<IGameTiming>();
@@ -175,8 +170,6 @@ namespace Content.IntegrationTests.Tests.DoAfter
entityManager.DeleteEntity(target);
entityManager.DeleteEntity(target2);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Server.Doors.Systems;
using Content.Shared.Doors.Components;
using Robust.Shared.GameObjects;
@@ -11,7 +12,7 @@ namespace Content.IntegrationTests.Tests.Doors
{
[TestFixture]
[TestOf(typeof(AirlockComponent))]
public sealed class AirlockTest
public sealed class AirlockTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -54,7 +55,7 @@ namespace Content.IntegrationTests.Tests.Doors
[Test]
public async Task OpenCloseDestroyTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
@@ -104,16 +105,12 @@ namespace Content.IntegrationTests.Tests.Doors
entityManager.DeleteEntity(airlock);
});
});
server.RunTicks(5);
await pair.CleanReturnAsync();
}
[Test]
public async Task AirlockBlockTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
@@ -179,7 +176,6 @@ namespace Content.IntegrationTests.Tests.Doors
{
Assert.That(Math.Abs(xformSystem.GetWorldPosition(airlockPhysicsDummy).X - 1), Is.GreaterThan(0.01f));
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,5 +1,6 @@
#nullable enable
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Robust.Client.GameObjects;
using Robust.Client.ResourceManagement;
using Robust.Shared.Prototypes;
@@ -7,12 +8,12 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests
{
[TestFixture]
public sealed class DummyIconTest
public sealed class DummyIconTest : GameTest
{
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var client = pair.Client;
var prototypeManager = client.ResolveDependency<IPrototypeManager>();
var resourceCache = client.ResolveDependency<IResourceCache>();
@@ -32,7 +33,6 @@ namespace Content.IntegrationTests.Tests
proto.ID);
}
});
await pair.CleanReturnAsync();
}
}
}
+23 -25
View File
@@ -2,6 +2,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Fixtures.Attributes;
using Robust.Shared;
using Robust.Shared.Audio.Components;
using Robust.Shared.Configuration;
@@ -16,17 +18,28 @@ namespace Content.IntegrationTests.Tests
{
[TestFixture]
[TestOf(typeof(EntityUid))]
public sealed class EntityTest
public sealed class EntityTest : GameTest
{
private static readonly ProtoId<EntityCategoryPrototype> SpawnerCategory = "Spawner";
public override PoolSettings PoolSettings => new()
{
Connected = true,
Dirty = true
};
public static PoolSettings Disconnected => new()
{
Dirty = true,
};
[Test]
[PairConfig(nameof(Disconnected))]
public async Task SpawnAndDeleteAllEntitiesOnDifferentMaps()
{
// This test dirties the pair as it simply deletes ALL entities when done. Overhead of restarting the round
// is minimal relative to the rest of the test.
var settings = new PoolSettings { Dirty = true };
await using var pair = await PoolManager.GetServerClient(settings);
var pair = Pair;
var server = pair.Server;
var entityMan = server.ResolveDependency<IEntityManager>();
@@ -79,17 +92,14 @@ namespace Content.IntegrationTests.Tests
Assert.That(entityMan.EntityCount, Is.Zero);
});
await pair.CleanReturnAsync();
}
[Test]
[PairConfig(nameof(Disconnected))]
public async Task SpawnAndDeleteAllEntitiesInTheSameSpot()
{
// This test dirties the pair as it simply deletes ALL entities when done. Overhead of restarting the round
// is minimal relative to the rest of the test.
var settings = new PoolSettings { Dirty = true };
await using var pair = await PoolManager.GetServerClient(settings);
var pair = Pair;
Assert.That(pair.Client.Session, Is.Null);
var server = pair.Server;
var map = await pair.CreateTestMap();
@@ -134,8 +144,6 @@ namespace Content.IntegrationTests.Tests
Assert.That(entityMan.EntityCount, Is.Zero);
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -145,10 +153,7 @@ namespace Content.IntegrationTests.Tests
[Test]
public async Task SpawnAndDirtyAllEntities()
{
// This test dirties the pair as it simply deletes ALL entities when done. Overhead of restarting the round
// is minimal relative to the rest of the test.
var settings = new PoolSettings { Connected = true, Dirty = true };
await using var pair = await PoolManager.GetServerClient(settings);
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -182,7 +187,7 @@ namespace Content.IntegrationTests.Tests
}
});
await pair.RunTicksSync(15);
await pair.RunUntilSynced();
// Make sure the client actually received the entities
// 500 is completely arbitrary. Note that the client & sever entity counts aren't expected to match.
@@ -209,8 +214,6 @@ namespace Content.IntegrationTests.Tests
Assert.That(sEntMan.EntityCount, Is.Zero);
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -230,8 +233,7 @@ namespace Content.IntegrationTests.Tests
[Test]
public async Task SpawnAndDeleteEntityCountTest()
{
var settings = new PoolSettings { Connected = true, Dirty = true };
await using var pair = await PoolManager.GetServerClient(settings);
var pair = Pair;
var mapSys = pair.Server.System<SharedMapSystem>();
var server = pair.Server;
var client = pair.Client;
@@ -317,8 +319,6 @@ namespace Content.IntegrationTests.Tests
BuildDiffString(clientEntities, Entities(client.EntMan), client.EntMan));
}
});
await pair.CleanReturnAsync();
}
private static string BuildDiffString(IEnumerable<EntityUid> oldEnts, IEnumerable<EntityUid> newEnts, IEntityManager entMan)
@@ -392,7 +392,7 @@ namespace Content.IntegrationTests.Tests
"ActivatableUI", // Requires enum key
};
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
var componentFactory = server.ResolveDependency<IComponentFactory>();
@@ -445,8 +445,6 @@ namespace Content.IntegrationTests.Tests
}
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,9 +1,10 @@
using Content.IntegrationTests.Fixtures;
using Content.IntegrationTests.Utility;
using Content.Shared.Explosion;
namespace Content.IntegrationTests.Tests.Explosion;
public sealed class ExplosionPrototypeTest
public sealed class ExplosionPrototypeTest : GameTest
{
private static string[] _explosionKinds = GameDataScrounger.PrototypesOfKind<ExplosionPrototype>();
@@ -13,7 +14,7 @@ public sealed class ExplosionPrototypeTest
[Description("Ensures various properties of ExplosionPrototype are correctly configured.")]
public async Task Validate(string protoKey)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ProtoMan;
@@ -40,7 +41,5 @@ public sealed class ExplosionPrototypeTest
Assert.That(proto.IntensityPerState, Is.Positive);
Assert.That(proto.FireStates, Is.Positive);
}
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Chemistry;
using Content.Shared.Chemistry.Components;
using Content.Shared.Prototypes;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests;
/// Tests to see if any entity prototypes specify solution fill level sprites that don't exist.
/// </summary>
[TestFixture]
public sealed class FillLevelSpriteTest
public sealed class FillLevelSpriteTest : GameTest
{
private static readonly string[] HandStateNames = ["left", "right"];
private static readonly string[] EquipStateNames = ["back", "suitstorage"];
@@ -20,7 +21,7 @@ public sealed class FillLevelSpriteTest
[Test]
public async Task FillLevelSpritesExist()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var client = pair.Client;
var protoMan = client.ResolveDependency<IPrototypeManager>();
var componentFactory = client.ResolveDependency<IComponentFactory>();
@@ -101,7 +102,5 @@ public sealed class FillLevelSpriteTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -7,12 +7,13 @@ using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
namespace Content.IntegrationTests.Tests.Fluids;
[TestFixture]
[TestOf(typeof(AbsorbentComponent))]
public sealed class AbsorbentTest
public sealed class AbsorbentTest : GameTest
{
private const string UserDummyId = "UserDummy";
private const string AbsorbentDummyId = "AbsorbentDummy";
@@ -73,7 +74,7 @@ public sealed class AbsorbentTest
[TestCaseSource(nameof(TestCasesToRun))]
public async Task AbsorbentOnRefillableTest(TestSolutionCase testCase)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -123,15 +124,12 @@ public sealed class AbsorbentTest
Assert.That(VolumeOfPrototypeInComposition(refillableComposition, NonEvaporablePrototypeId), Is.EqualTo(testCase.ExpectedRefillableSolution.VolumeOfNonEvaporable));
});
});
await pair.RunTicksSync(5);
await pair.CleanReturnAsync();
}
[TestCaseSource(nameof(TestCasesToRunOnSmallRefillable))]
public async Task AbsorbentOnSmallRefillableTest(TestSolutionCase testCase)
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -180,9 +178,6 @@ public sealed class AbsorbentTest
Assert.That(VolumeOfPrototypeInComposition(refillableComposition, NonEvaporablePrototypeId), Is.EqualTo(testCase.ExpectedRefillableSolution.VolumeOfNonEvaporable));
});
});
await pair.RunTicksSync(5);
await pair.CleanReturnAsync();
}
private static FixedPoint2 VolumeOfPrototypeInComposition(Dictionary<string, FixedPoint2> composition, string prototypeId)
@@ -1,4 +1,5 @@
#nullable enable
using Content.IntegrationTests.Fixtures;
using Content.Server.Fluids.EntitySystems;
using Content.Server.Spreader;
using Content.Shared.Chemistry.Components;
@@ -14,7 +15,7 @@ namespace Content.IntegrationTests.Tests.Fluids;
[TestFixture]
[TestOf(typeof(SpreaderSystem))]
public sealed class FluidSpill
public sealed class FluidSpill : GameTest
{
private static PuddleComponent? GetPuddle(IEntityManager entityManager, Entity<MapGridComponent> mapGrid, Vector2i pos)
{
@@ -36,7 +37,7 @@ public sealed class FluidSpill
[Test]
public async Task SpillCorner()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var mapManager = server.ResolveDependency<IMapManager>();
var entityManager = server.ResolveDependency<IEntityManager>();
@@ -110,7 +111,5 @@ public sealed class FluidSpill
}
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Fluids.EntitySystems;
using Content.Shared.Chemistry.Components;
using Content.Shared.Coordinates;
@@ -10,12 +11,12 @@ namespace Content.IntegrationTests.Tests.Fluids
{
[TestFixture]
[TestOf(typeof(PuddleComponent))]
public sealed class PuddleTest
public sealed class PuddleTest : GameTest
{
[Test]
public async Task TilePuddleTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -32,15 +33,12 @@ namespace Content.IntegrationTests.Tests.Fluids
Assert.That(spillSystem.TrySpillAt(coordinates, solution, out _), Is.True);
});
await pair.RunTicksSync(5);
await pair.CleanReturnAsync();
}
[Test]
public async Task SpaceNoPuddleTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -69,8 +67,6 @@ namespace Content.IntegrationTests.Tests.Fluids
Assert.That(spillSystem.TrySpillAt(coordinates, solution, out _), Is.False);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.GameTicking;
using Content.Shared.Follower;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ using Robust.Shared.Map;
namespace Content.IntegrationTests.Tests;
[TestFixture, TestOf(typeof(FollowerSystem))]
public sealed class FollowerSystemTest
public sealed class FollowerSystemTest : GameTest
{
/// <summary>
/// This test ensures that deleting a map while an entity follows another doesn't throw any exceptions.
@@ -15,7 +16,7 @@ public sealed class FollowerSystemTest
[Test]
public async Task FollowerMapDeleteTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.ResolveDependency<IEntityManager>();
@@ -44,6 +45,5 @@ public sealed class FollowerSystemTest
entMan.DeleteEntity(mapSys.GetMap(map));
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
#nullable enable
using Content.IntegrationTests.Fixtures;
using Content.Server.Cuffs;
using Content.Shared.Cuffs.Components;
using Content.Shared.Hands.Components;
@@ -10,7 +11,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.ActionBlocking
[TestFixture]
[TestOf(typeof(CuffableComponent))]
[TestOf(typeof(HandcuffComponent))]
public sealed class HandCuffTest
public sealed class HandCuffTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -40,7 +41,7 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.ActionBlocking
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
EntityUid human;
@@ -98,8 +99,6 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.ActionBlocking
cuffableSys.TryAddNewCuffs(human, human, secondCuffs, cuffed);
Assert.That(cuffed.CuffedHandCount, Is.EqualTo(4), "Player doesn't have correct amount of hands cuffed");
});
await pair.CleanReturnAsync();
}
private static void AddHand(NetEntity to, IServerConsoleHost host)
@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Content.IntegrationTests.Fixtures;
using Robust.Shared.ContentPack;
using Robust.Shared.GameObjects;
using Robust.Shared.Utility;
@@ -11,12 +12,12 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components
{
[TestFixture]
[TestOf(typeof(Server.Entry.IgnoredComponents))]
public sealed class EntityPrototypeComponentsTest
public sealed class EntityPrototypeComponentsTest : GameTest
{
[Test]
public async Task PrototypesHaveKnownComponents()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -100,7 +101,6 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components
if (unknownComponentsClient.Count + unknownComponentsServer.Count + doubleIgnoredComponents.Count == 0)
{
await pair.CleanReturnAsync();
Assert.Pass($"Validated {entitiesValidated} entities with {componentsValidated} components in {paths.Length} files.");
return;
}
@@ -131,11 +131,11 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components
[Test]
public async Task IgnoredComponentsExistInTheCorrectPlaces()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
var serverComponents = server.ResolveDependency<IComponentFactory>();
var ignoredServerNames = Server.Entry.IgnoredComponents.List;
var ignoredServerNames = Content.Server.Entry.IgnoredComponents.List;
var clientComponents = client.ResolveDependency<IComponentFactory>();
var failureMessages = "";
@@ -151,7 +151,6 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components
}
}
Assert.That(failureMessages, Is.Empty);
await pair.CleanReturnAsync();
}
}
}
@@ -1,6 +1,7 @@
using System.Linq;
using Content.Client.UserInterface.Systems.Alerts.Controls;
using Content.Client.UserInterface.Systems.Alerts.Widgets;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Alert;
using Robust.Client.UserInterface;
using Robust.Server.Player;
@@ -10,16 +11,18 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs
{
[TestFixture]
[TestOf(typeof(AlertsComponent))]
public sealed class AlertsComponentTests
public sealed class AlertsComponentTests : GameTest
{
public override PoolSettings PoolSettings => new()
{
Connected = true,
DummyTicker = false
};
[Test]
public async Task AlertsTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -107,8 +110,6 @@ namespace Content.IntegrationTests.Tests.GameObjects.Components.Mobs
var expectedIDs = new[] { "HumanHealth", "Debug2" };
Assert.That(alertIDs, Is.SupersetOf(expectedIDs));
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,6 +1,7 @@
#nullable enable
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Antag;
using Content.Server.Antag.Components;
using Content.Server.GameTicking;
@@ -14,17 +15,19 @@ namespace Content.IntegrationTests.Tests.GameRules;
// Once upon a time, players in the lobby weren't ever considered eligible for antag roles.
// Lets not let that happen again.
[TestFixture]
public sealed class AntagPreferenceTest
public sealed class AntagPreferenceTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings
{
DummyTicker = false,
Connected = true,
InLobby = true
};
[Test]
public async Task TestLobbyPlayersValid()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
DummyTicker = false,
Connected = true,
InLobby = true
});
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -71,6 +74,5 @@ public sealed class AntagPreferenceTest
Assert.That(pool.Count, Is.EqualTo(0));
await server.WaitPost(() => server.EntMan.DeleteEntity(uid));
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
#nullable enable
using Content.IntegrationTests.Fixtures;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Presets;
using Content.Shared.CCVar;
@@ -9,7 +10,7 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.GameRules;
[TestFixture]
public sealed class FailAndStartPresetTest
public sealed class FailAndStartPresetTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -52,19 +53,21 @@ public sealed class FailAndStartPresetTest
- type: TestRule
";
public override PoolSettings PoolSettings => new()
{
Dirty = true,
DummyTicker = false,
Connected = true,
InLobby = true
};
/// <summary>
/// Test that a nuke ops gamemode can start after failing to start once.
/// </summary>
[Test]
public async Task FailAndStartTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
DummyTicker = false,
Connected = true,
InLobby = true
});
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -115,7 +118,6 @@ public sealed class FailAndStartPresetTest
server.CfgMan.SetCVar(CCVars.GameLobbyFallbackEnabled, true);
server.CfgMan.SetCVar(CCVars.GameLobbyDefaultPreset, "secret");
server.System<TestRuleSystem>().Run = false;
await pair.CleanReturnAsync();
}
}
@@ -1,6 +1,7 @@
#nullable enable
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Body.Components;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Presets;
@@ -30,24 +31,27 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.GameRules;
[TestFixture]
public sealed class NukeOpsTest
public sealed class NukeOpsTest : GameTest
{
private static readonly ProtoId<NpcFactionPrototype> SyndicateFaction = "Syndicate";
private static readonly ProtoId<NpcFactionPrototype> NanotrasenFaction = "NanoTrasen";
public override PoolSettings PoolSettings => new()
{
Dirty = true,
DummyTicker = false,
Connected = true,
InLobby = true
};
/// <summary>
/// Check that a nuke ops game mode can start without issue. I.e., that the nuke station and such all get loaded.
/// </summary>
[Test]
public async Task TryStopNukeOpsFromConstantlyFailing()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
DummyTicker = false,
Connected = true,
InLobby = true
});
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
@@ -260,6 +264,5 @@ public sealed class NukeOpsTest
});
ticker.SetGamePreset((GamePresetPrototype?) null);
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.GameTicking.Rules.Components;
@@ -9,12 +10,14 @@ namespace Content.IntegrationTests.Tests.GameRules
{
[TestFixture]
[TestOf(typeof(MaxTimeRestartRuleSystem))]
public sealed class RuleMaxTimeRestartTest
public sealed class RuleMaxTimeRestartTest : GameTest
{
public override PoolSettings PoolSettings => new() { InLobby = true };
[Test]
public async Task RestartTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { InLobby = true });
var pair = Pair;
var server = pair.Server;
Assert.That(server.EntMan.Count<GameRuleComponent>(), Is.Zero);
@@ -64,8 +67,6 @@ namespace Content.IntegrationTests.Tests.GameRules
{
Assert.That(sGameTicker.RunLevel, Is.EqualTo(GameRunLevel.PreRoundLobby));
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,19 +1,22 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.GameTicking;
using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.GameRules;
[TestFixture]
public sealed class SecretStartsTest
public sealed class SecretStartsTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings { Dirty = true };
/// <summary>
/// Tests that when secret is started, all of the game rules it successfully adds are also started.
/// </summary>
[Test]
public async Task TestSecretStarts()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Dirty = true });
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
@@ -38,7 +41,5 @@ public sealed class SecretStartsTest
// End all rules
gameTicker.ClearGameRules();
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.GameTicking;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
@@ -7,19 +8,21 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.GameRules;
[TestFixture]
public sealed class StartEndGameRulesTest
public sealed class StartEndGameRulesTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings
{
Dirty = true,
DummyTicker = false
};
/// <summary>
/// Tests that all game rules can be added/started/ended at the same time without exceptions.
/// </summary>
[Test]
public async Task TestAllConcurrent()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
var gameTicker = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<GameTicker>();
@@ -47,7 +50,5 @@ public sealed class StartEndGameRulesTest
gameTicker.ClearGameRules();
Assert.That(!gameTicker.GetAddedGameRules().Any());
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Antag.Components;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
@@ -17,23 +18,25 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.GameRules;
[TestFixture]
public sealed class TraitorRuleTest
public sealed class TraitorRuleTest : GameTest
{
private const string TraitorGameRuleProtoId = "Traitor";
private const string TraitorAntagRoleName = "Traitor";
private static readonly ProtoId<NpcFactionPrototype> SyndicateFaction = "Syndicate";
private static readonly ProtoId<NpcFactionPrototype> NanotrasenFaction = "NanoTrasen";
public override PoolSettings PoolSettings => new()
{
Dirty = true,
DummyTicker = false,
Connected = true,
InLobby = true,
};
[Test]
public async Task TestTraitorObjectives()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings()
{
Dirty = true,
DummyTicker = false,
Connected = true,
InLobby = true,
});
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
var entMan = server.EntMan;
@@ -123,9 +126,6 @@ public sealed class TraitorRuleTest
$"MaxDifficulty exceeded! Objectives: {string.Join(", ", mindComp.Objectives.Select(o => FormatObjective(o, entMan)))}");
Assert.That(mindComp.Objectives, Is.Not.Empty,
$"No objectives assigned!");
await pair.CleanReturnAsync();
}
private static string FormatObjective(Entity<ObjectiveComponent> entity, IEntityManager entMan)
@@ -1,16 +1,17 @@
#nullable enable
using Content.IntegrationTests.Fixtures;
using Content.Shared.Gibbing;
using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.Body;
[TestFixture]
public sealed class GibTest
public sealed class GibTest : GameTest
{
[Test]
public async Task TestGib()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var (server, client) = (pair.Server, pair.Client);
var map = await pair.CreateTestMap();
@@ -30,7 +31,5 @@ public sealed class GibTest
await pair.RunTicksSync(5);
Assert.That(!client.EntMan.EntityExists(nuid));
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Gravity;
using Content.Shared.Alert;
using Content.Shared.Gravity;
@@ -8,7 +9,7 @@ namespace Content.IntegrationTests.Tests.Gravity
[TestFixture]
[TestOf(typeof(GravitySystem))]
[TestOf(typeof(GravityGeneratorComponent))]
public sealed class WeightlessStatusTests
public sealed class WeightlessStatusTests : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -38,7 +39,7 @@ namespace Content.IntegrationTests.Tests.Gravity
[Test]
public async Task WeightlessStatusTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entityManager = server.ResolveDependency<IEntityManager>();
@@ -86,8 +87,6 @@ namespace Content.IntegrationTests.Tests.Gravity
});
await pair.RunTicksSync(10);
await pair.CleanReturnAsync();
}
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Power.Components;
using Content.Shared.Gravity;
using Robust.Shared.GameObjects;
@@ -11,7 +12,7 @@ namespace Content.IntegrationTests.Tests
/// making sure that gravity is applied to the correct grids.
[TestFixture]
[TestOf(typeof(GravityGeneratorComponent))]
public sealed class GravityGridTest
public sealed class GravityGridTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -31,7 +32,7 @@ namespace Content.IntegrationTests.Tests
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -96,8 +97,6 @@ namespace Content.IntegrationTests.Tests
Assert.That(entityMan.GetComponent<GravityComponent>(grid2).Enabled, Is.False);
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Content.Client.Guidebook;
using Content.Client.Guidebook.Richtext;
using Content.IntegrationTests.Fixtures;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
@@ -13,7 +14,7 @@ namespace Content.IntegrationTests.Tests.Guidebook;
/// </summary>
[TestFixture]
[TestOf(typeof(DocumentParsingManager))]
public sealed class DocumentParsingTest
public sealed class DocumentParsingTest : GameTest
{
public string TestDocument = @"multiple
@@ -45,7 +46,7 @@ whitespace before newlines are ignored.
[Test]
public async Task ParseTestDocument()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var client = pair.Client;
await client.WaitIdleAsync();
var parser = client.ResolveDependency<DocumentParsingManager>();
@@ -133,8 +134,6 @@ whitespace before newlines are ignored.
subTest2.Params.TryGetValue("k", out val);
Assert.That(val, Is.EqualTo(@"<>\>=""=<-_?*3.0//"));
await pair.CleanReturnAsync();
}
public sealed class TestControl : Control, IDocumentTag
@@ -1,5 +1,6 @@
using Content.Client.Guidebook;
using Content.Client.Guidebook.Richtext;
using Content.IntegrationTests.Fixtures;
using Robust.Shared.ContentPack;
using Robust.Shared.Prototypes;
using Content.IntegrationTests.Utility;
@@ -12,7 +13,7 @@ namespace Content.IntegrationTests.Tests.Guidebook;
[TestOf(typeof(GuidebookSystem))]
[TestOf(typeof(GuideEntryPrototype))]
[TestOf(typeof(DocumentParsingManager))]
public sealed class GuideEntryPrototypeTests
public sealed class GuideEntryPrototypeTests : GameTest
{
private static string[] _guideEntries = GameDataScrounger.PrototypesOfKind<GuideEntryPrototype>();
@@ -21,7 +22,7 @@ public sealed class GuideEntryPrototypeTests
[Description("Ensures a given guidebook entry is valid, checking the document/etc.")]
public async Task Validate(string protoKey)
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var client = pair.Client;
await client.WaitIdleAsync();
var protoMan = client.ResolveDependency<IPrototypeManager>();
@@ -36,7 +37,5 @@ public sealed class GuideEntryPrototypeTests
Assert.That(parser.TryAddMarkup(new Document(), text), $"Failed to parse the guide entry's document.");
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Storage.EntitySystems;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
@@ -10,7 +11,7 @@ using Robust.Shared.GameObjects;
namespace Content.IntegrationTests.Tests.Hands;
[TestFixture]
public sealed class HandTests
public sealed class HandTests : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -25,14 +26,16 @@ public sealed class HandTests
";
public override PoolSettings PoolSettings => new()
{
Connected = true,
DummyTicker = false
};
[Test]
public async Task TestPickupDrop()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var entMan = server.ResolveDependency<IEntityManager>();
@@ -69,17 +72,12 @@ public sealed class HandTests
Assert.That(sys.GetActiveItem((player, hands)), Is.Null);
await server.WaitPost(() => mapSystem.DeleteMap(data.MapId));
await pair.CleanReturnAsync();
}
[Test]
public async Task TestPickUpThenDropInContainer()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var map = await pair.CreateTestMap();
await pair.RunTicksSync(5);
@@ -134,6 +132,5 @@ public sealed class HandTests
Assert.That(containerSystem.IsInSameOrNoContainer((player, xform), (item, itemXform)));
await server.WaitPost(() => mapSystem.DeleteMap(map.MapId));
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Inventory;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ namespace Content.IntegrationTests.Tests
// i.e. the interaction between uniforms and the pocket/ID slots.
// and also how big items don't fit in pockets.
[TestFixture]
public sealed class HumanInventoryUniformSlotsTest
public sealed class HumanInventoryUniformSlotsTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -55,7 +56,7 @@ namespace Content.IntegrationTests.Tests
[Test]
public async Task Test()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
var coordinates = testMap.GridCoords;
@@ -130,8 +131,6 @@ namespace Content.IntegrationTests.Tests
mapSystem.DeleteMap(testMap.MapId);
});
await pair.CleanReturnAsync();
}
private static bool IsDescendant(EntityUid descendant, EntityUid parent, IEntityManager entManager)
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Body;
using Content.Shared.Clothing.Components;
using Content.Shared.Humanoid;
@@ -8,13 +9,12 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Humanoid;
[TestFixture]
public sealed class HideablePrototypeValidation
public sealed class HideablePrototypeValidation : GameTest
{
[Test]
public async Task NoOrgansWithoutClothing()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var requirements = new Dictionary<Enum, HashSet<EntProtoId>>();
foreach (var (proto, component) in pair.GetPrototypesWithComponent<VisualOrganMarkingsComponent>())
{
@@ -42,14 +42,12 @@ public sealed class HideablePrototypeValidation
{
Assert.That(provided, Does.Contain(key), $"No clothing will hide {key} that can be hidden on {string.Join(", ", requirement.Select(it => it.Id))}");
}
await pair.CleanReturnAsync();
}
[Test]
public async Task NoClothingWithoutOrgans()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var requirements = new Dictionary<Enum, HashSet<EntProtoId>>();
foreach (var (proto, component) in pair.GetPrototypesWithComponent<HideLayerClothingComponent>())
@@ -74,7 +72,5 @@ public sealed class HideablePrototypeValidation
{
Assert.That(provided, Does.Contain(key), $"No organ will hide {key} that can be hidden by {string.Join(", ", requirement.Select(it => it.Id))}");
}
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Prototypes;
using Content.Shared.Preferences;
@@ -10,14 +11,14 @@ namespace Content.IntegrationTests.Tests.Humanoid;
[TestFixture]
[TestOf(typeof(HumanoidProfileSystem))]
public sealed class HumanoidProfileTests
public sealed class HumanoidProfileTests : GameTest
{
private static readonly ProtoId<SpeciesPrototype> Vox = "Vox";
[Test]
public async Task EnsureValidLoading()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
await server.WaitIdleAsync();
@@ -43,7 +44,5 @@ public sealed class HumanoidProfileTests
Assert.That(voiceComponent.Sounds, Is.Not.Null, message: "the MobHuman spawned by this test needs to have sex-specific sound set");
Assert.That(voiceComponent.Sounds![Sex.Female], Is.EqualTo(voiceComponent.EmoteSounds));
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
#nullable enable annotations
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Server.Interaction;
using Content.Shared.Hands.Components;
using Content.Shared.Hands.EntitySystems;
@@ -16,7 +17,7 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
{
[TestFixture]
[TestOf(typeof(InteractionSystem))]
public sealed class InteractionSystemTests
public sealed class InteractionSystemTests : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -40,7 +41,7 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
[Test]
public async Task InteractionTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -101,13 +102,12 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
});
testInteractionSystem.ClearHandlers();
await pair.CleanReturnAsync();
}
[Test]
public async Task InteractionObstructionTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -168,13 +168,12 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
});
testInteractionSystem.ClearHandlers();
await pair.CleanReturnAsync();
}
[Test]
public async Task InteractionInRangeTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -234,14 +233,13 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
});
testInteractionSystem.ClearHandlers();
await pair.CleanReturnAsync();
}
[Test]
public async Task InteractionOutOfRangeTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -300,13 +298,12 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
});
testInteractionSystem.ClearHandlers();
await pair.CleanReturnAsync();
}
[Test]
public async Task InsideContainerInteractionBlockTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -388,7 +385,6 @@ namespace Content.IntegrationTests.Tests.Interaction.Click
});
testInteractionSystem.ClearHandlers();
await pair.CleanReturnAsync();
}
public sealed class TestInteractionSystem : EntitySystem
@@ -1,4 +1,5 @@
using System.Numerics;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Interaction;
using Robust.Server.GameObjects;
using Robust.Shared.Containers;
@@ -10,7 +11,7 @@ namespace Content.IntegrationTests.Tests.Interaction
{
[TestFixture]
[TestOf(typeof(SharedInteractionSystem))]
public sealed class InRangeUnobstructed
public sealed class InRangeUnobstructed : GameTest
{
private const string HumanId = "MobHuman";
@@ -27,7 +28,7 @@ namespace Content.IntegrationTests.Tests.Interaction
[Test]
public async Task EntityEntityTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -109,8 +110,6 @@ namespace Content.IntegrationTests.Tests.Interaction
Assert.That(interactionSys.InRangeUnobstructed(mapCoordinates, origin, InteractionRangeDivided15Times3));
});
});
await pair.CleanReturnAsync();
}
}
}
@@ -175,7 +175,7 @@ public abstract partial class InteractionTest
[SetUp]
public virtual async Task Setup()
{
Pair = await PoolManager.GetServerClient(Settings);
Pair = await PoolManager.GetServerClient(Settings, new NUnitTestContextWrap(TestContext.CurrentContext, TestContext.Out));
// server dependencies
SEntMan = Server.ResolveDependency<IEntityManager>();
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Atmos.EntitySystems;
using Content.Server.Body.Systems;
using Content.Server.Station.Systems;
@@ -7,12 +8,12 @@ namespace Content.IntegrationTests.Tests.Internals;
[TestFixture]
[TestOf(typeof(InternalsSystem))]
public sealed class AutoInternalsTests
public sealed class AutoInternalsTests : GameTest
{
[Test]
public async Task TestInternalsAutoActivateInSpaceForStationSpawn()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -31,14 +32,12 @@ public sealed class AutoInternalsTests
server.EntMan.DeleteEntity(dummy);
});
await pair.CleanReturnAsync();
}
[Test]
public async Task TestInternalsAutoActivateInSpaceForEntitySpawn()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var testMap = await pair.CreateTestMap();
@@ -55,8 +54,6 @@ public sealed class AutoInternalsTests
server.EntMan.DeleteEntity(dummy);
});
await pair.CleanReturnAsync();
}
[TestPrototypes]
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Content.Server.Stunnable;
using Content.Shared.Inventory;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ using Robust.Shared.Map;
namespace Content.IntegrationTests.Tests
{
[TestFixture]
public sealed class InventoryHelpersTest
public sealed class InventoryHelpersTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
@@ -39,7 +40,7 @@ namespace Content.IntegrationTests.Tests
[Test]
public async Task SpawnItemInSlotTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var sEntities = server.ResolveDependency<IEntityManager>();
@@ -87,8 +88,6 @@ namespace Content.IntegrationTests.Tests
#pragma warning restore NUnit2045
sEntities.DeleteEntity(human);
});
await pair.CleanReturnAsync();
}
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Lathe;
using Content.Shared.Materials;
using Content.Shared.Prototypes;
@@ -11,12 +12,12 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Lathe;
[TestFixture]
public sealed class LatheTest
public sealed class LatheTest : GameTest
{
[Test]
public async Task TestLatheRecipeIngredientsFitLathe()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var mapData = await pair.CreateTestMap();
@@ -111,14 +112,12 @@ public sealed class LatheTest
}
});
});
await pair.CleanReturnAsync();
}
[Test]
public async Task AllLatheRecipesValidTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var proto = server.ProtoMan;
@@ -131,7 +130,5 @@ public sealed class LatheTest
Assert.That(recipe.ResultReagents, Is.Not.Null, $"Recipe '{recipe.ID}' has no result or result reagents.");
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Tag;
using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;
@@ -11,12 +12,12 @@ namespace Content.IntegrationTests.Tests.Linter;
/// Verify that the yaml linter successfully validates static fields
/// </summary>
[TestFixture]
public sealed class StaticFieldValidationTest
public sealed class StaticFieldValidationTest : GameTest
{
[Test]
public async Task TestStaticFieldValidation()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var protoMan = pair.Server.ProtoMan;
var protos = new Dictionary<Type, HashSet<string>>();
@@ -49,8 +50,6 @@ public sealed class StaticFieldValidationTest
Assert.That(protoMan.ValidateStaticFields(typeof(ProtoIdListInvalid), protos), Has.Count.EqualTo(2));
Assert.That(protoMan.ValidateStaticFields(typeof(ProtoIdSetInvalid), protos), Has.Count.EqualTo(2));
Assert.That(protoMan.ValidateStaticFields(typeof(PrivateProtoIdArrayInvalid), protos), Has.Count.EqualTo(2));
await pair.CleanReturnAsync();
}
[TestPrototypes]
@@ -1,4 +1,5 @@
using Content.Client.Lobby;
using Content.IntegrationTests.Fixtures;
using Content.Server.Preferences.Managers;
using Content.Shared.Humanoid;
using Content.Shared.Preferences;
@@ -9,12 +10,14 @@ namespace Content.IntegrationTests.Tests.Lobby;
[TestFixture]
[TestOf(typeof(ClientPreferencesManager))]
[TestOf(typeof(ServerPreferencesManager))]
public sealed class CharacterCreationTest
public sealed class CharacterCreationTest : GameTest
{
public override PoolSettings PoolSettings => new() { InLobby = true };
[Test]
public async Task CreateDeleteCreateTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { InLobby = true });
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
var user = pair.Client.User!.Value;
@@ -72,7 +75,6 @@ public sealed class CharacterCreationTest
serverCharacters = serverPrefManager.GetPreferences(user).Characters;
Assert.That(serverCharacters, Has.Count.EqualTo(2));
AssertEqual(serverCharacters[1], profile);
await pair.CleanReturnAsync();
}
private void AssertEqual(HumanoidCharacterProfile a, HumanoidCharacterProfile b)
@@ -1,20 +1,23 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.CCVar;
using Robust.Server.Player;
using Robust.Shared.Configuration;
using Robust.Shared.Network;
namespace Content.IntegrationTests.Tests.Lobby;
public sealed class ServerReloginTest
public sealed class ServerReloginTest : GameTest
{
public override PoolSettings PoolSettings => new PoolSettings
{
Connected = true,
DummyTicker = false
};
[Test]
public async Task Relogin()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true,
DummyTicker = false
});
var pair = Pair;
var server = pair.Server;
var client = pair.Client;
var originalMaxPlayers = 0;
@@ -62,7 +65,5 @@ public sealed class ServerReloginTest
//Put the cvar back, so other tests can still use this server
serverConfig.SetCVar(CCVars.SoftMaxPlayers, originalMaxPlayers);
});
await pair.CleanReturnAsync();
}
}
@@ -1,9 +1,10 @@
using Content.IntegrationTests.Fixtures;
using Robust.Shared.Localization;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Localization;
public sealed class EntityPrototypeLocalizationTest
public sealed class EntityPrototypeLocalizationTest : GameTest
{
/// <summary>
/// An explanation of why LocIds should not be used for entity prototype names/descriptions.
@@ -18,7 +19,7 @@ public sealed class EntityPrototypeLocalizationTest
[Test]
public async Task TestNoManualEntityLocStrings()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ProtoMan;
var locMan = server.ResolveDependency<ILocalizationManager>();
@@ -44,7 +45,5 @@ public sealed class EntityPrototypeLocalizationTest
}
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,4 +1,5 @@
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Shared.Dataset;
using Robust.Shared.Localization;
using Robust.Shared.Prototypes;
@@ -6,12 +7,12 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests.Localization;
[TestFixture]
public sealed class LocalizedDatasetPrototypeTest
public sealed class LocalizedDatasetPrototypeTest : GameTest
{
[Test]
public async Task ValidProtoIdsTest()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -36,7 +37,5 @@ public sealed class LocalizedDatasetPrototypeTest
Assert.That(localizationMan.HasString(nextId), Is.False, $"LocalizedDataset {proto.ID} with prefix \"{proto.Values.Prefix}\" specifies {proto.Values.Count} entries, but a localized string exists with ID {nextId}! Does count need to be raised?");
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using Content.IntegrationTests.Fixtures;
using Content.Server.Construction.Components;
using Content.Shared.Construction.Components;
using Robust.Shared.GameObjects;
@@ -7,7 +8,7 @@ using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests;
public sealed class MachineBoardTest
public sealed class MachineBoardTest : GameTest
{
/// <summary>
/// A list of machine boards that can be ignored by this test.
@@ -32,7 +33,7 @@ public sealed class MachineBoardTest
[Test]
public async Task TestMachineBoardHasValidMachine()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -60,8 +61,6 @@ public sealed class MachineBoardTest
});
}
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -71,7 +70,7 @@ public sealed class MachineBoardTest
[Test]
public async Task TestComputerBoardHasValidComputer()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var protoMan = server.ResolveDependency<IPrototypeManager>();
@@ -100,8 +99,6 @@ public sealed class MachineBoardTest
});
}
});
await pair.CleanReturnAsync();
}
/// <summary>
@@ -111,7 +108,7 @@ public sealed class MachineBoardTest
[Test]
public async Task TestValidateBoardComponentRequirements()
{
await using var pair = await PoolManager.GetServerClient();
var pair = Pair;
var server = pair.Server;
var entMan = server.ResolveDependency<IEntityManager>();
@@ -136,7 +133,5 @@ public sealed class MachineBoardTest
});
}
});
await pair.CleanReturnAsync();
}
}
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Content.Client.Weapons.Ranged.Components;
using Content.IntegrationTests.Fixtures;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
@@ -9,12 +10,12 @@ namespace Content.IntegrationTests.Tests;
/// Tests all entity prototypes with the MagazineVisualsComponent.
/// </summary>
[TestFixture]
public sealed class MagazineVisualsSpriteTest
public sealed class MagazineVisualsSpriteTest : GameTest
{
[Test]
public async Task MagazineVisualsSpritesExist()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true });
var pair = Pair;
var client = pair.Client;
var toTest = new List<(int, string)>();
var protos = pair.GetPrototypesWithComponent<MagazineVisualsComponent>();
@@ -67,7 +68,5 @@ public sealed class MagazineVisualsSpriteTest
}
});
});
await pair.CleanReturnAsync();
}
}
@@ -1,3 +1,4 @@
using Content.IntegrationTests.Fixtures;
using Robust.Server.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
@@ -5,15 +6,18 @@ using Robust.Shared.Map;
namespace Content.IntegrationTests.Tests.Mapping;
[TestFixture]
public sealed class MappingTests
public sealed class MappingTests : GameTest
{
public override PoolSettings PoolSettings =>
new() { Dirty = true, Connected = true, DummyTicker = false };
/// <summary>
/// Checks that the mapping command creates paused & uninitialized maps.
/// </summary>
[Test]
public async Task MappingTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings { Dirty = true, Connected = true, DummyTicker = false });
var pair = Pair;
var server = pair.Server;
var entMan = server.EntMan;
@@ -97,6 +101,5 @@ public sealed class MappingTests
Assert.That(server.MetaData(ent).EntityPaused, Is.True);
await server.WaitPost(() => entMan.DeleteEntity(map));
await pair.CleanReturnAsync();
}
}
@@ -1,19 +1,17 @@
using Content.Client.Gameplay;
using Content.Client.Mapping;
using Content.IntegrationTests.Fixtures;
using Robust.Client.State;
namespace Content.IntegrationTests.Tests;
[TestFixture]
public sealed class MappingEditorTest
public sealed class MappingEditorTest : GameTest
{
[Test]
public async Task StopHardCodingWidgetsJesusChristTest()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Connected = true
});
var pair = Pair;
var client = pair.Client;
var state = client.ResolveDependency<IStateManager>();
@@ -35,7 +33,5 @@ public sealed class MappingEditorTest
state.RequestStateChange<GameplayState>();
});
});
await pair.CleanReturnAsync();
}
}

Some files were not shown because too many files have changed in this diff Show More