@@ -31,11 +31,30 @@ class TestQgsTracer : public QObject
31
31
void testSimple ();
32
32
void testPolygon ();
33
33
void testButterfly ();
34
+ void testLayerUpdates ();
34
35
35
36
private:
36
37
37
38
};
38
39
40
+ namespace QTest
41
+ {
42
+ template <>
43
+ char * toString ( const QgsPoint& point )
44
+ {
45
+ QByteArray ba = " QgsPoint(" + QByteArray::number ( point.x () ) +
46
+ " , " + QByteArray::number ( point.y () ) + " )" ;
47
+ return qstrdup ( ba.data () );
48
+ }
49
+ }
50
+
51
+ static QgsFeature make_feature ( const QString& wkt )
52
+ {
53
+ QgsFeature f;
54
+ f.setGeometry ( QgsGeometry::fromWkt ( wkt ) );
55
+ return f;
56
+ }
57
+
39
58
static QgsVectorLayer* make_layer ( const QStringList& wkts )
40
59
{
41
60
QgsVectorLayer* vl = new QgsVectorLayer ( " LineString" , " x" , " memory" );
@@ -44,8 +63,7 @@ static QgsVectorLayer* make_layer( const QStringList& wkts )
44
63
vl->startEditing ();
45
64
foreach ( const QString& wkt, wkts )
46
65
{
47
- QgsFeature f;
48
- f.setGeometry ( QgsGeometry::fromWkt ( wkt ) );
66
+ QgsFeature f ( make_feature ( wkt ) );
49
67
vl->addFeature ( f, false );
50
68
}
51
69
vl->commitChanges ();
@@ -151,6 +169,8 @@ void TestQgsTracer::testPolygon()
151
169
QCOMPARE ( points[0 ], QgsPoint ( 1 , 0 ) );
152
170
QCOMPARE ( points[1 ], QgsPoint ( 0 , 0 ) );
153
171
QCOMPARE ( points[2 ], QgsPoint ( 0 , 1 ) );
172
+
173
+ delete vl;
154
174
}
155
175
156
176
void TestQgsTracer::testButterfly ()
@@ -183,6 +203,71 @@ void TestQgsTracer::testButterfly()
183
203
delete vl;
184
204
}
185
205
206
+ void TestQgsTracer::testLayerUpdates ()
207
+ {
208
+ // check whether the tracer is updated on added/removed/changed features
209
+
210
+ // same shape as in testSimple()
211
+ QStringList wkts;
212
+ wkts << " LINESTRING(0 0, 0 10)"
213
+ << " LINESTRING(0 0, 10 0)"
214
+ << " LINESTRING(0 10, 20 10)"
215
+ << " LINESTRING(10 0, 20 10)" ;
216
+
217
+ QgsVectorLayer* vl = make_layer ( wkts );
218
+
219
+ QgsTracer tracer;
220
+ tracer.setLayers ( QList<QgsVectorLayer*>() << vl );
221
+ tracer.init ();
222
+
223
+ QgsPolyline points1 = tracer.findShortestPath ( QgsPoint ( 10 , 0 ), QgsPoint ( 10 , 10 ) );
224
+ QCOMPARE ( points1.count (), 3 );
225
+ QCOMPARE ( points1[0 ], QgsPoint ( 10 , 0 ) );
226
+ QCOMPARE ( points1[1 ], QgsPoint ( 20 , 10 ) );
227
+ QCOMPARE ( points1[2 ], QgsPoint ( 10 , 10 ) );
228
+
229
+ vl->startEditing ();
230
+
231
+ // add a shortcut
232
+ QgsFeature f ( make_feature ( " LINESTRING(10 0, 10 10)" ) );
233
+ vl->addFeature ( f );
234
+
235
+ QgsPolyline points2 = tracer.findShortestPath ( QgsPoint ( 10 , 0 ), QgsPoint ( 10 , 10 ) );
236
+ QCOMPARE ( points2.count (), 2 );
237
+ QCOMPARE ( points2[0 ], QgsPoint ( 10 , 0 ) );
238
+ QCOMPARE ( points2[1 ], QgsPoint ( 10 , 10 ) );
239
+
240
+ // delete the shortcut
241
+ vl->deleteFeature ( f.id () );
242
+
243
+ QgsPolyline points3 = tracer.findShortestPath ( QgsPoint ( 10 , 0 ), QgsPoint ( 10 , 10 ) );
244
+ QCOMPARE ( points3.count (), 3 );
245
+ QCOMPARE ( points3[0 ], QgsPoint ( 10 , 0 ) );
246
+ QCOMPARE ( points3[1 ], QgsPoint ( 20 , 10 ) );
247
+ QCOMPARE ( points3[2 ], QgsPoint ( 10 , 10 ) );
248
+
249
+ // make the shortcut again from a different feature
250
+ QgsGeometry* g = QgsGeometry::fromWkt ( " LINESTRING(10 0, 10 10)" );
251
+ vl->changeGeometry ( 2 , g ); // change bottom line (second item in wkts)
252
+ delete g;
253
+
254
+ QgsPolyline points4 = tracer.findShortestPath ( QgsPoint ( 10 , 0 ), QgsPoint ( 10 , 10 ) );
255
+ QCOMPARE ( points4.count (), 2 );
256
+ QCOMPARE ( points4[0 ], QgsPoint ( 10 , 0 ) );
257
+ QCOMPARE ( points4[1 ], QgsPoint ( 10 , 10 ) );
258
+
259
+ QgsPolyline points5 = tracer.findShortestPath ( QgsPoint ( 0 , 0 ), QgsPoint ( 10 , 0 ) );
260
+ QCOMPARE ( points5.count (), 4 );
261
+ QCOMPARE ( points5[0 ], QgsPoint ( 0 , 0 ) );
262
+ QCOMPARE ( points5[1 ], QgsPoint ( 0 , 10 ) );
263
+ QCOMPARE ( points5[2 ], QgsPoint ( 10 , 10 ) );
264
+ QCOMPARE ( points5[3 ], QgsPoint ( 10 , 0 ) );
265
+
266
+ vl->rollBack ();
267
+
268
+ delete vl;
269
+ }
270
+
186
271
187
272
QTEST_MAIN ( TestQgsTracer )
188
273
#include " testqgstracer.moc"
0 commit comments