예제 #1
0
 public void ThrowExceptionWhenStartBeforeTurnOn()
 {
     //Given
     ITimer timer = new Models.Timer();
     //When & Then
     //Assert.Throws(typeof(InvalidOperationException), () => { timer.Start(); });//lambda expression
 }
예제 #2
0
        public void TimeWillBeDecrementedAfterAPauseForPlayer1()
        {
            //Given
            ITimer timer = new Models.Timer();

            //When
            timer.TurnOn();
            timer.Start();
            TimeSpan timeInPause = timer.TimeLeftPlayerWhite;

            Thread.Sleep(250);
            timer.Pause();
            Assert.True(timer.TimeLeftPlayerWhite <= TimeSpan.FromMilliseconds(timeInPause.TotalMilliseconds - 250));
            timer.Start();
            Thread.Sleep(250);

            //Then

            /*
             * Assert.InRange(
             *  timer.TimeLeftPlayer1,
             *  TimeSpan.FromMilliseconds(0),
             *  TimeSpan.FromMilliseconds(timeInPause.TotalMilliseconds-500)
             * );
             */
            Assert.True(timer.TimeLeftPlayerWhite <= TimeSpan.FromMilliseconds(timeInPause.TotalMilliseconds - 500));
        }
예제 #3
0
        public void BothPlayerTimersSettedAtInitialTime()
        {
            //Given
            ITimer timer = new Models.Timer();

            //When
            timer.TurnOn();
            //Then
            Assert.Equal(TimeSpan.FromMinutes(Models.Timer.initialDefaultTime), timer.TimeLeftPlayerBlack);
            Assert.Equal(TimeSpan.FromMinutes(Models.Timer.initialDefaultTime), timer.TimeLeftPlayerWhite);
        }
예제 #4
0
        public void TimeWontBeDecrementedForPlayer1InPause()
        {
            //Given
            ITimer timer = new Models.Timer();

            //When
            timer.TurnOn();
            timer.Start();
            Thread.Sleep(100);
            timer.Pause();
            TimeSpan timeInPause = timer.TimeLeftPlayerWhite;

            Thread.Sleep(500);
            //Then
            Assert.Equal(timer.TimeLeftPlayerWhite, timeInPause);
        }
예제 #5
0
        public void TimeWillBeDecrementedForPlayer1()
        {
            //Given
            ITimer timer = new Models.Timer();

            //When
            timer.TurnOn();
            timer.Start();
            Thread.Sleep(500);
            //Then
            Assert.InRange(
                timer.TimeLeftPlayerWhite,
                TimeSpan.FromMilliseconds(0),
                TimeSpan.FromMilliseconds(299500)
                );
        }
예제 #6
0
        public void ThrowTimeIsUpEvent()
        {
            //Given
            ITimer timer = new Models.Timer(TimeSpan.FromMilliseconds(500));

            //When
            timer.TurnOn();
            timer.Start();

            //Then
            bool invoked = false;

            timer.TimeIsUp += (sender, args) =>
            {
                invoked = true;
            };
            Thread.Sleep(2000);
            Assert.True(invoked);
        }
예제 #7
0
        protected override TimeLogState GetInitialState()
        {
            var timeLog = new List <Models.Timer>();

            for (int i = 0; i < 12; i++)
            {
                var t    = (int)i % 5;
                var date = DateTime.Now;
                var time = new Models.Timer()
                {
                    StartTime = date.AddDays(-t),
                    EndTime   = date.AddDays(-t).AddHours(i),
                    Title     = $"Task {i}",
                    SystemId  = Guid.NewGuid()
                };
                timeLog.Add(time);
            }

            return(new TimeLogState(timeLog));
        }
예제 #8
0
        public void FiveMinutesAfterReset()
        {
            //Given
            ITimer timer = new Models.Timer();

            //When
            timer.TurnOn(); //(Player 1)
            timer.Start();
            Thread.Sleep(600);
            timer.SwitchPlayerTurn();   //SWITCH (Player 2)
            Thread.Sleep(800);
            timer.Pause();
            //Then
            Assert.True(timer.TimeLeftPlayerWhite.TotalMilliseconds <= TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 600); //player 1 time is decreased by the sum from the game start (200+400)
            Assert.True(timer.TimeLeftPlayerBlack.TotalMilliseconds <= TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 800); //player 2 time is decreased by the sum from the game start (600+300)

            //And When
            timer.Reset();
            Thread.Sleep(300);
            //Then
            Assert.Equal(timer.TimeLeftPlayerBlack, TimeSpan.FromMinutes(Models.Timer.initialDefaultTime));
            Assert.Equal(timer.TimeLeftPlayerWhite, TimeSpan.FromMinutes(Models.Timer.initialDefaultTime));
        }
