using NUnit.Framework; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.UnitTesting.Server; namespace Robust.Server.IntegrationTests.GameObjects { [TestFixture] internal sealed class ThrowingEntityDeletion_Test { private ISimulation _sim = default!; const string PROTOTYPES = @" - type: entity id: throwInAdd components: - type: DebugExceptionOnAdd - type: entity id: throwsInInitialize components: - type: DebugExceptionInitialize - type: entity id: throwsInStartup components: - type: DebugExceptionStartup "; [OneTimeSetUp] public void Setup() { _sim = RobustServerSimulation.NewSimulation() .RegisterComponents(f => { f.RegisterClass(); f.RegisterClass(); f.RegisterClass(); }) .RegisterEntitySystems(f => f.LoadExtraSystemType()) .RegisterPrototypes(protoMan => protoMan.LoadString(PROTOTYPES)) .InitializeInstance(); } [TestCase("throwInAdd")] [TestCase("throwsInInitialize")] [TestCase("throwsInStartup")] public void Test(string prototypeName) { var entMan = _sim.Resolve(); _sim.Resolve().System().CreateMap(out var map); Assert.That(() => entMan.SpawnEntity(prototypeName, new MapCoordinates(0, 0, map)), Throws.TypeOf()); Assert.That(entMan.GetEntities().Where(p => entMan.GetComponent(p).EntityPrototype?.ID == prototypeName), Is.Empty); } } }