1
0

FollowerSystemTest.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Content.Server.GameTicking;
  2. using Content.Shared.Follower;
  3. using Robust.Shared.GameObjects;
  4. using Robust.Shared.Log;
  5. using Robust.Shared.Map;
  6. namespace Content.IntegrationTests.Tests;
  7. [TestFixture, TestOf(typeof(FollowerSystem))]
  8. public sealed class FollowerSystemTest
  9. {
  10. /// <summary>
  11. /// This test ensures that deleting a map while an entity follows another doesn't throw any exceptions.
  12. /// </summary>
  13. [Test]
  14. public async Task FollowerMapDeleteTest()
  15. {
  16. await using var pair = await PoolManager.GetServerClient();
  17. var server = pair.Server;
  18. var entMan = server.ResolveDependency<IEntityManager>();
  19. var mapMan = server.ResolveDependency<IMapManager>();
  20. var sysMan = server.ResolveDependency<IEntitySystemManager>();
  21. var logMan = server.ResolveDependency<ILogManager>();
  22. var mapSys = server.System<SharedMapSystem>();
  23. var logger = logMan.RootSawmill;
  24. await server.WaitPost(() =>
  25. {
  26. var followerSystem = sysMan.GetEntitySystem<FollowerSystem>();
  27. // Create a map to spawn the observers on.
  28. mapSys.CreateMap(out var map);
  29. // Spawn an observer to be followed.
  30. var followed = entMan.SpawnEntity(GameTicker.ObserverPrototypeName, new MapCoordinates(0, 0, map));
  31. logger.Info($"Spawned followed observer: {entMan.ToPrettyString(followed)}");
  32. // Spawn an observer to follow another observer.
  33. var follower = entMan.SpawnEntity(GameTicker.ObserverPrototypeName, new MapCoordinates(0, 0, map));
  34. logger.Info($"Spawned follower observer: {entMan.ToPrettyString(follower)}");
  35. followerSystem.StartFollowingEntity(follower, followed);
  36. entMan.DeleteEntity(mapSys.GetMap(map));
  37. });
  38. await pair.CleanReturnAsync();
  39. }
  40. }