コード例 #1
0
ファイル: BucketFillTest.cs プロジェクト: civanm/DrawingTool
        public void ShouldDrawABucket()
        {
            var        canvas = new string[5, 5];
            BucketFill bucket = new BucketFill(1, 1);

            Assert.IsTrue(bucket.IsValid(canvas));

            var drawnCanvas = bucket.DrawToCanvas(canvas);

            Assert.IsNotNull(drawnCanvas);
            Assert.AreEqual("o", drawnCanvas.GetValue(1, 1));
            Assert.AreEqual("o", drawnCanvas.GetValue(1, 2));
            Assert.AreEqual("o", drawnCanvas.GetValue(1, 3));
            Assert.AreEqual("o", drawnCanvas.GetValue(1, 4));

            Assert.AreEqual("o", drawnCanvas.GetValue(2, 1));
            Assert.AreEqual("o", drawnCanvas.GetValue(2, 2));
            Assert.AreEqual("o", drawnCanvas.GetValue(2, 3));
            Assert.AreEqual("o", drawnCanvas.GetValue(2, 4));

            Assert.AreEqual("o", drawnCanvas.GetValue(3, 1));
            Assert.AreEqual("o", drawnCanvas.GetValue(3, 2));
            Assert.AreEqual("o", drawnCanvas.GetValue(3, 3));
            Assert.AreEqual("o", drawnCanvas.GetValue(3, 4));

            Assert.AreEqual("o", drawnCanvas.GetValue(4, 1));
            Assert.AreEqual("o", drawnCanvas.GetValue(4, 2));
            Assert.AreEqual("o", drawnCanvas.GetValue(4, 3));
            Assert.AreEqual("o", drawnCanvas.GetValue(4, 4));
        }
コード例 #2
0
        public void DrawBucketFill_BottomOnCanvasWithHorizontalLine_BottomSideCanvasFilled()
        {
            string[] expected = new string[]
            {
                "----------------------",
                "|                    |",
                "|                    |",
                "|xxxxxxxxxxxxxxxxxxxx|",
                "|cccccccccccccccccccc|",
                "|cccccccccccccccccccc|",
                "----------------------"
            };

            Canvas canvas         = new Canvas(20, 5);
            Line   horizontalLine = new Line(1, 3, 20, 3);

            canvas.Shapes.Add(horizontalLine);
            canvas.Draw();

            BucketFill bucketFillBottomCanvas = new BucketFill(5, 4, "c");

            string[] actual = bucketFillBottomCanvas.Draw(canvas);

            CollectionAssert.AreEqual(expected, actual);
        }
コード例 #3
0
ファイル: BucketFillTest.cs プロジェクト: civanm/DrawingTool
        public void ShouldNotAllowIfXIsOutOfCanvas()
        {
            string[,] canvas = new string[5, 5];
            BucketFill bucket = new BucketFill(6, 3);

            Assert.IsFalse(bucket.IsValid(canvas));
        }
コード例 #4
0
ファイル: BucketFillTest.cs プロジェクト: civanm/DrawingTool
        public void ShouldNotAllowIfYIsOutOfCanvas()
        {
            var        canvas = new string[5, 5];
            BucketFill bucket = new BucketFill(1, 10);

            Assert.IsFalse(bucket.IsValid(canvas));
        }
コード例 #5
0
        public void DrawBucketFill_OutsideRectangle_RectangleFilled()
        {
            string[] expected = new string[]
            {
                "----------------------",
                "|cccccccccccccccccccc|",
                "|ccxxxxxccccccccccccc|",
                "|ccx   xccccccccccccc|",
                "|ccx   xccccccccccccc|",
                "|ccxxxxxccccccccccccc|",
                "----------------------"
            };

            Canvas    canvas    = new Canvas(20, 5);
            Rectangle rectangle = new Rectangle(3, 2, 7, 5);

            canvas.Shapes.Add(rectangle);
            canvas.Draw();

            BucketFill bucketFillOutsideRectangle = new BucketFill(10, 4, "c");

            string[] actual = bucketFillOutsideRectangle.Draw(canvas);

            CollectionAssert.AreEqual(expected, actual);
        }
