Skip to content

Commit 1990dab

Browse files
author
timlinux
committed
Fixed qgsgeometry test so that it passes:
- clear member vars between each test - added some geometry dump helpers - generally neatened up unit test implementation git-svn-id: http://svn.osgeo.org/qgis/trunk@8767 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 8f263b9 commit 1990dab

File tree

1 file changed

+91
-14
lines changed

1 file changed

+91
-14
lines changed

tests/src/core/testqgsgeometry.cpp

+91-14
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,15 @@ class TestQgsGeometry: public QObject
4141
void cleanup();// will be called after every testfunction.
4242

4343
void intersectionCheck();
44-
void unionCheck();
44+
void unionCheck1();
45+
void unionCheck2();
4546
private:
47+
/** A helper method to return wkb geometry type as a string */
48+
QString wkbTypeAsString( QGis::WKBTYPE theType );
49+
/** A helper method to dump to qdebug the geometry of a multipolygon */
50+
void dumpMultiPolygon( QgsMultiPolygon &theMultiPolygon );
51+
/** A helper method to dump to qdebug the geometry of a polygon */
52+
void dumpPolygon( QgsPolygon &thePolygon );
4653
QgsPoint mPoint1;
4754
QgsPoint mPoint2;
4855
QgsPoint mPoint3;
@@ -87,6 +94,12 @@ void TestQgsGeometry::init()
8794
mPointY = QgsPoint(1040.0,1040.0);
8895
mPointZ = QgsPoint(1000.0,1040.0);
8996

97+
mPolygonA.clear();
98+
mPolygonB.clear();
99+
mPolygonC.clear();
100+
mPolylineA.clear();
101+
mPolylineB.clear();
102+
mPolylineC.clear();
90103
mPolylineA << mPoint1 << mPoint2 << mPoint3 << mPoint4 << mPoint1;
91104
mPolygonA << mPolylineA;
92105
//Polygon B intersects Polygon A
@@ -137,23 +150,87 @@ void TestQgsGeometry::intersectionCheck()
137150
QVERIFY ( !mpPolygonGeometryA->intersects(mpPolygonGeometryC));
138151
}
139152

140-
void TestQgsGeometry::unionCheck()
153+
void TestQgsGeometry::unionCheck1()
141154
{
142-
143-
// should be no union as A does not intersect C
155+
// should be a multipolygon with 2 parts as A does not intersect C
144156
QgsGeometry * mypUnionGeometry = mpPolygonGeometryA->Union(mpPolygonGeometryC);
145-
QgsPolyline myPolyline = mypUnionGeometry->asPolyline();
146-
QVERIFY (myPolyline.size() == 0); //check that the union failed properly
147-
// should be a union as A intersect B
148-
mypUnionGeometry = mpPolygonGeometryA->Union(mpPolygonGeometryB);
149-
myPolyline = mypUnionGeometry->asPolyline();
150-
QVERIFY (myPolyline.size() > 0); //check that the union created a feature
151-
for (int i = 0; i < myPolyline.size(); i++)
157+
qDebug ("Geometry Type: " + wkbTypeAsString(mypUnionGeometry->wkbType()).toLocal8Bit());
158+
QVERIFY (mypUnionGeometry->wkbType() == QGis::WKBMultiPolygon);
159+
QgsMultiPolygon myMultiPolygon = mypUnionGeometry->asMultiPolygon();
160+
QVERIFY (myMultiPolygon.size() > 0); //check that the union did not fail
161+
dumpMultiPolygon(myMultiPolygon);
162+
}
163+
void TestQgsGeometry::unionCheck2()
164+
{
165+
// should be a single polygon as A intersect B
166+
QgsGeometry * mypUnionGeometry = mpPolygonGeometryA->Union(mpPolygonGeometryB);
167+
qDebug ("Geometry Type: " + wkbTypeAsString(mypUnionGeometry->wkbType()).toLocal8Bit());
168+
QVERIFY (mypUnionGeometry->wkbType() == QGis::WKBPolygon);
169+
QgsPolygon myPolygon = mypUnionGeometry->asPolygon();
170+
QVERIFY (myPolygon.size() > 0); //check that the union created a feature
171+
dumpPolygon(myPolygon);
172+
delete mypUnionGeometry;
173+
}
174+
175+
void TestQgsGeometry::dumpMultiPolygon( QgsMultiPolygon &theMultiPolygon )
176+
{
177+
qDebug ("Multipolygon Geometry Dump");
178+
for (int i = 0; i < theMultiPolygon.size(); i++)
152179
{
153-
QgsPoint myPoint = myPolyline.at(i);
154-
qDebug(myPoint.stringRep().toLocal8Bit());
180+
QgsPolygon myPolygon = theMultiPolygon.at(i);
181+
qDebug("\tPolygon in multipolygon: " + QString::number(i).toLocal8Bit());
182+
dumpPolygon(myPolygon);
183+
}
184+
}
185+
186+
void TestQgsGeometry::dumpPolygon( QgsPolygon &thePolygon )
187+
{
188+
for ( int j = 0; j < thePolygon.size(); j++ )
189+
{
190+
QgsPolyline myPolyline = thePolygon.at( j ); //rings of polygon
191+
qDebug( "\t\tRing in polygon: " + QString::number( j ).toLocal8Bit() );
192+
193+
for ( int k = 0; k < myPolyline.size(); k++ )
194+
{
195+
QgsPoint myPoint = myPolyline.at( k );
196+
qDebug( "\t\t\tPoint in ring " + QString::number( k ).toLocal8Bit() + " :" + myPoint.stringRep().toLocal8Bit() );
197+
}
198+
}
199+
}
200+
201+
QString TestQgsGeometry::wkbTypeAsString( QGis::WKBTYPE theType )
202+
{
203+
switch ( theType )
204+
{
205+
case QGis::WKBPoint:
206+
return "WKBPoint";
207+
case QGis::WKBLineString:
208+
return "WKBLineString";
209+
case QGis::WKBPolygon:
210+
return "WKBPolygon";
211+
case QGis::WKBMultiPoint:
212+
return "WKBMultiPoint";
213+
case QGis::WKBMultiLineString:
214+
return "WKBMultiLineString";
215+
case QGis::WKBMultiPolygon:
216+
return "WKBMultiPolygon";
217+
case QGis::WKBUnknown:
218+
return "WKBUnknown";
219+
case QGis::WKBPoint25D:
220+
return "WKBPoint25D";
221+
case QGis::WKBLineString25D:
222+
return "WKBLineString25D";
223+
case QGis::WKBPolygon25D:
224+
return "WKBPolygon25D";
225+
case QGis::WKBMultiPoint25D:
226+
return "WKBMultiPoint25D";
227+
case QGis::WKBMultiLineString25D:
228+
return "WKBMultiLineString25D";
229+
case QGis::WKBMultiPolygon25D:
230+
return "WKBMultiPolygon25D";
231+
default:
232+
return "Unknown type";
155233
}
156-
delete mypUnionGeometry;
157234
}
158235

159236
QTEST_MAIN(TestQgsGeometry)

0 commit comments

Comments
 (0)