1/*
2	$Id: CreatePolygonTest.cpp 2067 2002-11-23 04:42:57Z jrand $
3
4	This file contains the implementation of the tests which show
5	that BPolygons can be created successfully a number of
6	different ways.  The following use cases are tested:
7		- Construction 1
8		- Construction 2
9		- Construction 3
10		- Destruction
11		- Add Points
12		- Count Points
13		- Frame
14		- Assignment Operator
15
16	*/
17
18
19#include "CreatePolygonTest.h"
20#include "DummyPolygon.h"
21#include <Point.h>
22#include <Rect.h>
23#include <Polygon.h>
24
25#include <assert.h>
26
27
28/*
29 *  Method:  CreatePolygonTest::CreatePolygonTest()
30 *   Descr:  This is the constructor for this class.
31 */
32
33
34	CreatePolygonTest::CreatePolygonTest(std::string name) :
35		TestCase(name)
36{
37	}
38
39
40/*
41 *  Method:  CreatePolygonTest::~CreatePolygonTest()
42 *   Descr:  This is the destructor for this class.
43 */
44
45
46	CreatePolygonTest::~CreatePolygonTest()
47{
48	}
49
50
51/*
52 *  Method:  CreatePolygonTest::polygonMatches()
53 *   Descr:  This member function compares the passed in polygon to the
54 *           set of points and the expected frame rectangle.
55 */
56
57void CreatePolygonTest::polygonMatches(BPolygon *srcPoly, const BPoint *pointArray,
58                                       int numPoints, const BRect expectedFrame)
59{
60	assert(numPoints == srcPoly->CountPoints());
61	assert(expectedFrame == srcPoly->Frame());
62
63	const BPoint *srcPointArray = ((DummyPolygon *)srcPoly)->GetPoints();
64	int i;
65	for(i = 0; i < numPoints; i++) {
66		assert(srcPointArray[i] == pointArray[i]);
67	}
68}
69
70
71/*
72 *  Method:  CreatePolygonTest::PerformTest()
73 *   Descr:  This member function tests the creation of BPolygon's.
74 *
75 *           The code does the following:
76 *             - creates an array of points to test with
77 *             - creates five polygons which should all be the same but in
78 *               different ways:
79 *                  1. By passing the point array in the constructor
80 *                  2. By using the copy constructor from the first polygon
81 *                  3. By using the AddPoints() member to add points to an
82 *                     empty polygon
83 *                  4. By using the assignment operator to replace an existing
84 *                     polygon with a copy of the one from 1
85 *                  5. By adding three points from the array on the constructor
86 *                     and then adding th remaining points using the AddPoints()
87 *                     member.
88 *              - In each case, the polygonMatches() member is called to make
89 *                sure the polygon is what is expected.
90 */
91
92
93	void CreatePolygonTest::PerformTest(void)
94{
95	const int numPoints = 7;
96	BPoint pointArray[numPoints];
97	pointArray[0].x =  0.0;  pointArray[0].y = 10.0;
98	pointArray[1].x = 10.0;  pointArray[1].y =  0.0;
99	pointArray[2].x = 10.0;  pointArray[2].y =  5.0;
100	pointArray[3].x = 30.0;  pointArray[3].y =  5.0;
101	pointArray[4].x = 30.0;  pointArray[4].y = 15.0;
102	pointArray[5].x = 10.0;  pointArray[5].y = 15.0;
103	pointArray[6].x = 10.0;  pointArray[6].y = 20.0;
104	BRect pointArrayFrame(0.0, 0.0, 30.0, 20.0);
105
106	BPolygon testPoly1(pointArray, numPoints);
107	polygonMatches(&testPoly1, pointArray, numPoints, pointArrayFrame);
108
109	BPolygon testPoly2(&testPoly1);
110	polygonMatches(&testPoly2, pointArray, numPoints, pointArrayFrame);
111
112	BPolygon testPoly3;
113	testPoly3.AddPoints(pointArray, numPoints);
114	polygonMatches(&testPoly3, pointArray, numPoints, pointArrayFrame);
115
116	BPolygon testPoly4;
117	testPoly4.AddPoints(&pointArray[2], 2);
118	testPoly4 = testPoly1;
119	polygonMatches(&testPoly4, pointArray, numPoints, pointArrayFrame);
120
121	BPolygon testPoly5(pointArray, 3);
122	testPoly5.AddPoints(&pointArray[3], numPoints - 3);
123	polygonMatches(&testPoly5, pointArray, numPoints, pointArrayFrame);
124}
125
126
127/*
128 *  Method:  PropertyConstructionTest::suite()
129 *   Descr:  This static member function returns a test caller for performing
130 *           all combinations of "CreatePolygonTest".
131 */
132
133 Test *CreatePolygonTest::suite(void)
134{
135	typedef CppUnit::TestCaller<CreatePolygonTest>
136		CreatePolygonTestCaller;
137
138	return(new CreatePolygonTestCaller("BPolygon::Create Polygon Test", &CreatePolygonTest::PerformTest));
139	}
140