示例#1
0
        public void ShouldThrowArgumentNullExceptionWhenCodeMakerShieldIsNull()
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            //Act
            void Action() => decodingBoard.CodeMaker(null);

            var exception = Record.Exception(Action);

            //Assert
            exception.Should().NotBeNull();
            exception.Should().BeOfType <ArgumentNullException>();
        }
示例#2
0
        public void ShouldCreateShieldWhenCodeMakerPlaysValidShield()
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new CodePeg[4];
            var shield = new Shield(colors);

            //Act
            decodingBoard.CodeMaker(shield);

            //Assert
            decodingBoard.Shield.Should().NotBeNull();
            decodingBoard.Shield.Should().Be(shield);
        }
示例#3
0
        public void ShouldThrowArgumentExceptionWhenCodeMakerShieldIsDifferentThanConfig(int shieldSize)
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new CodePeg[shieldSize];
            var shield = new Shield(colors);

            //Act
            void Action() => decodingBoard.CodeMaker(shield);

            var exception = Record.Exception(Action);

            //Assert
            exception.Should().BeOfType <ArgumentException>();
        }
示例#4
0
        public void ShouldFindThreeWhiteKeyPegsWhenCodeColorMatchesThreeOtherShieldPositions(CodePeg[] code)
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new[] { CodePeg.Black, CodePeg.Blue, CodePeg.Green, CodePeg.White };
            var shield = new Shield(colors);

            decodingBoard.CodeMaker(shield);

            //Act
            var result = decodingBoard.CodeBreaker(code);

            //Assert
            result.Should().NotBeNull();
            result.WhiteKeyPegs.Should().Be(3);
        }
示例#5
0
        public void ShouldNotSolveSecretCodeWhenResponseBlackPegsNotEqualsShieldCount(int blackKeyPegs, int whiteKeyPegs)
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new[] { CodePeg.Black, CodePeg.Blue, CodePeg.Green, CodePeg.White };
            var shield = new Shield(colors);

            decodingBoard.CodeMaker(shield);

            var response = new Response(blackKeyPegs, whiteKeyPegs);

            //Act
            var result = decodingBoard.HasSolvedSecretCode(response);

            //Assert
            result.Should().BeFalse();
        }
示例#6
0
        public void ShouldThrowArgumentNullExceptionWhenCodeBreakerCodeIsNull()
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new[] { CodePeg.Black, CodePeg.Blue, CodePeg.Green, CodePeg.White };
            var shield = new Shield(colors);

            decodingBoard.CodeMaker(shield);

            //Act
            void Action() => decodingBoard.CodeBreaker(null);

            var exception = Record.Exception(Action);

            //Assert
            exception.Should().BeOfType <ArgumentNullException>();
        }
示例#7
0
        public void ShouldFindAllBlackKeyPegsWhenAllCodeColorsMatchShieldPosition()
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new[] { CodePeg.Black, CodePeg.Blue, CodePeg.Green, CodePeg.White };
            var shield = new Shield(colors);

            decodingBoard.CodeMaker(shield);

            var code = new[] { CodePeg.Black, CodePeg.Blue, CodePeg.Green, CodePeg.White };

            //Act
            var result = decodingBoard.CodeBreaker(code);

            //Assert
            result.Should().NotBeNull();
            result.BlackKeyPegs.Should().Be(colors.Length);
            result.WhiteKeyPegs.Should().Be(0);
        }
示例#8
0
        public void ShouldThrowArgumentExceptionWhenResponseTotalKeyPegsOutsideBoundaries(int blackKeyPegs, int whiteKeyPegs)
        {
            //Arrange
            var boardConfig   = new BoardConfig(4, 10);
            var decodingBoard = new DecodingBoard(boardConfig);

            var colors = new[] { CodePeg.Black, CodePeg.Blue, CodePeg.Green, CodePeg.White };
            var shield = new Shield(colors);

            decodingBoard.CodeMaker(shield);

            var response = new Response(blackKeyPegs, whiteKeyPegs);

            //Act
            void Action() => decodingBoard.HasSolvedSecretCode(response);

            var exception = Record.Exception(Action);

            //Assert
            exception.Should().BeOfType <ArgumentException>();
        }