コード例 #6
0
 void Start()
 {
     bucketFill      = GameObject.Find("Bucket Fill").GetComponent <BucketFill>();
     colorChanger    = GameObject.Find("Selector").GetComponent <ColorChanger>();
     materialHistory = new List <Material>();
     materialHistory.Add(GetComponent <Renderer>().material);
 }
コード例 #7
0
        public void ShouldSkipTheAlien()
        {
            var mock = new Mock <ICanvas>();

            mock.SetupGet(canvas => canvas.Width).Returns(2);
            mock.SetupGet(canvas => canvas.Height).Returns(2);

            IPixel [,] map = Prepare2x2Map();

            map[1, 1].Color = 3; // cell [1,1] is in different color

            mock.Setup(canvas => canvas.GetPixel(0, 0)).Returns(map[0, 0]);
            mock.Setup(canvas => canvas.GetPixel(0, 1)).Returns(map[0, 1]);
            mock.Setup(canvas => canvas.GetPixel(1, 0)).Returns(map[1, 0]);
            mock.Setup(canvas => canvas.GetPixel(1, 1)).Returns(map[1, 1]);

            mock.Setup(canvas => canvas.Draw(0, 0, 1)).Callback(() => map[0, 0].Color = 1);
            mock.Setup(canvas => canvas.Draw(0, 1, 1)).Callback(() => map[0, 1].Color = 1);
            mock.Setup(canvas => canvas.Draw(1, 0, 1)).Callback(() => map[1, 0].Color = 1);
            mock.Setup(canvas => canvas.Draw(1, 1, 1)).Callback(() => map[1, 1].Color = 1);

            BucketFill fill = new  BucketFill(mock.Object, 0, 0, 1);

            fill.Execute();

            mock.Verify(canvas => canvas.Draw(0, 0, 1), Times.Once());
            mock.Verify(canvas => canvas.Draw(0, 1, 1), Times.Once());
            mock.Verify(canvas => canvas.Draw(1, 0, 1), Times.Once());
            mock.Verify(canvas => canvas.Draw(1, 1, 1), Times.Never()); // cell [1,1] is in different color

            Assert.Equal(1, map[0, 0].Color);
            Assert.Equal(1, map[0, 1].Color);
            Assert.Equal(1, map[1, 0].Color);
            Assert.Equal(3, map[1, 1].Color); // cell [1,1] is in different color
        }
コード例 #8
0
ファイル: DrawModel.cs プロジェクト: civanm/DrawingTool
        string ProcessCommands(string input)
        {
            string output = "";

            try
            {
                var      allowedCommands = new string[] { "C", "L", "R", "B", "FILE" };
                string[] commands        = input.Trim().Split(' ');
                string   elementComand   = commands.Length > 0 ? commands[0].ToUpper() : " ";

                if (allowedCommands.Contains(elementComand))
                {
                    if (elementComand == "C")
                    {
                        workingCanvas = new Canvas(int.Parse(commands[1]), int.Parse(commands[2]));
                    }
                    else if (workingCanvas != null)
                    {
                        switch (elementComand)
                        {
                        case "L":
                            Line line = new Line(int.Parse(commands[1]), int.Parse(commands[2]), int.Parse(commands[3]), int.Parse(commands[4]));
                            workingCanvas.Elements.Add(line);
                            break;

                        case "R":
                            Rectangle rectangle = new Rectangle(int.Parse(commands[1]), int.Parse(commands[2]), int.Parse(commands[3]), int.Parse(commands[4]));
                            workingCanvas.Elements.Add(rectangle);
                            break;

                        case "B":
                            BucketFill bucket = new BucketFill(int.Parse(commands[1]), int.Parse(commands[2]), commands[3]);
                            workingCanvas.Elements.Add(bucket);
                            break;
                        }
                    }
                    else
                    {
                        output = string.Concat("Sorry, you need to create a canvas first. <br/>");
                    }

                    if (workingCanvas != null)
                    {
                        output = workingCanvas.Draw("<br/>");
                    }
                }
                else
                {
                    output = string.Concat("Sorry, command: ", elementComand, " is not allowed. <br/>");
                }
            }
            catch (Exception ex)
            {
                output = string.Concat("Sorry, something is wrong with the command input. <br/>");
            }

            return(output);
        }
