public void Process_PainterDrawMapIsCalledWithCorrectMapImage() { var parameters = new DungeonParameters(); var dungeon = new FakeDungeon(5, 4); var mapBuilder = Substitute.For<IMapBuilder>(); mapBuilder.Build(parameters).Returns(dungeon); var populator = Substitute.For<IDungeonPopulator>(); var character = new Character { Location = new Point(1, 1) }; populator.WhenForAnyArgs(it => it.Fill(Arg.Any<IGameDungeon>())) .Do(d => { d.Arg<IGameDungeon>().Character = character; }); var painter = Substitute.For<IMapPainter>(); var processor = new Processor( mapBuilder, populator, painter); processor.Initialize(parameters); processor.Process(GameAction.None); painter.Received(1).DrawMap(Arg.Is<MapImage>(d => d.Width == dungeon.Width && d.Height == dungeon.Height && d[1, 1].Type == XType.Character)); }
public void Fill_UpstairsAdded() { var populator = new DungeonPopulator(); var dungeon = new FakeDungeon(5, 7); var points = new[] { new Point(2, 2), new Point(3, 3) }; foreach (var p in points) dungeon[p].Type = XType.Empty; populator.Fill(dungeon); Assert.That(dungeon, Has.Exactly(1).Matches<Cell>(cell => cell.Type == XType.StairsUp && points.Contains(cell.Location))); }
public void Constructor_CreatesCorrectCells() { var fake = new FakeDungeon(3, 3); fake[0, 1].Type = XType.Character; fake[0, 2].Type = XType.Empty; fake[1, 1].Type = XType.DoorClosed; fake[1, 2].Type = XType.Wall; var dungeon = new Dungeon(fake); Assert.That(dungeon.Select(c => c.Type).ToList(), Is.EquivalentTo(fake.Select(c => c.Type))); Assert.That(dungeon, Has.Property(nameof(dungeon.Width)).EqualTo(fake.Width) .And.Property(nameof(dungeon.Height)).EqualTo(fake.Height)); }
public void Initialize_CorrectDungeonIsSet() { var dungeon = new FakeDungeon(); var mapBuilder = Substitute.For<IMapBuilder>(); mapBuilder.Build(Arg.Any<DungeonParameters>()) .Returns(dungeon); var processor = new Processor( mapBuilder, Substitute.For<IDungeonPopulator>(), Substitute.For<IMapPainter>()); processor.Initialize(new DungeonParameters()); Assert.That(processor.Dungeon, Has.Property(nameof(Dungeon.Size)).EqualTo(dungeon.Size)); }
public void Initialize_PopulatorIsCalled() { var parameters = new DungeonParameters(); var dungeon = new FakeDungeon(); var mapBuilder = Substitute.For<IMapBuilder>(); mapBuilder.Build(parameters).Returns(dungeon); var populator = Substitute.For<IDungeonPopulator>(); var processor = new Processor( mapBuilder, populator, Substitute.For<IMapPainter>()); processor.Initialize(parameters); populator.Received(1).Fill( Arg.Is<IGameDungeon>(d => d.Size == dungeon.Size)); }
public void Fill_CharacterAdded() { var populator = new DungeonPopulator(); var dungeon = new FakeDungeon(5, 7); var points = new[] { new Point(2, 2), new Point(3, 3) }; foreach (var p in points) dungeon[p].Type = XType.Empty; populator.Fill(dungeon); var expectedLocation = dungeon .Single(cell => cell.Type == XType.StairsUp) .Location; Assert.That(dungeon.Character, Is.Not.Null .And.With.Property(nameof(Character.Location)) .EqualTo(expectedLocation)); }
public void Process_PainterDrawMessageIsCalled() { var parameters = new DungeonParameters(); var dungeon = new FakeDungeon(5, 4); var mapBuilder = Substitute.For<IMapBuilder>(); mapBuilder.Build(parameters).Returns(dungeon); var populator = Substitute.For<IDungeonPopulator>(); var character = new Character { Location = new Point(1, 1) }; populator.WhenForAnyArgs(it => it.Fill(Arg.Any<IGameDungeon>())) .Do(d => { d.Arg<IGameDungeon>().Character = character; }); var painter = Substitute.For<IMapPainter>(); var processor = new Processor( mapBuilder, populator, painter); processor.Initialize(parameters); processor.Process(GameAction.None); ////TODO test precise message painter.Received(1).DrawMessage(Arg.Any<GameMessage>()); }