Adds an integration test for FollowerSystem. (#7048)
This commit is contained in:
committed by
GitHub
parent
9a044c0d6c
commit
b786feffb6
63
Content.IntegrationTests/Tests/FollowerSystemTest.cs
Normal file
63
Content.IntegrationTests/Tests/FollowerSystemTest.cs
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Content.Shared.Follower;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using Robust.Shared.GameObjects;
|
||||||
|
using Robust.Shared.IoC;
|
||||||
|
using Robust.Shared.Log;
|
||||||
|
using Robust.Shared.Map;
|
||||||
|
|
||||||
|
namespace Content.IntegrationTests.Tests;
|
||||||
|
|
||||||
|
[TestFixture, TestOf(typeof(FollowerSystem))]
|
||||||
|
public sealed class FollowerSystemTest : ContentIntegrationTest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// This test ensures that deleting a map while an entity follows another doesn't throw any exceptions.
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public async Task FollowerMapDeleteTest()
|
||||||
|
{
|
||||||
|
var server = StartServerDummyTicker();
|
||||||
|
await server.WaitIdleAsync();
|
||||||
|
|
||||||
|
await server.WaitPost(() =>
|
||||||
|
{
|
||||||
|
var mapMan = IoCManager.Resolve<IMapManager>();
|
||||||
|
var entMan = IoCManager.Resolve<IEntityManager>();
|
||||||
|
var sysMan = IoCManager.Resolve<IEntitySystemManager>();
|
||||||
|
var logger = IoCManager.Resolve<ILogManager>().RootSawmill;
|
||||||
|
var followerSystem = sysMan.GetEntitySystem<FollowerSystem>();
|
||||||
|
|
||||||
|
// Create a map to spawn the observers on.
|
||||||
|
var map = mapMan.CreateMap();
|
||||||
|
|
||||||
|
// Spawn an observer to be followed.
|
||||||
|
var followed = entMan.SpawnEntity("MobObserver", new MapCoordinates(0, 0, map));
|
||||||
|
logger.Info($"Spawned followed observer: {entMan.ToPrettyString(followed)}");
|
||||||
|
|
||||||
|
// Spawn an observer to follow another observer.
|
||||||
|
var follower = entMan.SpawnEntity("MobObserver", new MapCoordinates(0, 0, map));
|
||||||
|
logger.Info($"Spawned follower observer: {entMan.ToPrettyString(follower)}");
|
||||||
|
|
||||||
|
followerSystem.StartFollowingEntity(follower, followed);
|
||||||
|
|
||||||
|
foreach (var ent in entMan.GetEntities().ToArray())
|
||||||
|
{
|
||||||
|
// Let's skip entities that have been deleted, as we want to get their TransformComp for extra info.
|
||||||
|
if (entMan.Deleted(ent))
|
||||||
|
{
|
||||||
|
logger.Info($"Skipping {entMan.ToPrettyString(ent)}...");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log some information about the entity before we delete it.
|
||||||
|
var transform = entMan.GetComponent<TransformComponent>(ent);
|
||||||
|
logger.Info($"Deleting entity {entMan.ToPrettyString(ent)}... Parent: {entMan.ToPrettyString(transform.ParentUid)} | Children: {string.Join(", ", transform.Children.Select(c => entMan.ToPrettyString(c.Owner)))}");
|
||||||
|
|
||||||
|
// Actually delete the entity now.
|
||||||
|
entMan.DeleteEntity(ent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user