コード例 #9
0
ファイル: Program.cs プロジェクト: civanm/DrawingTool
        static void ProcessCommands(string input)
        {
            try
            {
                var      allowedCommands = new string[] { "C", "L", "R", "B", "FILE" };
                string[] commands        = input.Trim().Split(' ');
                string   elementComand   = commands.Length > 0 ? commands[0].ToUpper() : " ";

                if (allowedCommands.Contains(elementComand))
                {
                    if (elementComand == "FILE")
                    {
                        ProcessFromFile(commands[1]);
                    }
                    else if (elementComand == "C")
                    {
                        workingCanvas = new Canvas(int.Parse(commands[1]), int.Parse(commands[2]));
                    }
                    else if (workingCanvas != null)
                    {
                        switch (elementComand)
                        {
                        case "L":
                            Line line = new Line(int.Parse(commands[1]), int.Parse(commands[2]), int.Parse(commands[3]), int.Parse(commands[4]));
                            workingCanvas.Elements.Add(line);
                            break;

                        case "R":
                            Rectangle rectangle = new Rectangle(int.Parse(commands[1]), int.Parse(commands[2]), int.Parse(commands[3]), int.Parse(commands[4]));
                            workingCanvas.Elements.Add(rectangle);
                            break;

                        case "B":
                            BucketFill bucket = new BucketFill(int.Parse(commands[1]), int.Parse(commands[2]), commands[3]);
                            workingCanvas.Elements.Add(bucket);
                            break;
                        }
                    }
                    else
                    {
                        WriteErrorLine(string.Concat("Sorry, you need to create a canvas first, enter ? for help."));
                    }

                    if (workingCanvas != null && elementComand != "FILE")
                    {
                        WriteResultLine(workingCanvas.Draw(Environment.NewLine));
                    }
                }
                else
                {
                    WriteErrorLine(string.Concat("Sorry, command: ", elementComand, " is not allowed, enter ? for help."));
                }
            }
            catch (Exception ex)
            {
                WriteErrorLine(string.Concat("Sorry, something is wrong with the command input, enter ? for help."));
            }
        }
コード例 #10
0
ファイル: BucketFillTest.cs プロジェクト: civanm/DrawingTool
        public void ShouldFillPropertiesFromConstructor()
        {
            BucketFill bucket = new BucketFill(1, 2, "+");

            Assert.IsNotNull(bucket.Properties);
            Assert.AreEqual(bucket.Properties.X1, 1);
            Assert.AreEqual(bucket.Properties.Y1, 2);

            Assert.AreEqual("+", bucket.Properties.BrushChar);
        }
