public RoomObject(RoomObjectTypes type, int x, int y, RoomObjectProperty[] properties) { _Type = type; _X = x; _Y = y; _Properties = properties; }
public void GracefulFailure_RoomObjects(RoomObjectTypes type, int x, int y, string[] properties) { var parsedProps = new List <RoomObjectProperty>(); foreach (var prop in properties) { var ix = prop.IndexOf('='); var name = prop.Substring(0, ix); var val = prop.Substring(ix + 1); parsedProps.Add(new RoomObjectProperty(name, val)); } var def = new RoomObject(type, x, y, parsedProps.ToArray()); var needCalls = CallsNeededForSuccess(); Assert.True(needCalls > 0); for (var i = 0; i < needCalls; i++) { var game = MakeGameState(); var manager = new EntityManager(new _IIdIssuer(), 100); manager.FailAfterCalls = i; game.EntityManager = manager; // pre condition Assert.Equal(0, manager.NumLiveEntities); Assert.Equal(0, manager.NumLiveComponents); var createRes = ObjectCreator.Create(game, def, new Entity[100]); Assert.False(createRes.Success); // post condition Assert.Equal(0, manager.NumLiveEntities); Assert.Equal(0, manager.NumLiveComponents); } // normal invocation, just count how much we need to succeed int CallsNeededForSuccess() { var game = MakeGameState(); var manager = new EntityManager(new _IIdIssuer(), 100); game.EntityManager = manager; game.AnimationManager = new _AnimationManager(); var size = ObjectCreator.Create(game, def, new Entity[100]); Assert.True(size.Success); return(manager.FallibleCallCount); } // make a bare minimum game state GameState MakeGameState() { var game = new GameState(); // directly setting these so there's no player allocated game.AnimationManager = new _AnimationManager(); game.AssetMeasurer = new _AssetMeasurer(); return(game); } }