예제 #1
0
        public void Run_WhenAlgorithmRunsToCompletion_ThenCubeStateGoesToRunningAndThenStopped()
        {
            RubiksCube cube = new RubiksCube();
            Mock <ICubeSolvingAlgorithm> algMock = new Mock <ICubeSolvingAlgorithm>();

            CubeRunner cubeRunner = new CubeRunner(cube, algMock.Object);

            bool wentToRunning = false;
            bool wentToStopped = false;

            cubeRunner.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler((sender, args) =>
            {
                if (cubeRunner.RunnerState == CubeRunnerState.Running)
                {
                    wentToRunning = true;
                }
                if (cubeRunner.RunnerState == CubeRunnerState.Stopped)
                {
                    wentToStopped = true;
                }
            });

            cubeRunner.Run();

            Assert.IsTrue(wentToRunning && wentToStopped);
        }
예제 #2
0
        public void Construct_ThenRunnerStateIsStopped()
        {
            RubiksCube cube = new RubiksCube();
            Mock <ICubeSolvingAlgorithm> algMock = new Mock <ICubeSolvingAlgorithm>();

            CubeRunner cubeRunner = new CubeRunner(cube, algMock.Object);

            Assert.AreEqual(cubeRunner.RunnerState, CubeRunnerState.Stopped);
        }
예제 #3
0
        public void Run_WhenNoExceptionThrown_ThenTheErrorStringIsNullAndWasThereAnErrorIsFalse()
        {
            RubiksCube cube = new RubiksCube();
            Mock <ICubeSolvingAlgorithm> algMock = new Mock <ICubeSolvingAlgorithm>();

            algMock.Setup(alg => alg.Solve(cube)).Callback(new Action(() =>
            {
                cube.TurnUp(TurningDirection.NineoClock);
            }));

            CubeRunner runner = new CubeRunner(cube, algMock.Object);

            SolverResult result = runner.Run();

            Assert.IsFalse(result.WasThereAnError);
            Assert.IsNull(result.ErrorMessage);
        }
예제 #4
0
        public void Run_WhenAlgorithmTurnsCubeTwice_ThenMovesToCompletionIsTwo()
        {
            RubiksCube cube = new RubiksCube();
            Mock <ICubeSolvingAlgorithm> algMock = new Mock <ICubeSolvingAlgorithm>();

            algMock.Setup(alg => alg.Solve(cube)).Callback(new Action(() =>
            {
                cube.TurnUp(TurningDirection.NineoClock);
                cube.TurnLeft(TurningDirection.NineoClock);
            }));

            CubeRunner runner = new CubeRunner(cube, algMock.Object);

            SolverResult result = runner.Run();

            Assert.AreEqual <int>(2, result.MovesToCompletion);
        }
예제 #5
0
        public void Run_WhenAlgorithmRunsForOneSecond_ThenTimeToCompletionIsOneSecondPlusOrMinusPointTwoSeconds()
        {
            RubiksCube cube = new RubiksCube();
            Mock <ICubeSolvingAlgorithm> algMock = new Mock <ICubeSolvingAlgorithm>();

            algMock.Setup(alg => alg.Solve(cube)).Callback(new Action(() =>
            {
                System.Threading.Thread.Sleep(1000);
            }));

            CubeRunner runner = new CubeRunner(cube, algMock.Object);

            SolverResult result = runner.Run();

            Assert.IsTrue(TimeSpan.FromSeconds(1) + TimeSpan.FromSeconds(.2) > result.TimeToCompletion ||
                          TimeSpan.FromSeconds(1) - TimeSpan.FromSeconds(.2) < result.TimeToCompletion, string.Format("Actual time to completion {0}", result.TimeToCompletion));
        }
예제 #6
0
        public void Run_WhenAlgorithmFailsToSolveCube_ThenResultShowThatTheCubeWasSolved()
        {
            RubiksCube cube = new RubiksCube();

            cube.TurnLeft();
            cube.TurnUp();
            Mock <ICubeSolvingAlgorithm> algMock = new Mock <ICubeSolvingAlgorithm>();

            algMock.Setup(alg => alg.Solve(cube)).Callback(new Action(() =>
            {
                cube.TurnUp(TurningDirection.NineoClock);
            }));

            CubeRunner runner = new CubeRunner(cube, algMock.Object);

            SolverResult result = runner.Run();

            Assert.IsFalse(result.WasCubeSolved);
        }
예제 #7
0
 public RunnerBarVM(CubeRunner runner)
 {
     Runner     = runner;
     RunCommand = new RunCommand(runner, this);
 }
예제 #8
0
 public RunCommand(CubeRunner runner, RunnerBarVM runnerBarVM)
 {
     _runner      = runner;
     _runnerBarVM = runnerBarVM;
 }