Ejemplo n.º 1
0
        public void FulfillRoomBordersNoneMissingIntersect()
        {
            // two intersecting sidereqs met with only one tile (do nothing)
            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);
            Mock <TestRoomGen <ITiledGenContext> > roomGen = new Mock <TestRoomGen <ITiledGenContext> > {
                CallBase = true
            };

            roomGen.Setup(p => p.DigAtBorder(It.IsAny <ITiledGenContext>(), It.IsAny <Dir4>(), It.IsAny <int>()));
            string[] inGrid =
            {
                "XXXXXXXX",
                "XX.....X",
                "XX.....X",
                "XX.....X",
                "XXXX.XXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            TestGenContext testContext = TestGenContext.InitGridToContext(inGrid);

            testContext.SetTestRand(testRand.Object);
            roomGen.Object.PrepareSize(testRand.Object, new Loc(5, 4));
            roomGen.Object.SetLoc(new Loc(2, 1));

            // find where the class chose to dig
            roomGen.Object.ReceiveBorderRange(new IntRange(4, 7), Dir4.Down);
            roomGen.Object.ReceiveBorderRange(new IntRange(2, 5), Dir4.Down);
            roomGen.Object.FulfillRoomBorders(testContext, false);

            roomGen.Verify(p => p.DigAtBorder(It.IsAny <ITiledGenContext>(), It.IsAny <Dir4>(), It.IsAny <int>()), Times.Never());
        }
