unit tests are done
This commit is contained in:
@@ -35,6 +35,7 @@ namespace Tests
|
||||
Assert.AreEqual(Color.Aqua, circle.Fill);
|
||||
Assert.IsNull(circle.Points);
|
||||
Assert.AreEqual(1, circle.Radius);
|
||||
Assert.IsFalse(circle.CompositeShape);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +54,7 @@ namespace Tests
|
||||
Assert.AreEqual(Color.Aqua, circle.Fill);
|
||||
Assert.IsNull(circle.Points);
|
||||
Assert.AreEqual(1, circle.Radius);
|
||||
Assert.IsFalse(circle.CompositeShape);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
215
UnitTests/CompositeShapeTests.cs
Normal file
215
UnitTests/CompositeShapeTests.cs
Normal file
@@ -0,0 +1,215 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Reflection.Metadata;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Shapes;
|
||||
using Point = Shapes.Point;
|
||||
using Rectangle = Shapes.Rectangle;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
public class CompositeShapeTests
|
||||
{
|
||||
private Mock<Stream> _mockFileStream;
|
||||
private Mock<IFileIO> _mockFileIO;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_mockFileIO = new Mock<IFileIO>();
|
||||
_mockFileStream = new Mock<Stream>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CompositeShape()
|
||||
{
|
||||
var points = new List<Point>();
|
||||
var composite = new CompositeShape();
|
||||
var rpoint1 = new Point(20, 20);
|
||||
var rpoint2 = new Point(30, 20);
|
||||
var rpoint3 = new Point(30, 30);
|
||||
var rpoint4 = new Point(20, 30);
|
||||
|
||||
var rect = new Rectangle(rpoint1, rpoint2, rpoint3, rpoint4);
|
||||
|
||||
var tpoint1 = new Point(0, 0);
|
||||
var tpoint2 = new Point(3, 0);
|
||||
var tpoint3 = new Point(0, 3);
|
||||
var triangle = new Triangle(tpoint1, tpoint2, tpoint3);
|
||||
|
||||
points.Add(rpoint1);
|
||||
points.Add(rpoint2);
|
||||
points.Add(rpoint3);
|
||||
points.Add(rpoint4);
|
||||
points.Add(tpoint1);
|
||||
points.Add(tpoint2);
|
||||
points.Add(tpoint3);
|
||||
|
||||
var area = rect.ComputeArea() + triangle.ComputeArea();
|
||||
|
||||
composite.Add(rect);
|
||||
composite.Add(triangle);
|
||||
|
||||
Assert.AreEqual(area, composite.ComputeArea());
|
||||
Assert.AreEqual(Color.Empty, composite.Fill);
|
||||
Assert.AreEqual(Color.Black, composite.Stroke);
|
||||
composite.Fill = Color.Aqua;
|
||||
Assert.AreEqual(Color.Aqua, composite.Fill);
|
||||
|
||||
|
||||
|
||||
foreach (var point in composite.Points)
|
||||
{
|
||||
Assert.Contains(point, points);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RemoveShapeTest()
|
||||
{
|
||||
var points = new List<Point>();
|
||||
var composite = new CompositeShape();
|
||||
var rpoint1 = new Point(20, 20);
|
||||
var rpoint2 = new Point(30, 20);
|
||||
var rpoint3 = new Point(30, 30);
|
||||
var rpoint4 = new Point(20, 30);
|
||||
|
||||
var rect = new Rectangle(rpoint1, rpoint2, rpoint3, rpoint4);
|
||||
|
||||
var tpoint1 = new Point(0, 0);
|
||||
var tpoint2 = new Point(3, 0);
|
||||
var tpoint3 = new Point(0, 3);
|
||||
var triangle = new Triangle(tpoint1, tpoint2, tpoint3);
|
||||
|
||||
points.Add(rpoint1);
|
||||
points.Add(rpoint2);
|
||||
points.Add(rpoint3);
|
||||
points.Add(rpoint4);
|
||||
|
||||
|
||||
var area = rect.ComputeArea() + triangle.ComputeArea();
|
||||
|
||||
composite.Add(rect);
|
||||
composite.Add(triangle);
|
||||
|
||||
Assert.AreEqual(area, composite.ComputeArea());
|
||||
|
||||
composite.RemoveShape(triangle);
|
||||
|
||||
foreach (var point in composite.Points)
|
||||
{
|
||||
Assert.Contains(point, points);
|
||||
}
|
||||
Assert.AreEqual(rect.ComputeArea(), composite.ComputeArea());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RemoveShapeNotInComposite()
|
||||
{
|
||||
var composite = new CompositeShape();
|
||||
var circle = new Circle(20,20,5);
|
||||
Assert.That(()=> composite.RemoveShape(circle), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo($"{typeof(Circle).Name} is not part of the composite shape."));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AddShapeTwicetest()
|
||||
{
|
||||
var c = new CompositeShape();
|
||||
var rpoint1 = new Point(20, 20);
|
||||
var rpoint2 = new Point(30, 20);
|
||||
var rpoint3 = new Point(30, 30);
|
||||
var rpoint4 = new Point(20, 30);
|
||||
var rect = new Rectangle(rpoint1, rpoint2, rpoint3, rpoint4);
|
||||
c.Add(rect);
|
||||
Assert.That(()=> c.Add(rect), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("This shape has already been added to a composite"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AddCompositeToSelf()
|
||||
{
|
||||
var c = new CompositeShape();
|
||||
Assert.That(()=> c.Add(c), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("You cant add a shape to itself"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AddShapeToTwoComposits()
|
||||
{
|
||||
var c = new CompositeShape();
|
||||
var co = new CompositeShape();
|
||||
var rpoint1 = new Point(20, 20);
|
||||
var rpoint2 = new Point(30, 20);
|
||||
var rpoint3 = new Point(30, 30);
|
||||
var rpoint4 = new Point(20, 30);
|
||||
var rect = new Rectangle(rpoint1, rpoint2, rpoint3, rpoint4);
|
||||
c.Add(rect);
|
||||
Assert.That(()=> co.Add(rect), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("This shape has already been added to a composite"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RemoveAllShapes()
|
||||
{
|
||||
var c = new CompositeShape();
|
||||
var rpoint1 = new Point(20, 20);
|
||||
var rpoint2 = new Point(30, 20);
|
||||
var rpoint3 = new Point(30, 30);
|
||||
var rpoint4 = new Point(20, 30);
|
||||
var rect = new Rectangle(rpoint1, rpoint2, rpoint3, rpoint4);
|
||||
c.Add(rect);
|
||||
var tpoint1 = new Point(0, 0);
|
||||
var tpoint2 = new Point(3, 0);
|
||||
var tpoint3 = new Point(0, 3);
|
||||
var triangle = new Triangle(tpoint1, tpoint2, tpoint3);
|
||||
c.Add(triangle);
|
||||
|
||||
c.RemoveAllShapes();
|
||||
Assert.AreEqual(0,c.Points.Count);
|
||||
Assert.AreEqual(0, c.thisShapesList.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ScaleTest()
|
||||
{
|
||||
var c = new CompositeShape();
|
||||
var rpoint1 = new Point(1, 1);
|
||||
var rpoint2 = new Point(2, 1);
|
||||
var rpoint3 = new Point(2, 2);
|
||||
var rpoint4 = new Point(1, 2);
|
||||
var rect = new Rectangle(rpoint1, rpoint2, rpoint3, rpoint4);
|
||||
c.Add(rect);
|
||||
var tpoint1 = new Point(0, 0);
|
||||
var tpoint2 = new Point(1, 0);
|
||||
var tpoint3 = new Point(0, 1);
|
||||
var triangle = new Triangle(tpoint1, tpoint2, tpoint3);
|
||||
c.Add(triangle);
|
||||
var area = c.ComputeArea()*2;
|
||||
c.Scale(2);
|
||||
Assert.Less(Math.Abs(c.ComputeArea()-area), .000000000000001);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SaveTest()
|
||||
{
|
||||
Shape createdObj = null;
|
||||
var c = new CompositeShape();
|
||||
_mockFileIO.Setup(x => x.SaveShape(It.IsAny<Stream>(), It.IsAny<Shape>()))
|
||||
.Callback<Stream, Shape>((i, x) => { createdObj = x; });
|
||||
|
||||
c._fileWriter = _mockFileIO.Object;
|
||||
|
||||
c.Save(_mockFileStream.Object);
|
||||
Assert.AreEqual(c, createdObj);
|
||||
|
||||
_mockFileIO.Verify(x => x.SaveShape(It.IsAny<Stream>(),
|
||||
It.IsAny<Shape>()), Times.Once);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
73
UnitTests/PointTests.cs
Normal file
73
UnitTests/PointTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.Drawing;
|
||||
using NUnit.Framework;
|
||||
using Point = Shapes.Point;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
public class PointTests
|
||||
{
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ColorTests()
|
||||
{
|
||||
var point = new Point(10,10);
|
||||
Assert.AreEqual(Color.Black, point.Color);
|
||||
point.Color = Color.Aqua;
|
||||
Assert.AreEqual(Color.Aqua, point.Color);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MoveTest()
|
||||
{
|
||||
var point = new Point(10, 10);
|
||||
point.Move(20, 20);
|
||||
Assert.AreEqual(point.X, 30);
|
||||
Assert.AreEqual(point.Y, 30);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CopyTest()
|
||||
{
|
||||
var point = new Point(20, 20);
|
||||
Assert.AreEqual(point.Color, point.Copy().Color);
|
||||
Assert.AreEqual(point.X, point.Copy().X);
|
||||
Assert.AreEqual(point.Y, point.Copy().Y);
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SubtractionTest()
|
||||
{
|
||||
var point1 = new Point(5, 5);
|
||||
var point2 = new Point(15, 15);
|
||||
var point3 = point2 - point1;
|
||||
Assert.AreEqual(point3.X, 10);
|
||||
Assert.AreEqual(point3.Y, 10);
|
||||
|
||||
}
|
||||
[Test]
|
||||
public void AdditionTest()
|
||||
{
|
||||
var point1 = new Point(5, 5);
|
||||
var point2 = new Point(15, 15);
|
||||
var point3 = point2 + point1;
|
||||
Assert.AreEqual(20, point3.X);
|
||||
Assert.AreEqual(20, point3.Y);
|
||||
|
||||
}
|
||||
[Test]
|
||||
public void DivisionTest()
|
||||
{
|
||||
var point1 = new Point(10, 10);
|
||||
var point3 = point1 / 2;
|
||||
Assert.AreEqual(point3.X, 5);
|
||||
Assert.AreEqual(point3.Y, 5);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,7 @@ namespace Tests
|
||||
Assert.AreEqual(rectangle.ComputeArea(), 100);
|
||||
Assert.AreEqual(rectangle.CalculateHeight(), 10);
|
||||
Assert.AreEqual(rectangle.CalculateWidth(), 10);
|
||||
Assert.IsFalse(rectangle.CompositeShape);
|
||||
rectangle.Fill = Color.Aqua;
|
||||
Assert.AreEqual(Color.Aqua, rectangle.Fill);
|
||||
foreach (var line in rectangle.Lines)
|
||||
@@ -74,6 +75,7 @@ namespace Tests
|
||||
Assert.AreEqual(100, rectangle.ComputeArea());
|
||||
Assert.AreEqual(10, rectangle.CalculateHeight());
|
||||
Assert.AreEqual(10, rectangle.CalculateWidth());
|
||||
Assert.IsFalse(rectangle.CompositeShape);
|
||||
rectangle.Fill = Color.Aqua;
|
||||
Assert.AreEqual(Color.Aqua, rectangle.Fill);
|
||||
foreach (var line in rectangle.Lines)
|
||||
@@ -99,6 +101,7 @@ namespace Tests
|
||||
Assert.AreEqual(100, rectangle.ComputeArea());
|
||||
Assert.AreEqual(10, rectangle.CalculateHeight());
|
||||
Assert.AreEqual(10, rectangle.CalculateWidth());
|
||||
Assert.IsFalse(rectangle.CompositeShape);
|
||||
rectangle.Fill = Color.Aqua;
|
||||
Assert.AreEqual(Color.Aqua, rectangle.Fill);
|
||||
foreach (var line in rectangle.Lines)
|
||||
@@ -190,6 +193,51 @@ namespace Tests
|
||||
Assert.That(()=> rectangle.Scale(-20), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("Invalid scale factor"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MoveTest()
|
||||
{
|
||||
var rectangle = new Rectangle(
|
||||
new Point(20, 20),
|
||||
new Point(30, 20),
|
||||
new Point(30, 30),
|
||||
new Point(20, 30));
|
||||
|
||||
rectangle.Move(40,40);
|
||||
Assert.AreEqual(35 ,rectangle.Points[0].X);
|
||||
Assert.AreEqual(35 ,rectangle.Points[0].Y);
|
||||
|
||||
Assert.AreEqual(45 ,rectangle.Points[1].X);
|
||||
Assert.AreEqual(35 ,rectangle.Points[1].Y);
|
||||
|
||||
Assert.AreEqual(45 ,rectangle.Points[2].X);
|
||||
Assert.AreEqual(45 ,rectangle.Points[2].Y);
|
||||
|
||||
Assert.AreEqual(35 ,rectangle.Points[3].X);
|
||||
Assert.AreEqual(45 ,rectangle.Points[3].Y);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RotateTest()
|
||||
{
|
||||
var rectangle = new Rectangle(
|
||||
new Point(20, 20),
|
||||
new Point(30, 20),
|
||||
new Point(30, 30),
|
||||
new Point(20, 30));
|
||||
rectangle.Rotate(90);
|
||||
Assert.AreEqual(30 ,rectangle.Points[0].X);
|
||||
Assert.AreEqual(20 ,rectangle.Points[0].Y);
|
||||
|
||||
Assert.AreEqual(30 ,rectangle.Points[1].X);
|
||||
Assert.AreEqual(30 ,rectangle.Points[1].Y);
|
||||
|
||||
Assert.AreEqual(20 ,rectangle.Points[2].X);
|
||||
Assert.AreEqual(30 ,rectangle.Points[2].Y);
|
||||
|
||||
Assert.AreEqual(20 ,rectangle.Points[3].X);
|
||||
Assert.AreEqual(20 ,rectangle.Points[3].Y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Shapes;
|
||||
using Point = Shapes.Point;
|
||||
@@ -9,11 +12,17 @@ namespace Tests
|
||||
{
|
||||
public class TriangleTests
|
||||
{
|
||||
private Mock<Stream> _mockFileStream;
|
||||
private Mock<IFileIO> _mockFileIO;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_mockFileIO = new Mock<IFileIO>();
|
||||
_mockFileStream = new Mock<Stream>();
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void TrianglePoints()
|
||||
{
|
||||
@@ -35,8 +44,8 @@ namespace Tests
|
||||
Assert.AreEqual(point3, triangle.Lines[1].Point2);
|
||||
Assert.AreEqual(point3, triangle.Lines[2].Point1);
|
||||
Assert.AreEqual(point1, triangle.Lines[2].Point2);
|
||||
Assert.AreEqual(3, triangle.Height);
|
||||
Assert.AreEqual(3, triangle.Width);
|
||||
Assert.IsFalse(triangle.CompositeShape);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -78,8 +87,8 @@ namespace Tests
|
||||
Assert.AreEqual(point3y, triangle.Lines[1].Point2.Y);
|
||||
Assert.AreEqual(point3y, triangle.Lines[2].Point1.Y);
|
||||
Assert.AreEqual(point1y, triangle.Lines[2].Point2.Y);
|
||||
Assert.AreEqual(3, triangle.Height);
|
||||
Assert.AreEqual(3, triangle.Width);
|
||||
Assert.IsFalse(triangle.CompositeShape);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -124,10 +133,31 @@ namespace Tests
|
||||
{
|
||||
var triangle = new Triangle(
|
||||
new Point(0, 0),
|
||||
new Point(1, 0),
|
||||
new Point(0, 1));
|
||||
Assert.AreEqual(.25, triangle.CenterPoint.X);
|
||||
Assert.AreEqual(.5, triangle.CenterPoint.Y);
|
||||
new Point(3, 0),
|
||||
new Point(0, 3));
|
||||
Assert.LessOrEqual(Math.Abs(1 - triangle.CenterPoint.X), 2E-11d);
|
||||
Assert.LessOrEqual(Math.Abs(1 - triangle.CenterPoint.Y), 2E-11d);
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SaveTest()
|
||||
{
|
||||
Shape createdObj = null;
|
||||
var triangle = new Triangle(
|
||||
new Point(0, 0),
|
||||
new Point(3, 0),
|
||||
new Point(0, 3));
|
||||
_mockFileIO.Setup(x => x.SaveShape(It.IsAny<Stream>(), It.IsAny<Shape>()))
|
||||
.Callback<Stream, Shape>((i, x) => { createdObj = x; });
|
||||
|
||||
triangle._fileWriter = _mockFileIO.Object;
|
||||
|
||||
triangle.Save(_mockFileStream.Object);
|
||||
Assert.AreEqual(triangle, createdObj);
|
||||
|
||||
_mockFileIO.Verify(x => x.SaveShape(It.IsAny<Stream>(),
|
||||
It.IsAny<Shape>()), Times.Once);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
44
UnitTests/ValidatorTests.cs
Normal file
44
UnitTests/ValidatorTests.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using Shapes;
|
||||
using static Shapes.Validator;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
public class ValidatorTests
|
||||
{
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidatePositiveDoubleTest()
|
||||
{
|
||||
Assert.That(()=> ValidatePositiveDouble(-10, "Error"), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("Error"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateDoubleTest()
|
||||
{
|
||||
Assert.That(()=> ValidateDouble(Double.NaN, "Error"), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("Error"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateRectangleTest()
|
||||
{
|
||||
List<Point> points = new List<Point>();
|
||||
points.Add(new Point(30, 30));
|
||||
points.Add(new Point(30, 30));
|
||||
points.Add(new Point(30, 30));
|
||||
points.Add(new Point(30, 30));
|
||||
|
||||
Assert.That(()=> ValidateRectangle(points, "Error"), Throws.TypeOf<ShapeException>()
|
||||
.With.Message.EqualTo("Error"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user