コード例 #11
0
ファイル: DrawModel.cs プロジェクト: civanm/DrawingTool
        string ProcessCommands(string input)
        {
            string output = "";
            try
            {
                var allowedCommands = new string[] { "C", "L", "R", "B", "FILE" };
                string[] commands = input.Trim().Split(' ');
                string elementComand = commands.Length > 0 ? commands[0].ToUpper() : " ";

                if (allowedCommands.Contains(elementComand))
                {
                    if (elementComand == "C")
                    {
                        workingCanvas = new Canvas(int.Parse(commands[1]), int.Parse(commands[2]));
                    }
                    else if (workingCanvas != null)
                    {
                        switch (elementComand)
                        {
                            case "L":
                                Line line = new Line(int.Parse(commands[1]), int.Parse(commands[2]), int.Parse(commands[3]), int.Parse(commands[4]));
                                workingCanvas.Elements.Add(line);
                                break;
                            case "R":
                                Rectangle rectangle = new Rectangle(int.Parse(commands[1]), int.Parse(commands[2]), int.Parse(commands[3]), int.Parse(commands[4]));
                                workingCanvas.Elements.Add(rectangle);
                                break;
                            case "B":
                                BucketFill bucket = new BucketFill(int.Parse(commands[1]), int.Parse(commands[2]), commands[3]);
                                workingCanvas.Elements.Add(bucket);
                                break;
                        }
                    }
                    else
                    {
                        output = string.Concat("Sorry, you need to create a canvas first. <br/>");
                    }

                    if (workingCanvas != null)
                    {
                        output = workingCanvas.Draw("<br/>");
                    }
                }
                else
                {
                    output = string.Concat("Sorry, command: ", elementComand, " is not allowed. <br/>");
                }
            }
            catch (Exception ex)
            {
                output = string.Concat("Sorry, something is wrong with the command input. <br/>");
            }

            return output;
        }
コード例 #12
0
        public void DrawBucketFill_OutsideCanvas_ThrowsDrawException()
        {
            Canvas canvas = new Canvas(20, 5);

            canvas.Draw();

            BucketFill bucketFillOutsideRectangle = new BucketFill(30, 2, "c");
            Action     actual = () => bucketFillOutsideRectangle.Draw(canvas);

            Exception ex = Assert.ThrowsException <DrawingException>(actual);

            Assert.AreEqual(ExceptionMessages.SHAPE_MUST_BE_DRAWN_INSIDE_CANVAS, ex.Message);
        }
コード例 #13
0
        public string[] GetDrawingProgramAnswerForUserCommand(UserCommand userCommand, ref Canvas canvas)
        {
            if (userCommand == null)
            {
                throw new ArgumentException(ExceptionMessages.COMMAND_CANNOT_BE_NULL);
            }

            if (userCommand.IsCanvasNeededToContinue && canvas == null)
            {
                throw new ShapeException(ExceptionMessages.CREATE_CANVAS_FIRST);
            }

            switch (userCommand.Command)
            {
            case EnumCommand.C:
                canvas = new Canvas(userCommand.FirstArgument, userCommand.SecondArgument);
                break;

            case EnumCommand.L:
                Line line = new Line(userCommand.FirstCoordinate, userCommand.SecondCoordinate);
                canvas.Shapes.Add(line);
                break;

            case EnumCommand.R:
                Rectangle rectangle = new Rectangle(userCommand.FirstCoordinate, userCommand.SecondCoordinate);
                canvas.Shapes.Add(rectangle);
                break;

            case EnumCommand.B:
                BucketFill bucketFill = new BucketFill(userCommand.FirstCoordinate, userCommand.ThirdArgument);
                canvas.Shapes.Add(bucketFill);
                break;

            case EnumCommand.Q:
                break;

            case EnumCommand.HELP:
                return(CLIMessages.DOCUMENTATION);

            case EnumCommand.NOT_RECOGNIZED:
            default:
                return(new string[] { CLIMessages.NOT_RECOGNIZED_COMMAND });
            }

            if (userCommand.IsCanvasCommand)
            {
                return(canvas.Draw());
            }

            return(new string[0]);
        }
コード例 #14
0
        public void DrawBucketFill_OnAlreadyExistentLine_ThrowsDrawException()
        {
            Canvas canvas = new Canvas(20, 5);
            Line   line   = new Line(2, 2, 5, 2);

            canvas.Shapes.Add(line);
            canvas.Draw();

            BucketFill bucketFillOutsideRectangle = new BucketFill(3, 2, "c");
            Action     actual = () => bucketFillOutsideRectangle.Draw(canvas);

            Exception ex = Assert.ThrowsException <DrawingException>(actual);

            Assert.AreEqual(ExceptionMessages.BUCKET_FILL_MUST_BE_CREATED_ON_EMPTY_POINT, ex.Message);
        }
