using Moq; using NUnit.Framework; using Robust.Server.GameObjects; using Robust.Server.Physics; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Physics.Broadphase; namespace Robust.UnitTesting.Shared.Map { [TestFixture, TestOf(typeof(MapManager))] class MapManager_Tests : RobustUnitTest { public override UnitTestProject Project => UnitTestProject.Server; protected override void OverrideIoC() { base.OverrideIoC(); var mock = new Mock(); var broady = new BroadPhaseSystem(); var physics = new PhysicsSystem(); mock.Setup(m => m.GetEntitySystem()).Returns(broady); mock.Setup(m => m.GetEntitySystem()).Returns(physics); IoCManager.RegisterInstance(mock.Object, true); } [SetUp] public void Setup() { var mapMan = IoCManager.Resolve(); mapMan.Startup(); } [TearDown] public void TearDown() { var mapMan = IoCManager.Resolve(); mapMan.Shutdown(); } /// /// When the map manager is restarted, the maps are deleted. /// [Test] public void Restart_ExistingMap_IsRemoved() { var mapMan = IoCManager.Resolve(); var mapID = new MapId(11); mapMan.CreateMap(mapID); mapMan.Restart(); Assert.That(mapMan.MapExists(mapID), Is.False); } /// /// When the map manager is restarted, the grids are removed. /// [Test] public void Restart_ExistingGrid_IsRemoved() { var mapMan = IoCManager.Resolve(); var mapID = new MapId(11); var gridId = new GridId(7); mapMan.CreateMap(mapID); mapMan.CreateGrid(mapID, gridId); mapMan.Restart(); Assert.That(mapMan.GridExists(gridId), Is.False); } /// /// When the map manager is restarted, Nullspace is recreated. /// [Test] public void Restart_NullspaceMap_IsEmptied() { var mapMan = IoCManager.Resolve(); var entMan = IoCManager.Resolve(); mapMan.CreateNewMapEntity(MapId.Nullspace); var oldEntity = entMan.CreateEntityUninitialized(null, MapCoordinates.Nullspace); entMan.InitializeComponents(oldEntity); mapMan.Restart(); Assert.That(mapMan.MapExists(MapId.Nullspace), Is.True); Assert.That(mapMan.GridExists(GridId.Invalid), Is.False); Assert.That(entMan.Deleted(oldEntity), Is.True); } /// /// When using SetMapEntity, the existing entities on the map are removed, and the new map entity gets a IMapComponent. /// [Test] public void SetMapEntity_WithExistingEntity_ExistingEntityDeleted() { // Arrange var mapID = new MapId(11); var mapMan = IoCManager.Resolve(); var entMan = IoCManager.Resolve(); mapMan.CreateMap(new MapId(7)); mapMan.CreateMap(mapID); var oldMapEntity = mapMan.GetMapEntityId(mapID); var newMapEntity = entMan.CreateEntityUninitialized(null, new MapCoordinates(Vector2.Zero, new MapId(7))); // Act mapMan.SetMapEntity(mapID, newMapEntity); // Assert Assert.That(entMan.Deleted(oldMapEntity)); Assert.That(entMan.HasComponent(newMapEntity)); var mapComp = entMan.GetComponent(newMapEntity); Assert.That(mapComp.WorldMap == mapID); } /// /// After creating a new map entity for nullspace, you can spawn entities into nullspace like any other map. /// [Test] public void SpawnEntityAt_IntoNullspace_Success() { // Arrange var mapMan = IoCManager.Resolve(); var entMan = IoCManager.Resolve(); mapMan.CreateNewMapEntity(MapId.Nullspace); // Act var newEntity = entMan.SpawnEntity(null, MapCoordinates.Nullspace); // Assert Assert.That(IoCManager.Resolve().GetComponent(newEntity).MapID, Is.EqualTo(MapId.Nullspace)); } [Test] public void Restart_MapEntity_IsRemoved() { var mapMan = IoCManager.Resolve(); var entity = mapMan.CreateNewMapEntity(MapId.Nullspace); mapMan.Restart(); Assert.That(mapMan.MapExists(MapId.Nullspace), Is.True); Assert.That((!IoCManager.Resolve().EntityExists(entity) ? EntityLifeStage.Deleted : IoCManager.Resolve().GetComponent(entity).EntityLifeStage) >= EntityLifeStage.Deleted, Is.True); Assert.That(mapMan.GetMapEntityId(MapId.Nullspace), Is.EqualTo(EntityUid.Invalid)); } } }