Exemple #1
0
        public HintField([NotNull] Func <IMineField, IHintCompass> factory,
                         [NotNull] IMineField mineField)
        {
            m_HintCompass = factory(mineField);

            m_Field = ToHintField(mineField);
        }
        public HintField([NotNull] IHintCompassFactory factory,
                         [NotNull] IMineField mineField)
        {
            m_HintCompass = factory.Create(mineField);

            m_Field = ToHintField(mineField);
        }
Exemple #3
0
        private HintField CreateSut(IMineField mineField)
        {
            var hintCompass = new HintCompass(mineField);
            var hintField   = new HintField(HintCompassFactory,
                                            mineField);

            return(hintField);
        }
Exemple #4
0
        private DisplayHintField CreateSut(IMineField mineField)
        {
            var        factory          = Container.Resolve <IHintFieldFactory>();
            IHintField hintField        = factory.Create(mineField);
            var        displayHintField = new DisplayHintField(hintField);

            return(displayHintField);
        }
Exemple #5
0
        public PlayingField([NotNull] IMineField mineField)
        {
            m_MineField = mineField;
            m_FieldMask = new Field <bool>(mineField.RowsCount,
                                           mineField.ColumnsCount);

            Status = GameStatus.Player.SelectedFieldWithoutMine;
        }
Exemple #6
0
        private IMineField CreateMineField([NotNull] string text)
        {
            var converter = new StringToMineFieldConverter();

            IMineField minefield = converter.ToMineField(text);

            return(minefield);
        }
        private IHintField CreateHintField([NotNull] IMineField mineField)
        {
            var factory   = new HintCompassFactory();
            var hintField = new HintField(factory,
                                          mineField);

            return(hintField);
        }
Exemple #8
0
 private int AddOneIfDirectionIsSouth([NotNull] IMineField mineField,
                                      int rowIndex,
                                      int columnIndex)
 {
     return(AddOneIfMineIs(mineField,
                           IsMineSouth,
                           rowIndex,
                           columnIndex));
 }
Exemple #9
0
 private int AddOneIfDirectionIsNorthWest([NotNull] IMineField mineField,
                                          int rowIndex,
                                          int columnIndex)
 {
     return(AddOneIfMineIs(mineField,
                           IsMineNorthWest,
                           rowIndex,
                           columnIndex));
 }
Exemple #10
0
        public void ColumnsCount_ReturnsCount_ForMineField()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_MineFieldWithDifferentRowColumnCount);
            PlayingField sut       = CreateSut(mineField);

            // Act
            // Assert
            Assert.AreEqual(2,
                            sut.ColumnsCount);
        }
Exemple #11
0
        public void CreateMineField_SetStatus_WhenCalled()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_MineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            // Act
            // Assert
            Assert.AreEqual(GameStatus.Player.SelectedFieldWithoutMine,
                            sut.Status);
        }
        public void ColumnsCount_ReturnsColumnsCount_ForHintField()
        {
            // Arrange
            IMineField field = CreateMineField(m_MineFieldWithTwoMines);
            HintField  sut   = CreateSut(field);

            // Act
            // Assert
            Assert.AreEqual(4,
                            sut.RowsCount);
        }
        public void GetHintFor_Throws_ForInvalidRowAndColumn(int row,
                                                             int column)
        {
            // Arrange
            IMineField mineField = CreateMineField(m_MineFieldWithTwoMines);
            HintField  sut       = CreateSut(mineField);

            // Act
            // Assert
            Assert.Throws <ArgumentException>(() => sut.GetHintFor(row,
                                                                   column));
        }
Exemple #14
0
        public void HasPlayerWon_ReturnsFalse_ForNoneSelected()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_SmallMineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            // Act
            bool actual = sut.HasPlayerWon();

            // Assert
            Assert.False(actual);
        }
Exemple #15
0
        private static int AddOneIfMineIs([NotNull] IMineField mineField,
                                          Func <IMineField, int, int, bool> isMineInDirection,
                                          int rowIndex,
                                          int columnIndex)
        {
            bool isThereMine = isMineInDirection(mineField,
                                                 rowIndex,
                                                 columnIndex);

            return(isThereMine
                       ? 1
                       : 0);
        }
Exemple #16
0
        public void ToString_ReturnsString_ForMineField()
        {
            // Arrange
            IMineField       mineField = CreateMineField(m_MineFieldWithTwoMines);
            DisplayHintField sut       = CreateSut(mineField);

            // Act
            string actual = sut.ToString();

            // Assert
            Assert.AreEqual(m_HintFieldWithTwoMines,
                            actual);
        }
        private HintField CreateSut(IMineField mineField)
        {
            var hintCompass = new HintCompass(mineField); // todo replace with Substitute?
            var factory     = Substitute.For <IHintCompassFactory>();

            factory.Create(Arg.Any <IMineField>())
            .Returns(hintCompass);

            var hintField = new HintField(factory,
                                          mineField);

            return(hintField);
        }
Exemple #18
0
        public void CreateMineField(int numberOfRows,
                                    int numberOfColumns,
                                    int numberOfMines)
        {
            m_MineField = m_MineFieldFactory.Create(numberOfRows,
                                                    numberOfColumns);

            IMineLayer mineLayer = m_MineLayerFactory.Create(m_MineField);

            mineLayer.PutMinesAtRandomLocation(numberOfMines);

            CreateCommon();
        }
