private static DesignPuzzleBoardViewModel GetDesignPuzzleBoardViewModelWithAllWordsInserted(DesignPuzzleBoardViewModel puzzleBoardVm)
        {
            puzzleBoardVm.StartPauseButtonCaption = "Start";
            puzzleBoardVm.GameIsRunning = false;
            puzzleBoardVm.StartPauseCommand.Execute(null);

            //Act
            puzzleBoardVm.SelectedWordAcross = puzzleBoardVm.Words.First();

            foreach (var word in puzzleBoardVm.Words)
            {
                if (word.Direction == Direction.Down)
                {
                    puzzleBoardVm.SelectedWordDown = word;
                }
                else
                {
                    puzzleBoardVm.SelectedWordAcross = word;
                }

                foreach (var cell in word.Cells)
                {
                    Messenger.Default.Send(new KeyReceivedMessage() { KeyChar = cell.Value });
                }

                puzzleBoardVm.AddEnteredWordOnToBoardCommand.Execute(null);
            }
            return puzzleBoardVm;
        }
        public void When_a_delete_is_hit_should_remove_a_letter_from_entered_characters()
        {
            var puzzleBoardVm = new DesignPuzzleBoardViewModel();
            puzzleBoardVm.StartPauseButtonCaption = "Start";
            puzzleBoardVm.GameIsRunning = false;
            puzzleBoardVm.StartPauseCommand.Execute(null);

            puzzleBoardVm.SelectedWordAcross = puzzleBoardVm.Words.First();
            Messenger.Default.Send(new KeyReceivedMessage { KeyChar = "t" });
            Messenger.Default.Send(new KeyReceivedMessage { KeyChar = "t" });

            Messenger.Default.Send(new KeyReceivedMessage { KeyCharType = KeyCharType.Delete });
            var result = puzzleBoardVm.SelectedWord.Cells.Count(x => x.EnteredValue == "t");
            puzzleBoardVm.StartPauseCommand.Execute(null);
            Debug.WriteLine("Cell Entered count {0}", result);

            Assert.AreEqual(1, puzzleBoardVm.SelectedWord.Cells.Count(x => x.EnteredValue == "t"));
        }
        public void TestMethod()
        {
            var puzzleBoardVm = new DesignPuzzleBoardViewModel();
            //puzzleBoardVm.StartPauseButtonCaption = "Start";

            //((TestScheduler)puzzleBoardVm.SchedulerProvider.ThreadPool).AdvanceBy(2);

            //puzzleBoardVm.StartPauseCommand.Execute(null);

            ////var expectedValues = new long[] {0, 1, 2, 3, 4};
            ////var actualValues = new List<long>();

            ////var scheduler = new TestScheduler();
            ////var interval = Observable.Interval(TimeSpan.FromSeconds(1), scheduler)
            ////    .Take(5);

            ////interval.Subscribe();
            ////scheduler.Start();
            //((TestScheduler)puzzleBoardVm.SchedulerProvider.ThreadPool).Start();
            //((TestScheduler) puzzleBoardVm.SchedulerProvider.Dispatcher).Start();
            

        }
 public void Should_execute_GameFinishedEvent_with_100_percent_result_when_last_word_is_inserted_onto_the_board()
 {
     var puzzleBoardVm = new DesignPuzzleBoardViewModel();
     Messenger.Default.Register<GameCompleteMessage>(this, m => Assert.AreEqual(100, m.ScorePercentage));
     GetDesignPuzzleBoardViewModelWithAllWordsInserted(puzzleBoardVm);
 }
 public void When_start_is_hit_the_Count_up_Timer_should_commence()
 {
     var puzzleBoardVm = new DesignPuzzleBoardViewModel();
     
 }
        public void Should_instatiate_with_dummy_words()
        {
            var puzzleBoardVm = new DesignPuzzleBoardViewModel();

            Assert.IsTrue(puzzleBoardVm.Words.Count > 0);
        }
        public void Last_selected_word_should_be_unhighlighted_on_the_board_when_another_word_is_selected()
        { 

            //Arrange
            var puzzleBoardVm = new DesignPuzzleBoardViewModel();
            puzzleBoardVm.StartPauseCommand.Execute(null);
            puzzleBoardVm.SelectedWordDown = puzzleBoardVm.Words[1];
            var pvCells = puzzleBoardVm.SelectedWord.Cells.Select(x => new {Col = x.Col, Row = x.Row});

            puzzleBoardVm.SelectedWordDown = puzzleBoardVm.Words[2];

            //Assert but ignore junction cells
            foreach (var cell in pvCells.Where(x => puzzleBoardVm.SelectedWord.Cells.Any(y => y.Col == x.Col && y.Row == x.Row) == false))
            {
                var cell1 = cell;
                Assert.IsTrue(puzzleBoardVm.Cells.First(x => x.Row == cell1.Row && x.Col == cell1.Col).IsVisible ==
                              CellState.IsUsed);
            }

        }
        public void Should_highlight_the_the_most_likely_word_match_on_the_Board_if_a_cell_is_clicked_on_the_Board()
        {
           //CurrentSelectedCell 
            var puzzleBoardVm = new DesignPuzzleBoardViewModel();
            puzzleBoardVm.StartPauseButtonCaption = "Start";
            puzzleBoardVm.GameIsRunning = false;
            puzzleBoardVm.StartPauseCommand.Execute(null);

            //Act
            var wordToAdd = puzzleBoardVm.Words.FirstOrDefault(x => x.Direction == Direction.Down);
            puzzleBoardVm.CurrentSelectedCell = wordToAdd.Cells[1];
            
            foreach (var cell in puzzleBoardVm.SelectedWordDown.Cells)
            {
                Assert.IsTrue(cell.IsVisible == CellState.IsUsed);
            }
        }