Example #1
0
        public RunnerFacade()
        {
            //It is possible with DI
            var rotateLeftActionInvoker = new ActionDeciderByPositionActionInvoker(
                new RotateLeftNActionInvoker(),
                new RotateLeftSActionInvoker(),
                new RotateLeftWActionInvoker(),
                new RotateLeftEActionInvoker()
                );

            var rotaeRightActionInvoker = new ActionDeciderByPositionActionInvoker(
                new RotateRightNActionInvoker(),
                new RotateRightSActionInvoker(),
                new RotateRightWActionInvoker(),
                new RotateRightEActionInvoker()
                );

            var moveActionInvoker = new ActionDeciderByPositionActionInvoker(
                new MoveNActionInvoker(),
                new MoveSActionInvoker(),
                new MoveWActionInvoker(),
                new MoveEActionInvoker()
                );

            var singleCommandInvoker = new SingleCommandInvoker(moveActionInvoker, rotateLeftActionInvoker, rotaeRightActionInvoker);

            commandInvoker = new MultipleCommandInvoker(singleCommandInvoker);
        }
        public void Move_IfDirectionW_CallWActionInvoker()
        {
            var instance       = new ActionDeciderByPositionActionInvoker(NActionInvoker.Object, SActionInvoker.Object, WActionInvoker.Object, EActionInvoker.Object);
            var vehicleContext = new VehicleContext {
                Direction = Direction.W
            };

            instance.Move(vehicleContext);

            NActionInvoker.Verify(x => x.Move(vehicleContext), Times.Never);
            SActionInvoker.Verify(x => x.Move(vehicleContext), Times.Never);
            WActionInvoker.Verify(x => x.Move(vehicleContext), Times.Once);
            EActionInvoker.Verify(x => x.Move(vehicleContext), Times.Never);
        }