Exemple #19
0
        public void SelectedField_DoesNotUpdateStatusByDefault_WhenCalled()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_MineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            // Act
            sut.SelectField(1,
                            2);

            // Assert
            Assert.AreEqual(GameStatus.Player.SelectedFieldWithoutMine,
                            sut.Status);
        }
Exemple #20
0
        public void UserSelectedField_SetsStatusToSelectedFieldWithMine_WhenSelectedFieldWithMine()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_SmallMineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            // Act
            sut.SelectField(1,
                            1);

            // Assert
            Assert.AreEqual(GameStatus.Player.SelectedFieldWithMine,
                            sut.Status);
        }
        public void GetHintFor_ReturnsHintNumber_ForRowAndColumn(int row,
                                                                 int column,
                                                                 int expected)
        {
            // Arrange
            IMineField mineField = CreateMineField(m_MineFieldWithTwoMines);
            HintField  sut       = CreateSut(mineField);

            // Act
            int actual = sut.GetHintFor(row,
                                        column);

            // Assert
            Assert.AreEqual(expected,
                            actual);
        }
        public void ToString_ReturnsString_ForNoneSelected()
        {
            // Arrange
            IMineField          mineField    = CreateMineField(m_SmallMineFieldWithTwoMines);
            IHintField          hintField    = CreateHintField(mineField);
            PlayingField        playingField = CreatePlayingField(mineField);
            DisplayPlayingField sut          = CreateSut(hintField,
                                                         playingField);

            // Act
            string actual = sut.ToString();

            // Assert
            Assert.AreEqual("..\r\n..\r\n",
                            actual);
        }
Exemple #23
0
        public void GetMineCountFor_ReturnsMineCount_For3x3AndMinesAroundCentre(int row,
                                                                                int column,
                                                                                int expected)
        {
            // Arrange
            IMineField  mineField = CreateMineFieldWith3x3AndMinesAroundCentre();
            HintCompass sut       = CreateSut(mineField);

            // Act
            int actual = sut.GetMineCountFor(row,
                                             column);

            // Assert
            Assert.AreEqual(expected,
                            actual);
        }
Exemple #24
0
        public HintCompass([NotNull] IMineField mineField)
        {
            m_MineField = mineField;

            m_Functions = new Func <IMineField, int, int, int>[]
            {
                AddOneIfDirectionIsNorth,
                AddOneIfDirectionIsNorthEast,
                AddOneIfDirectionIsEast,
                AddOneIfDirectionIsSouthEast,
                AddOneIfDirectionIsSouth,
                AddOneIfDirectionIsSouthWest,
                AddOneIfDirectionIsWest,
                AddOneIfDirectionIsNorthWest
            };
        }
Exemple #25
0
        public void ToString_ReturnsMineFieldAsString_ForEmptyMineField()
        {
            // Arrange
            string expected = ".." +
                              m_NewLine +
                              ".." +
                              m_NewLine;
            IMineField       mineField = CreateEmptyMineField();
            DisplayMineField sut       = CreateSut(mineField);

            // Act
            string actual = sut.ToString();

            // Assert
            Assert.AreEqual(expected,
                            actual);
        }
        private Field <int> ToHintField([NotNull] IMineField mineField)
        {
            var hints = new Field <int>(mineField.RowsCount,
                                        mineField.ColumnsCount);

            for (var rows = 0; rows < hints.RowsCount; rows++)
            {
                for (var columns = 0; columns < hints.ColumnsCount; columns++)
                {
                    hints [rows,
                           columns] = m_HintCompass.GetMineCountFor(rows,
                                                                    columns);
                }
            }

            return(hints);
        }
Exemple #27
0
        public void HasPlayerWon_ReturnsTrue_ForAllSelected()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_SmallMineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            sut.SelectField(0,
                            1);
            sut.SelectField(1,
                            0);

            // Act
            bool actual = sut.HasPlayerWon();

            // Assert
            Assert.True(actual);
        }
Exemple #28
0
        public void SelectField_MarksFieldAsSelected_ForRowAndColumn(int row,
                                                                     int column,
                                                                     bool expected)
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_MineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            // Act
            sut.SelectField(row,
                            column);

            // Assert
            Assert.AreEqual(expected,
                            sut.IsSelected(row,
                                           column));
        }
Exemple #29
0
        public void UserSelectedField_UpdatesStatus_WhenPlayerHasWon()
        {
            // Arrange
            IMineField   mineField = CreateMineField(m_SmallMineFieldWithTwoMines);
            PlayingField sut       = CreateSut(mineField);

            sut.SelectField(0,
                            1);

            // Act
            sut.SelectField(1,
                            0);

            // Assert
            Assert.AreEqual(GameStatus.Player.HasWon,
                            sut.Status);
        }
Exemple #30
0
        public IMineField ToMineField(string text)
        {
            string[] lines = text.Split('\n');

            var noWhiteSpaces = new List <string>();

            foreach (string line in lines)
            {
                string noWhiteSpace = line.TrimEnd('\r',
                                                   '\n');

                noWhiteSpaces.Add(noWhiteSpace);
            }

            IMineField mineField = LinesToMineField(noWhiteSpaces.ToArray());

            return(mineField);
        }