コード例 #1
0
        public void ScoresSpare_IsSpare()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "3", "/");

            //Act
            // Assert
            Assert.IsTrue(newFrame.IsSpare);
        }
コード例 #2
0
        public void ScoresStrike_IsStrike()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "x");

            //Act
            // Assert
            Assert.IsTrue(newFrame.IsStrike);
        }
コード例 #3
0
        public void ScoresTwoStrikes_ThenOpen_ScoresCorrectly()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "x", "x", "5");

            //Act
            var score = newFrame.ScoreFrame();

            // Assert
            Assert.AreEqual(25, score);
        }
コード例 #4
0
        public void ScoresStrike_ThenSpare_ScoresCorrectly()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "x", "3", "/");

            //Act
            var score = newFrame.ScoreFrame();

            // Assert
            Assert.AreEqual(20, score);
        }
コード例 #5
0
        public void ScoresThreeStrikes_ScoresCorrectly()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "x", "x", "x");

            //Act
            var score = newFrame.ScoreFrame();

            // Assert
            Assert.AreEqual(30, score);
        }
コード例 #6
0
        public void ScoresOpenFrame_ReturnsCorrectValue()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "7", "1");

            //Act
            var score = newFrame.ScoreFrame();

            // Assert
            Assert.AreEqual(8, score);
        }
コード例 #7
0
        public void ScoresTwoGutters_Returns0()
        {
            // Arrange
            var newFrame = new TenthFrame(0, _acceptableMarks, "0", "0");

            //Act
            var score = newFrame.ScoreFrame();

            // Assert
            Assert.AreEqual(0, score);
        }
コード例 #8
0
        public void TenthFrame_MaxRollsCountReached_CanRollIsFalse()
        {
            //Arrange
            var frame = new TenthFrame();

            frame.AddRoll(10);

            //Act
            frame.AddRoll(3);
            frame.AddRoll(3);

            //Assert
            Assert.False(frame.CanRoll);
        }
コード例 #9
0
        public void TenthFrame_Rolls_CorrectScoreReturned()
        {
            //Arrange
            var tenthFrame = new TenthFrame();

            //Act
            tenthFrame.AddRoll(10);
            tenthFrame.AddRoll(10);
            tenthFrame.AddRoll(10);

            //Assert
            Assert.Equal(30, tenthFrame.Score);
            Assert.Equal(10, tenthFrame.Number);
        }
コード例 #10
0
        public void ThridMarkShouldNotExist_ThrowsException()
        {
            // Arrange
            Exception expectedException = null;

            //Act
            try
            {
                var newFrame = new TenthFrame(0, _acceptableMarks, "1", "7", "1");
            }
            catch (ArgumentException ex)
            {
                expectedException = ex;
            }

            // Assert
            Assert.IsNotNull(expectedException);
        }
コード例 #11
0
        public void TenthFrame_Spare_OneExtraRollAllowed()
        {
            //Arrange
            var frame = new TenthFrame();

            frame.AddRoll(4);
            frame.AddRoll(6);

            //Act
            frame.AddRoll(3);
            Action act = () => frame.AddRoll(5);

            //Assert
            var expectedMessage = "No more rolls can be added";

            act.Should().Throw <RollOutOfRangeException>()
            .And
            .Message.Should().ContainEquivalentOf(expectedMessage);
        }
コード例 #12
0
        public void SecondMark_ShouldNotBeStrike_ThrowsException()
        {
            // Arrange
            Exception expectedException = null;

            //Act
            try
            {
                var newFrame = new TenthFrame(0, _acceptableMarks, "1", "X");
            }
            catch (ArgumentException ex)
            {
                expectedException = ex;
            }

            // Assert
            Assert.IsNotNull(expectedException);
            Assert.IsTrue(expectedException.Message == "Second mark in tenth frame should not be strike");
        }
コード例 #13
0
 private static void GetFormattedFrames(IList <Frame> frames, TenthFrame lastFrame)
 {
     foreach (var frame in frames)
     {
         FormatFrame(frame);
     }
     FormatFrame(lastFrame);
     //strikes
     if (lastFrame.ThirdScore.ToLower() == "x" || lastFrame.FirstScore == "10")
     {
         lastFrame.FirstScoreNumber = 10;
         lastFrame.Status           = ScoreType.Strike;
     }
     else
     {
         lastFrame.FirstScoreNumber = Convert.ToInt16(lastFrame.FirstScore);
         lastFrame.Status           = ScoreType.OpenFrame;
     }
 }
コード例 #14
0
        public void ScoresSpare_ThenSpare_ThrowsException()
        {
            // Arrange
            Exception expectedException = null;
            var       newFrame          = new TenthFrame(0, _acceptableMarks, "7", "/", "/");

            //Act
            try
            {
                var score = newFrame.ScoreFrame();
            }
            catch (ApplicationException ex)
            {
                expectedException = ex;
            }

            // Assert
            Assert.IsNotNull(expectedException);
        }
コード例 #15
0
        public static void CalculateScore(IList <Frame> frames, TenthFrame lastFrame)
        {
            GetFormattedFrames(frames, lastFrame);
            for (int i = 0; i < frames.Count; i++)
            {
                var nextFrameIndex = i + 1;
                switch (frames[i].Status)
                {
                case ScoreType.Strike:
                    frames[i].Total = 10;
                    if (nextFrameIndex < frames.Count)
                    {
                        frames[i].Total += frames[i + 1].FirstScoreNumber;
                        frames[i].Total += frames[i + 1].SecondScoreNumber;
                    }
                    break;

                case ScoreType.Spare:
                    frames[i].Total = 10;
                    if (nextFrameIndex < frames.Count)
                    {
                        frames[i].Total += frames[i + 1].FirstScoreNumber;
                    }
                    break;

                case ScoreType.OpenFrame:
                    frames[i].Total = frames[i]?.FirstScoreNumber + frames[i]?.SecondScoreNumber;
                    break;

                default:
                    frames[i].Total = 0;
                    break;
                }
                if (i != 0)
                {
                    frames[i].Total += frames[i - 1].Total;
                }
            }
        }