Allow InteractionTests to load other maps (#41226)
* load maps and marker * cleanup * sneaky doc * sneaky doc2 --------- Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
This commit is contained in:
@@ -4,8 +4,13 @@ using System.Linq;
|
||||
using Content.Server.Preferences.Managers;
|
||||
using Content.Shared.Preferences;
|
||||
using Content.Shared.Roles;
|
||||
using Robust.Shared.EntitySerialization;
|
||||
using Robust.Shared.EntitySerialization.Systems;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Network;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.IntegrationTests.Pair;
|
||||
|
||||
@@ -15,13 +20,49 @@ public sealed partial class TestPair
|
||||
public Task<TestMapData> CreateTestMap(bool initialized = true)
|
||||
=> CreateTestMap(initialized, "Plating");
|
||||
|
||||
/// <summary>
|
||||
/// Loads a test map and returns a <see cref="TestMapData"/> representing it.
|
||||
/// </summary>
|
||||
/// <param name="testMapPath">The <see cref="ResPath"/> to the test map to load.</param>
|
||||
/// <param name="initialized">Whether to initialize the map on load.</param>
|
||||
/// <returns>A <see cref="TestMapData"/> representing the loaded map.</returns>
|
||||
public async Task<TestMapData> LoadTestMap(ResPath testMapPath, bool initialized = true)
|
||||
{
|
||||
TestMapData mapData = new();
|
||||
var deserializationOptions = DeserializationOptions.Default with { InitializeMaps = initialized };
|
||||
var mapLoaderSys = Server.EntMan.System<MapLoaderSystem>();
|
||||
var mapSys = Server.System<SharedMapSystem>();
|
||||
|
||||
// Load our test map in and assert that it exists.
|
||||
await Server.WaitAssertion(() =>
|
||||
{
|
||||
Assert.That(mapLoaderSys.TryLoadMap(testMapPath, out var map, out var gridSet, deserializationOptions),
|
||||
$"Failed to load map {testMapPath}.");
|
||||
Assert.That(gridSet, Is.Not.Empty, "There were no grids loaded from the map!");
|
||||
|
||||
mapData.MapUid = map!.Value.Owner;
|
||||
mapData.MapId = map!.Value.Comp.MapId;
|
||||
mapData.Grid = gridSet!.First();
|
||||
mapData.GridCoords = new EntityCoordinates(mapData.Grid, 0, 0);
|
||||
mapData.MapCoords = new MapCoordinates(0, 0, mapData.MapId);
|
||||
mapData.Tile = mapSys.GetAllTiles(mapData.Grid.Owner, mapData.Grid.Comp).First();
|
||||
});
|
||||
|
||||
await RunTicksSync(10);
|
||||
mapData.CMapUid = ToClientUid(mapData.MapUid);
|
||||
mapData.CGridUid = ToClientUid(mapData.Grid);
|
||||
mapData.CGridCoords = new EntityCoordinates(mapData.CGridUid, 0, 0);
|
||||
|
||||
return mapData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set a user's antag preferences. Modified preferences are automatically reset at the end of the test.
|
||||
/// </summary>
|
||||
public async Task SetAntagPreference(ProtoId<AntagPrototype> id, bool value, NetUserId? user = null)
|
||||
{
|
||||
user ??= Client.User!.Value;
|
||||
if (user is not {} userId)
|
||||
if (user is not { } userId)
|
||||
return;
|
||||
|
||||
var prefMan = Server.ResolveDependency<IServerPreferencesManager>();
|
||||
@@ -30,7 +71,7 @@ public sealed partial class TestPair
|
||||
// Automatic preference resetting only resets slot 0.
|
||||
Assert.That(prefs.SelectedCharacterIndex, Is.EqualTo(0));
|
||||
|
||||
var profile = (HumanoidCharacterProfile) prefs.Characters[0];
|
||||
var profile = (HumanoidCharacterProfile)prefs.Characters[0];
|
||||
var newProfile = profile.WithAntagPreference(id, value);
|
||||
_modifiedProfiles.Add(userId);
|
||||
await Server.WaitPost(() => prefMan.SetProfile(userId, 0, newProfile).Wait());
|
||||
@@ -58,7 +99,7 @@ public sealed partial class TestPair
|
||||
|
||||
var prefMan = Server.ResolveDependency<IServerPreferencesManager>();
|
||||
var prefs = prefMan.GetPreferences(user);
|
||||
var profile = (HumanoidCharacterProfile) prefs.Characters[0];
|
||||
var profile = (HumanoidCharacterProfile)prefs.Characters[0];
|
||||
var dictionary = new Dictionary<ProtoId<JobPrototype>, JobPriority>(profile.JobPriorities);
|
||||
|
||||
// Automatic preference resetting only resets slot 0.
|
||||
|
||||
@@ -24,6 +24,7 @@ using Robust.Shared.Map;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Utility;
|
||||
using Robust.UnitTesting;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Interaction;
|
||||
@@ -39,10 +40,20 @@ namespace Content.IntegrationTests.Tests.Interaction;
|
||||
[FixtureLifeCycle(LifeCycle.InstancePerTestCase)]
|
||||
public abstract partial class InteractionTest
|
||||
{
|
||||
/// <summary>
|
||||
/// The prototype that will be spawned for the player entity at <see cref="PlayerCoords"/>.
|
||||
/// This is not a full humanoid and only has one hand by default.
|
||||
/// </summary>
|
||||
protected virtual string PlayerPrototype => "InteractionTestMob";
|
||||
|
||||
/// <summary>
|
||||
/// The map path to load for the integration test.
|
||||
/// If null an empty map with a single 1x1 plating grid will be generated.
|
||||
/// </summary>
|
||||
protected virtual ResPath? TestMapPath => null;
|
||||
|
||||
protected TestPair Pair = default!;
|
||||
protected TestMapData MapData => Pair.TestMap!;
|
||||
protected TestMapData MapData = default!;
|
||||
|
||||
protected RobustIntegrationTest.ServerIntegrationInstance Server => Pair.Server;
|
||||
protected RobustIntegrationTest.ClientIntegrationInstance Client => Pair.Client;
|
||||
@@ -199,7 +210,10 @@ public abstract partial class InteractionTest
|
||||
CUiSys = CEntMan.System<SharedUserInterfaceSystem>();
|
||||
|
||||
// Setup map.
|
||||
await Pair.CreateTestMap();
|
||||
if (TestMapPath == null)
|
||||
MapData = await Pair.CreateTestMap();
|
||||
else
|
||||
MapData = await Pair.LoadTestMap(TestMapPath.Value);
|
||||
|
||||
PlayerCoords = SEntMan.GetNetCoordinates(Transform.WithEntityId(MapData.GridCoords.Offset(new Vector2(0.5f, 0.5f)), MapData.MapUid));
|
||||
TargetCoords = SEntMan.GetNetCoordinates(Transform.WithEntityId(MapData.GridCoords.Offset(new Vector2(1.5f, 0.5f)), MapData.MapUid));
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
using System.Linq;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.IntegrationTests.Tests.Interaction;
|
||||
|
||||
/// <summary>
|
||||
/// Makes sure that interaction test helper methods are working as intended.
|
||||
/// </summary>
|
||||
public sealed class InteractionTestTests : InteractionTest
|
||||
{
|
||||
protected override ResPath? TestMapPath => new("Maps/Test/empty.yml");
|
||||
|
||||
/// <summary>
|
||||
/// Tests that map loading is working correctly.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void MapLoadingTest()
|
||||
{
|
||||
// Make sure that there is only one grid.
|
||||
var grids = SEntMan.AllEntities<MapGridComponent>().ToList();
|
||||
Assert.That(grids, Has.Count.EqualTo(1), "Test map did not have exactly one grid.");
|
||||
Assert.That(grids, Does.Contain(MapData.Grid), "MapData did not contain the loaded grid.");
|
||||
|
||||
// Make sure we loaded the right map.
|
||||
// This name is defined in empty.yml
|
||||
Assert.That(SEntMan.GetComponent<MetaDataComponent>(MapData.MapUid).EntityName, Is.EqualTo("Empty Debug Map"));
|
||||
}
|
||||
}
|
||||
|
||||
16
Content.Shared/Tests/TestMarkerComponent.cs
Normal file
16
Content.Shared/Tests/TestMarkerComponent.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Component that is used by integration tests to mark and easily find certain entities on a test map.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class TestMarkerComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// A string to keep multiple markers on the same map distinct.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public string Id = "marker";
|
||||
}
|
||||
@@ -56,7 +56,7 @@ entities:
|
||||
- uid: 3
|
||||
components:
|
||||
- type: MetaData
|
||||
name: map 89
|
||||
name: "Empty Debug Map"
|
||||
- type: Transform
|
||||
- type: Map
|
||||
mapPaused: True
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
- type: entity
|
||||
parent: MarkerBase
|
||||
id: IntegrationTestMarker
|
||||
name: Integration Test Marker
|
||||
components:
|
||||
- type: TestMarker
|
||||
- type: Sprite
|
||||
state: pink
|
||||
Reference in New Issue
Block a user