Files
tbd-station-14/Content.IntegrationTests/Tests/Wires/WireLayoutTest.cs
Pieter-Jan Briers a4692004de Fix wire layout inheritance. (#26289)
Wire layouts manually navigate the inheritance hierarchy, but the data fields on the prototypes were also automatically inherited already. This meant that inheriting a wire layout prototype and changing nothing would cause the wires to be duplicated unless they were manually modified on top.

Fix is easy: just disable inheritance on the data fields.

Also, integration test for it.
2024-03-20 16:22:47 +01:00

104 lines
4.0 KiB
C#

using Content.Server.Doors;
using Content.Server.Power;
using Content.Server.Wires;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
namespace Content.IntegrationTests.Tests.Wires;
[TestFixture]
[Parallelizable(ParallelScope.All)]
[TestOf(typeof(WiresSystem))]
public sealed class WireLayoutTest
{
[TestPrototypes]
public const string Prototypes = """
- type: wireLayout
id: WireLayoutTest
dummyWires: 2
wires:
- !type:PowerWireAction
- !type:DoorBoltWireAction
- type: wireLayout
id: WireLayoutTest2
parent: WireLayoutTest
wires:
- !type:PowerWireAction
- type: wireLayout
id: WireLayoutTest3
parent: WireLayoutTest
- type: entity
id: WireLayoutTest
components:
- type: Wires
layoutId: WireLayoutTest
- type: entity
id: WireLayoutTest2
components:
- type: Wires
layoutId: WireLayoutTest2
- type: entity
id: WireLayoutTest3
components:
- type: Wires
layoutId: WireLayoutTest3
""";
[Test]
public async Task TestLayoutInheritance()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var testMap = await pair.CreateTestMap();
await server.WaitAssertion(() =>
{
var wires = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<WiresSystem>();
// Need to spawn these entities to make sure the wire layouts are initialized.
var ent1 = SpawnWithComp<WiresComponent>(server.EntMan, "WireLayoutTest", testMap.MapCoords);
var ent2 = SpawnWithComp<WiresComponent>(server.EntMan, "WireLayoutTest2", testMap.MapCoords);
var ent3 = SpawnWithComp<WiresComponent>(server.EntMan, "WireLayoutTest3", testMap.MapCoords);
// Assert.That(wires.TryGetLayout("WireLayoutTest", out var layout1));
// Assert.That(wires.TryGetLayout("WireLayoutTest2", out var layout2));
// Assert.That(wires.TryGetLayout("WireLayoutTest3", out var layout3));
Assert.Multiple(() =>
{
// Entity 1.
Assert.That(ent1.Comp.WiresList, Has.Count.EqualTo(4));
Assert.That(ent1.Comp.WiresList, Has.Exactly(2).With.Property("Action").Null, "2 dummy wires");
Assert.That(ent1.Comp.WiresList, Has.One.With.Property("Action").InstanceOf<PowerWireAction>(), "1 power wire");
Assert.That(ent1.Comp.WiresList, Has.One.With.Property("Action").InstanceOf<DoorBoltWireAction>(), "1 door bolt wire");
Assert.That(ent2.Comp.WiresList, Has.Count.EqualTo(5));
Assert.That(ent2.Comp.WiresList, Has.Exactly(2).With.Property("Action").Null, "2 dummy wires");
Assert.That(ent2.Comp.WiresList, Has.Exactly(2).With.Property("Action").InstanceOf<PowerWireAction>(), "2 power wire");
Assert.That(ent2.Comp.WiresList, Has.One.With.Property("Action").InstanceOf<DoorBoltWireAction>(), "1 door bolt wire");
Assert.That(ent3.Comp.WiresList, Has.Count.EqualTo(4));
Assert.That(ent3.Comp.WiresList, Has.Exactly(2).With.Property("Action").Null, "2 dummy wires");
Assert.That(ent3.Comp.WiresList, Has.One.With.Property("Action").InstanceOf<PowerWireAction>(), "1 power wire");
Assert.That(ent3.Comp.WiresList, Has.One.With.Property("Action").InstanceOf<DoorBoltWireAction>(), "1 door bolt wire");
});
});
await pair.CleanReturnAsync();
}
private static Entity<T> SpawnWithComp<T>(IEntityManager entityManager, string prototype, MapCoordinates coords)
where T : IComponent, new()
{
var ent = entityManager.Spawn(prototype, coords);
var comp = entityManager.EnsureComponent<T>(ent);
return new Entity<T>(ent, comp);
}
}