Ejemplo n.º 2
0
        public void DrawOnMap()
        {
            // verify pieces stay in contact even with adversarial rolls
            Mock <RoomGenCross <ITiledGenContext> > roomGen = new Mock <RoomGenCross <ITiledGenContext> > {
                CallBase = true
            };

            roomGen.Setup(p => p.SetRoomBorders(It.IsAny <ITiledGenContext>()));
            roomGen.Object.MajorWidth  = new RandRange(2, 6);
            roomGen.Object.MajorHeight = new RandRange(3, 9);
            roomGen.Object.MinorWidth  = new RandRange(1, 2);
            roomGen.Object.MinorHeight = new RandRange(1, 2);
            string[] inGrid =
            {
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            string[] outGrid =
            {
                "XXXXXXXX",
                "XX.....X",
                "XXXXXX.X",
                "XXXXXX.X",
                "XXXXXX.X",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);

            Moq.Language.ISetupSequentialResult <int> seq = testRand.SetupSequence(p => p.Next(1, 2));
            seq = seq.Returns(1);
            seq = seq.Returns(1);
            testRand.Setup(p => p.Next(5)).Returns(4);
            testRand.Setup(p => p.Next(4)).Returns(0);
            TestGenContext testContext = TestGenContext.InitGridToContext(inGrid);

            testContext.SetTestRand(testRand.Object);
            TestGenContext resultContext = TestGenContext.InitGridToContext(outGrid);

            roomGen.Object.PrepareSize(testContext.Rand, new Loc(5, 4));
            roomGen.Object.SetLoc(new Loc(2, 1));

            roomGen.Object.DrawOnMap(testContext);

            Assert.That(testContext.Tiles, Is.EqualTo(resultContext.Tiles));
            roomGen.Verify(p => p.SetRoomBorders(testContext), Times.Once());
            testRand.Verify(p => p.Next(1, 2), Times.Exactly(2));
            testRand.Verify(p => p.Next(5), Times.Exactly(1));
            testRand.Verify(p => p.Next(4), Times.Exactly(1));
        }
Ejemplo n.º 3
0
        public void DrawOnMapMin()
        {
            // verify it fills up the entire square area!
            var roomGen = new RoomGenBlocked <ITiledGenContext>
            {
                BlockWidth   = new RandRange(2),
                BlockHeight  = new RandRange(1),
                BlockTerrain = new TestTile(1),
            };

            string[] inGrid =
            {
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            string[] outGrid =
            {
                "XXXXXXXX",
                "X......X",
                "X.XX...X",
                "X......X",
                "X......X",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            TestGenContext testContext   = TestGenContext.InitGridToContext(inGrid);
            TestGenContext resultContext = TestGenContext.InitGridToContext(outGrid);

            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);

            testRand.Setup(p => p.Next(1, 1)).Returns(1);
            testRand.Setup(p => p.Next(2, 2)).Returns(2);
            testRand.Setup(p => p.Next(1, 3)).Returns(1);
            testRand.Setup(p => p.Next(1, 2)).Returns(1);

            testContext.SetTestRand(testRand.Object);
            roomGen.PrepareSize(testRand.Object, new Loc(6, 4));
            roomGen.SetLoc(new Loc(1, 1));

            roomGen.DrawOnMap(testContext);
            Assert.That(testContext.Tiles, Is.EqualTo(resultContext.Tiles));
            testRand.Verify(p => p.Next(1, 1), Times.Exactly(1));
            testRand.Verify(p => p.Next(2, 2), Times.Exactly(1));
            testRand.Verify(p => p.Next(1, 3), Times.Exactly(1));
            testRand.Verify(p => p.Next(1, 2), Times.Exactly(1));
        }
Ejemplo n.º 4
0
        public void FulfillRoomBordersNoneMultiMissingIntersect(int roll1, int roll2, int expected1, int expected2)
        {
            // full sidereq not met on one side, one adjacent sidereq not met on a corner tile
            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);

            Moq.Language.ISetupSequentialResult <int> seq = testRand.SetupSequence(p => p.Next(4));
            seq = seq.Returns(roll1);
            seq = testRand.SetupSequence(p => p.Next(3));
            seq = seq.Returns(roll2);
            seq = testRand.SetupSequence(p => p.Next(1));
            seq = seq.Returns(0);
            seq = seq.Returns(0);
            Mock <TestRoomGen <ITiledGenContext> > roomGen = new Mock <TestRoomGen <ITiledGenContext> > {
                CallBase = true
            };

            roomGen.Setup(p => p.DigAtBorder(It.IsAny <ITiledGenContext>(), It.IsAny <Dir4>(), It.IsAny <int>()));
            string[] inGrid =
            {
                "XXXXXXXX",
                "XX.....X",
                "XX....XX",
                "XX....XX",
                "XX.XXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            TestGenContext testContext = TestGenContext.InitGridToContext(inGrid);

            testContext.SetTestRand(testRand.Object);
            roomGen.Object.PrepareSize(testRand.Object, new Loc(5, 4));
            roomGen.Object.SetLoc(new Loc(2, 1));

            // find where the class chose to dig
            roomGen.Object.ReceiveBorderRange(new IntRange(3, 7), Dir4.Down);
            roomGen.Object.ReceiveBorderRange(new IntRange(2, 5), Dir4.Right);
            roomGen.Object.FulfillRoomBorders(testContext, false);

            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Down, expected1), Times.Once());
            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Right, expected2), Times.Once());
            testRand.Verify(p => p.Next(4), Times.Exactly(1));
            testRand.Verify(p => p.Next(3), Times.Exactly(1));
            testRand.Verify(p => p.Next(1), Times.Exactly(2));
        }
Ejemplo n.º 5
0
        public void FulfillRoomBordersNoneOneMissingIntersect()
        {
            // two intersecting sidereqs not met
            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);

            Moq.Language.ISetupSequentialResult <int> seq = testRand.SetupSequence(p => p.Next(2));
            seq = seq.Returns(1);
            seq = seq.Returns(0);
            testRand.Setup(p => p.Next(1)).Returns(0);
            Mock <TestRoomGen <ITiledGenContext> > roomGen = new Mock <TestRoomGen <ITiledGenContext> > {
                CallBase = true
            };

            roomGen.Setup(p => p.DigAtBorder(It.IsAny <ITiledGenContext>(), It.IsAny <Dir4>(), It.IsAny <int>()));
            string[] inGrid =
            {
                "XXXXXXXX",
                "XX.....X",
                "XX.....X",
                "XX.....X",
                "XX.XXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            TestGenContext testContext = TestGenContext.InitGridToContext(inGrid);

            testContext.SetTestRand(testRand.Object);
            roomGen.Object.PrepareSize(testRand.Object, new Loc(5, 4));
            roomGen.Object.SetLoc(new Loc(2, 1));

            // find where the class chose to dig
            roomGen.Object.ReceiveBorderRange(new IntRange(3, 6), Dir4.Down);
            roomGen.Object.ReceiveBorderRange(new IntRange(4, 7), Dir4.Down);
            roomGen.Object.FulfillRoomBorders(testContext, false);

            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Down, 4), Times.Once());
            testRand.Verify(p => p.Next(2), Times.Exactly(2));
            testRand.Verify(p => p.Next(1), Times.Exactly(1));
        }