コード例 #15
0
        public void DrawBucketFill_EmptyCanvas_CanvasFilled()
        {
            string[] expected = new string[]
            {
                "----------------------",
                "|cccccccccccccccccccc|",
                "|cccccccccccccccccccc|",
                "|cccccccccccccccccccc|",
                "|cccccccccccccccccccc|",
                "----------------------"
            };

            Canvas canvas = new Canvas(20, 4);

            canvas.Draw();

            BucketFill bucketFillAllCanvas = new BucketFill(10, 2, "c");

            string[] actual = bucketFillAllCanvas.Draw(canvas);

            CollectionAssert.AreEqual(expected, actual);
        }
コード例 #16
0
        public void FillTheCancas()
        {
            var mock = new Mock <ICanvas>();

            mock.SetupGet(canvas => canvas.Width).Returns(2);
            mock.SetupGet(canvas => canvas.Height).Returns(2);

            IPixel [,] map = Prepare2x2Map();


            mock.Setup(canvas => canvas.GetPixel(0, 0)).Returns(map[0, 0]);
            mock.Setup(canvas => canvas.GetPixel(0, 1)).Returns(map[0, 1]);
            mock.Setup(canvas => canvas.GetPixel(1, 0)).Returns(map[1, 0]);
            mock.Setup(canvas => canvas.GetPixel(1, 1)).Returns(map[1, 1]);

            mock.Setup(canvas => canvas.Draw(0, 0, 1)).Callback(() => map[0, 0].Color = 1);
            mock.Setup(canvas => canvas.Draw(0, 1, 1)).Callback(() => map[0, 1].Color = 1);
            mock.Setup(canvas => canvas.Draw(1, 0, 1)).Callback(() => map[1, 0].Color = 1);
            mock.Setup(canvas => canvas.Draw(1, 1, 1)).Callback(() => map[1, 1].Color = 1);



            BucketFill fill = new  BucketFill(mock.Object, 0, 0, 1);

            fill.Execute();

            mock.Verify(canvas => canvas.Draw(0, 0, 1), Times.Once());
            mock.Verify(canvas => canvas.Draw(0, 1, 1), Times.Once());
            mock.Verify(canvas => canvas.Draw(1, 0, 1), Times.Once());
            mock.Verify(canvas => canvas.Draw(1, 1, 1), Times.Once());

            Assert.Equal(1, map[0, 0].Color);
            Assert.Equal(1, map[0, 1].Color);
            Assert.Equal(1, map[1, 0].Color);
            Assert.Equal(1, map[1, 1].Color);
        }
コード例 #17
0
        public void DrawBucketFill_LeftOnCanvasWithVerticalLine_LeftSideCanvasFilled()
        {
            string[] expected = new string[]
            {
                "----------------------",
                "|cccccccccx          |",
                "|cccccccccx          |",
                "|cccccccccx          |",
                "|cccccccccx          |",
                "----------------------"
            };

            Canvas canvas       = new Canvas(20, 4);
            Line   verticalLine = new Line(10, 1, 10, 4);

            canvas.Shapes.Add(verticalLine);
            canvas.Draw();

            BucketFill bucketFillLeftSide = new BucketFill(5, 3, "c");

            string[] actual = bucketFillLeftSide.Draw(canvas);

            CollectionAssert.AreEqual(expected, actual);
        }
コード例 #18
0
ファイル: BucketFillTest.cs プロジェクト: civanm/DrawingTool
        public void ShouldHaveADefaultBrush()
        {
            BucketFill bucket = new BucketFill(1, 2);

            Assert.AreEqual("o", bucket.Properties.BrushChar);
        }