public void CreateCanvasShouldNotCreateACanvasForIncorrectInput()
        {
            _inputCommandReader             = Mock.Of <IInputCommandReader>(m => m.ReadCommands() == "draw a canvas");
            _canvasProcessor                = new CanvasProcessor(_inputCommandReader, _outputWriter);
            _canvasProcessor.CanvasRenderer = _canvasRenderer.Object;

            Assert.IsNull(_canvasProcessor.CreateCanvas());
        }
        public void CreateCanvasShouldDrawCanvasForCorrectInput()
        {
            _inputCommandReader             = Mock.Of <IInputCommandReader>(m => m.ReadCommands() == "20 4");
            _canvasProcessor                = new CanvasProcessor(_inputCommandReader, _outputWriter);
            _canvasProcessor.CanvasRenderer = _canvasRenderer.Object;

            _canvasProcessor.CreateCanvas();

            _canvasRenderer.Verify(x => x.SetTheCanvas(), Times.Once());
            _canvasRenderer.Verify(x => x.Draw(), Times.Once());
        }
        public void ShouldNotDrawALineForInvalidPoints()
        {
            _inputCommandReader             = Mock.Of <IInputCommandReader>(m => m.ReadCommands() == "20 4");
            _canvasProcessor                = new CanvasProcessor(_inputCommandReader, _outputWriter);
            _canvasProcessor.CanvasRenderer = _canvasRenderer.Object;

            string[] tokens = { "L", "1", "1", "4", "4" };

            _canvas = Mock.Of <Canvas>(m =>
                                       m.Width == x &&
                                       m.Height == y);

            _canvasProcessor.DrawLineOnCanvas(_canvas, tokens);

            _canvasRenderer.Verify(v => v.DrawLine(new Point(1, 1), new Point(4, 4)), Times.Never());
            _canvasRenderer.Verify(v => v.Draw(), Times.Never());
        }
        public void ShouldNotBucketFillForInvalidInput()
        {
            _inputCommandReader             = Mock.Of <IInputCommandReader>(m => m.ReadCommands() == "20 4");
            _canvasProcessor                = new CanvasProcessor(_inputCommandReader, _outputWriter);
            _canvasProcessor.CanvasRenderer = _canvasRenderer.Object;

            String[] tokens = { "B", "21", "3", "o" };
            Point    point  = new Point(21, 3);

            _canvas = Mock.Of <Canvas>(m =>
                                       m.Width == x &&
                                       m.Height == y);

            _canvasProcessor.BucketFillOnCanvas(_canvas, tokens);

            _canvasRenderer.Verify(v => v.BucketFillArea(point, 'o'), Times.Never());
            _canvasRenderer.Verify(v => v.Draw(), Times.Never());
        }
        public void ShouldDrawALineForValidInput()
        {
            _inputCommandReader             = Mock.Of <IInputCommandReader>(m => m.ReadCommands() == "20 4");
            _canvasProcessor                = new CanvasProcessor(_inputCommandReader, _outputWriter);
            _canvasProcessor.CanvasRenderer = _canvasRenderer.Object;

            string[] tokens = { "L", "1", "2", "6", "2" };
            Point    from   = new Point(1, 2);
            Point    to     = new Point(6, 2);

            _canvas = Mock.Of <Canvas>(m =>
                                       m.Width == x &&
                                       m.Height == y);

            _canvasProcessor.DrawLineOnCanvas(_canvas, tokens);

            _canvasRenderer.Verify(x => x.DrawLine(from, to), Times.Once());
            _canvasRenderer.Verify(x => x.Draw(), Times.Once());
        }
        public void ShouldNotDrawARectangleForOutOfBoundsInput()
        {
            _inputCommandReader             = Mock.Of <IInputCommandReader>(m => m.ReadCommands() == "20 4");
            _canvasProcessor                = new CanvasProcessor(_inputCommandReader, _outputWriter);
            _canvasProcessor.CanvasRenderer = _canvasRenderer.Object;


            String[] tokens = { "R", "16", "1", "20", "5" };
            Point    from   = new Point(16, 1);
            Point    to     = new Point(20, 3);

            _canvas = Mock.Of <Canvas>(m =>
                                       m.Width == x &&
                                       m.Height == y);

            _canvasProcessor.DrawARectangleOnCanvas(_canvas, tokens);

            _canvasRenderer.Verify(v => v.DrawRectangle(from, to), Times.Never());
            _canvasRenderer.Verify(v => v.Draw(), Times.Never());
        }