Ejemplo n.º 6
0
        public void FulfillRoomBordersNoneOneMissing(int fulfillRoll, int expectedX)
        {
            // one sidereq not met (with rng)
            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);

            testRand.Setup(p => p.Next(1)).Returns(0);
            testRand.Setup(p => p.Next(4)).Returns(fulfillRoll);
            Mock <TestRoomGen <ITiledGenContext> > roomGen = new Mock <TestRoomGen <ITiledGenContext> > {
                CallBase = true
            };

            roomGen.Setup(p => p.DigAtBorder(It.IsAny <ITiledGenContext>(), It.IsAny <Dir4>(), It.IsAny <int>()));

            string[] inGrid =
            {
                "XXXXXXXX",
                "XX.....X",
                "XX.....X",
                "XX.....X",
                "XX.XXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            TestGenContext testContext = TestGenContext.InitGridToContext(inGrid);

            testContext.SetTestRand(testRand.Object);
            roomGen.Object.PrepareSize(testRand.Object, new Loc(5, 4));
            roomGen.Object.SetLoc(new Loc(2, 1));

            // find where the class chose to dig
            roomGen.Object.ReceiveBorderRange(new IntRange(3, 7), Dir4.Down);
            roomGen.Object.FulfillRoomBorders(testContext, false);

            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Down, expectedX), Times.Once());
            testRand.Verify(p => p.Next(1), Times.Exactly(1));
            testRand.Verify(p => p.Next(4), Times.Exactly(1));
        }
Ejemplo n.º 7
0
        public void FulfillRoomBordersNoneOneMissingFillAll()
        {
            // one sidereq not met, fulfilled completely, only fulfillable borders
            Mock <IRandom> testRand = new Mock <IRandom>(MockBehavior.Strict);
            Mock <TestRoomGen <ITiledGenContext> > roomGen = new Mock <TestRoomGen <ITiledGenContext> > {
                CallBase = true
            };

            roomGen.Setup(p => p.DigAtBorder(It.IsAny <ITiledGenContext>(), It.IsAny <Dir4>(), It.IsAny <int>()));
            string[] inGrid =
            {
                "XXXXXXXX",
                "XX.....X",
                "XX.....X",
                "XX.....X",
                "XXXXXXXX",
                "XXXXXXXX",
                "XXXXXXXX",
            };

            TestGenContext testContext = TestGenContext.InitGridToContext(inGrid);

            testContext.SetTestRand(testRand.Object);
            roomGen.Object.PrepareSize(testRand.Object, new Loc(5, 4));
            roomGen.Object.SetLoc(new Loc(2, 1));
            roomGen.Object.PublicFulfillableBorder[Dir4.Down][2] = false;
            roomGen.Object.PublicFulfillableBorder[Dir4.Down][3] = false;

            // find where the class chose to dig
            roomGen.Object.ReceiveBorderRange(new IntRange(2, 7), Dir4.Down);
            roomGen.Object.FulfillRoomBorders(testContext, true);

            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Down, 2), Times.Once());
            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Down, 3), Times.Once());
            roomGen.Verify(p => p.DigAtBorder(testContext, Dir4.Down, 6), Times.Once());
        }