* Add test pooling * WIP test pooling changes * Fix Destructible tests * Don't pool unpooled or dummy ticker instances * Change ServerPathfindingDebugSystem to replace existing entries * Fix SaveLoadSaveTest comment * Don't pool StartTest * Comment out global setup * Fix puddle tests * Move SolarPanelComponent initialize to PowerSolarSystem OnMapInit * Update RobustToolbox * Finish fixing tests, make test threads background threads * Bring back pooling * Fix nullable * Update RobustToolbox * Set cvars on server return * Un-pool tests with custom cvars * Update RobustToolbox * Update RobustToolbox * Change where the main tile coordinates are * Remove DisposalUnitTest grid check * Fix test pooling being a fickle bitch * Fix EntitySystemExtensionsTest * Update RobustToolbox * Update RobustToolbox * Make nullable pool settings true * Update RobustToolbox * Wait other way around * We are unitystation now * Update RobustToolbox * Create global setup * Pool some more tests * Fix not properly disconnecting clients before restarting the round * Give more info on ran tests * Standardize default test cvars * Update RobustToolbox * Update RobustToolbox * Pool clients * Fix test order issue * Fix cvars in character creation test not being set properly * Update RobustToolbox * Update RobustToolbox * Rider shut * Update RobustToolbox * Format tests ran better * Update RobustToolbox * Reset RobustToolbox * Reset RobustToolbox harder * Fix one instance of test order causing destructible tests to fail
89 lines
3.9 KiB
C#
89 lines
3.9 KiB
C#
#nullable enable
|
|
using System.Threading.Tasks;
|
|
using Content.Shared.Physics;
|
|
using Content.Shared.Spawning;
|
|
using NUnit.Framework;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.Map;
|
|
using Robust.Shared.Physics;
|
|
|
|
namespace Content.IntegrationTests.Tests.Utility
|
|
{
|
|
[TestFixture]
|
|
[TestOf(typeof(EntitySystemExtensions))]
|
|
public class EntitySystemExtensionsTest : ContentIntegrationTest
|
|
{
|
|
private const string BlockerDummyId = "BlockerDummy";
|
|
|
|
private static readonly string Prototypes = $@"
|
|
- type: entity
|
|
id: {BlockerDummyId}
|
|
name: {BlockerDummyId}
|
|
components:
|
|
- type: Physics
|
|
fixtures:
|
|
- shape:
|
|
!type:PhysShapeAabb
|
|
bounds: ""-0.49,-0.49,0.49,0.49""
|
|
mask:
|
|
- Impassable
|
|
";
|
|
|
|
[Test]
|
|
public async Task Test()
|
|
{
|
|
var serverOptions = new ServerContentIntegrationOption {ExtraPrototypes = Prototypes};
|
|
var server = StartServer(serverOptions);
|
|
|
|
await server.WaitIdleAsync();
|
|
|
|
var sMapManager = server.ResolveDependency<IMapManager>();
|
|
var sEntityManager = server.ResolveDependency<IEntityManager>();
|
|
var broady = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<SharedBroadphaseSystem>();
|
|
|
|
await server.WaitAssertion(() =>
|
|
{
|
|
var grid = GetMainGrid(sMapManager);
|
|
var gridEnt = sEntityManager.GetEntity(grid.GridEntityId);
|
|
var gridPos = gridEnt.Transform.WorldPosition;
|
|
var entityCoordinates = GetMainEntityCoordinates(sMapManager);
|
|
|
|
// Nothing blocking it, only entity is the grid
|
|
Assert.NotNull(sEntityManager.SpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable));
|
|
Assert.True(sEntityManager.TrySpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable, out var entity));
|
|
Assert.NotNull(entity);
|
|
|
|
var mapId = GetMainMapId(sMapManager);
|
|
var mapCoordinates = new MapCoordinates(gridPos.X, gridPos.Y, mapId);
|
|
|
|
// Nothing blocking it, only entity is the grid
|
|
Assert.NotNull(sEntityManager.SpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable));
|
|
Assert.True(sEntityManager.TrySpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable, out entity));
|
|
Assert.NotNull(entity);
|
|
|
|
// Spawn a blocker with an Impassable mask
|
|
sEntityManager.SpawnEntity(BlockerDummyId, entityCoordinates);
|
|
broady.Update(0.016f);
|
|
|
|
// Cannot spawn something with an Impassable layer
|
|
Assert.Null(sEntityManager.SpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable));
|
|
Assert.False(sEntityManager.TrySpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.Impassable, out entity));
|
|
Assert.Null(entity);
|
|
|
|
Assert.Null(sEntityManager.SpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable));
|
|
Assert.False(sEntityManager.TrySpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.Impassable, out entity));
|
|
Assert.Null(entity);
|
|
|
|
// Other layers are fine
|
|
Assert.NotNull(sEntityManager.SpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.MobImpassable));
|
|
Assert.True(sEntityManager.TrySpawnIfUnobstructed(null, entityCoordinates, CollisionGroup.MobImpassable, out entity));
|
|
Assert.NotNull(entity);
|
|
|
|
Assert.NotNull(sEntityManager.SpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.MobImpassable));
|
|
Assert.True(sEntityManager.TrySpawnIfUnobstructed(null, mapCoordinates, CollisionGroup.MobImpassable, out entity));
|
|
Assert.NotNull(entity);
|
|
});
|
|
}
|
|
}
|
|
}
|