예제 #9
0
        public void WhenPlayerSwitchOccourPreviousPlayerTimerIsBlocked()
        {
            //Given
            ITimer timer = new Models.Timer();

            //When
            timer.TurnOn(); //(Player 1)
            timer.Start();
            Thread.Sleep(200);
            timer.Pause();
            TimeSpan firstTimePlayer1 = timer.TimeLeftPlayerWhite;
            TimeSpan firstTimePlayer2 = timer.TimeLeftPlayerBlack;

            //Then
            Assert.Equal(firstTimePlayer2, TimeSpan.FromMinutes(Models.Timer.initialDefaultTime));                                            //player 2 still have 5 minutes (initial time)
            Assert.True(firstTimePlayer1.TotalMilliseconds <= TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 200); //player 1 time is decreased
            //And When
            timer.SwitchPlayerTurn();                                                                                                         //SWITCH (Player 2)
            timer.Start();
            Thread.Sleep(300);
            timer.Pause();
            TimeSpan secondTimePlayer1 = timer.TimeLeftPlayerWhite;
            TimeSpan secondTimePlayer2 = timer.TimeLeftPlayerBlack;

            //Then
            Assert.Equal(firstTimePlayer1, timer.TimeLeftPlayerWhite);                                              //player 1 still have the same previous time
            Assert.True(timer.TimeLeftPlayerBlack.TotalMilliseconds <= (firstTimePlayer2.TotalMilliseconds - 300)); //player 2 time is decreased
            //And When
            timer.SwitchPlayerTurn();                                                                               //SWITCH (Player 1)
            timer.Start();
            Thread.Sleep(400);
            timer.Pause();
            TimeSpan thirdTimePlayer1 = timer.TimeLeftPlayerWhite;
            TimeSpan thirdTimePlayer2 = timer.TimeLeftPlayerBlack;

            //Then
            Assert.Equal(secondTimePlayer2, timer.TimeLeftPlayerBlack);                                            //player 2 still have the same previous time
            Assert.True(timer.TimeLeftPlayerWhite.TotalMilliseconds <= secondTimePlayer1.TotalMilliseconds - 400); //player 1 time is decreased
            //And When
            timer.SwitchPlayerTurn();                                                                              //SWITCH (Player 2)
            timer.Start();
            Thread.Sleep(600);
            timer.Pause();
            //Then
            Assert.Equal(thirdTimePlayer1, timer.TimeLeftPlayerWhite);                                            //player 1 still have the same timer
            Assert.True(timer.TimeLeftPlayerBlack.TotalMilliseconds <= thirdTimePlayer2.TotalMilliseconds - 600); //player 1 time is decreased

            //LAST THEN
            Assert.True(timer.TimeLeftPlayerWhite.TotalMilliseconds <= TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 600); //player 1 time is decreased by the sum from the game start (200+400)
            Assert.True(timer.TimeLeftPlayerBlack.TotalMilliseconds <= TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 900); //player 2 time is decreased by the sum from the game start (600+300)

            Assert.InRange(
                timer.TimeLeftPlayerWhite,
                TimeSpan.FromMilliseconds(0),
                TimeSpan.FromMilliseconds(TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 600)
                );
            Assert.InRange(
                timer.TimeLeftPlayerBlack,
                TimeSpan.FromMilliseconds(0),
                TimeSpan.FromMilliseconds(TimeSpan.FromMinutes(Models.Timer.initialDefaultTime).TotalMilliseconds - 900)
                );
        }
예제 #10
0
 public AddTimeLogItemAction(Models.Timer timer)
 {
     NewTimer = timer;
 }
예제 #11
0
 public TimerState(Models.Timer timer)
 {
     Timer = timer;
 }
예제 #12
0
 public StopTimerAction(Models.Timer timer)
 {
     Timer = timer;
 }