Skip to content

Commit cbad546

Browse files
committedApr 3, 2016
Followup 99d5e4, add unit tests
1 parent ae9d089 commit cbad546

File tree

1 file changed

+84
-5
lines changed

1 file changed

+84
-5
lines changed
 

‎tests/src/python/test_qgsvectorfilewriter.py

Lines changed: 84 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ def testDateTimeWriteShapefile(self):
7878
assert len(features) > 0
7979

8080
dest_file_name = os.path.join(str(QDir.tempPath()), 'datetime.shp')
81-
print(dest_file_name)
8281
crs = QgsCoordinateReferenceSystem()
8382
crs.createFromId(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
8483
write_result = QgsVectorFileWriter.writeAsVectorFormat(
@@ -134,7 +133,6 @@ def testDateTimeWriteTabfile(self):
134133
assert len(features) > 0
135134

136135
dest_file_name = os.path.join(str(QDir.tempPath()), 'datetime.tab')
137-
print(dest_file_name)
138136
crs = QgsCoordinateReferenceSystem()
139137
crs.createFromId(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
140138
write_result = QgsVectorFileWriter.writeAsVectorFormat(
@@ -191,7 +189,6 @@ def testWriteShapefileWithZ(self):
191189
# check with both a standard PointZ and 25d style Point25D type
192190
for t in [QgsWKBTypes.PointZ, QgsWKBTypes.Point25D]:
193191
dest_file_name = os.path.join(str(QDir.tempPath()), 'point_{}.shp'.format(QgsWKBTypes.displayString(t)))
194-
print(dest_file_name)
195192
crs = QgsCoordinateReferenceSystem()
196193
crs.createFromId(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
197194
write_result = QgsVectorFileWriter.writeAsVectorFormat(
@@ -215,7 +212,6 @@ def testWriteShapefileWithZ(self):
215212
#this tests that saving a layer with z WITHOUT explicitly telling the writer to keep z values,
216213
#will stay retain the z values
217214
dest_file_name = os.path.join(str(QDir.tempPath()), 'point_{}_copy.shp'.format(QgsWKBTypes.displayString(t)))
218-
print(dest_file_name)
219215
crs = QgsCoordinateReferenceSystem()
220216
crs.createFromId(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
221217
write_result = QgsVectorFileWriter.writeAsVectorFormat(
@@ -253,7 +249,6 @@ def testWriteShapefileWithMultiConversion(self):
253249
assert len(features) > 0
254250

255251
dest_file_name = os.path.join(str(QDir.tempPath()), 'to_multi.shp')
256-
print(dest_file_name)
257252
crs = QgsCoordinateReferenceSystem()
258253
crs.createFromId(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
259254
write_result = QgsVectorFileWriter.writeAsVectorFormat(
@@ -273,6 +268,90 @@ def testWriteShapefileWithMultiConversion(self):
273268
expWkt = 'MultiPoint ((1 2))'
274269
assert compareWkt(expWkt, wkt), "saving geometry with multi conversion failed: mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
275270

271+
def testWriteShapefileWithAttributeSubsets(self):
272+
"""Tests writing subsets of attributes to files."""
273+
ml = QgsVectorLayer(
274+
('Point?crs=epsg:4326&field=id:int&field=field1:int&field=field2:int&field=field3:int'),
275+
'test',
276+
'memory')
277+
278+
assert ml is not None, 'Provider not initialized'
279+
assert ml.isValid(), 'Source layer not valid'
280+
provider = ml.dataProvider()
281+
assert provider is not None
282+
283+
ft = QgsFeature()
284+
ft.setGeometry(QgsGeometry.fromWkt('Point (1 2)'))
285+
ft.setAttributes([1, 11, 12, 13])
286+
res, features = provider.addFeatures([ft])
287+
assert res
288+
assert len(features) > 0
289+
290+
#first write out with all attributes
291+
dest_file_name = os.path.join(str(QDir.tempPath()), 'all_attributes.shp')
292+
crs = QgsCoordinateReferenceSystem()
293+
crs.createFromId(4326, QgsCoordinateReferenceSystem.EpsgCrsId)
294+
write_result = QgsVectorFileWriter.writeAsVectorFormat(
295+
ml,
296+
dest_file_name,
297+
'utf-8',
298+
crs,
299+
'ESRI Shapefile',
300+
attributes=[])
301+
self.assertEqual(write_result, QgsVectorFileWriter.NoError)
302+
303+
# Open result and check
304+
created_layer = QgsVectorLayer(u'{}|layerid=0'.format(dest_file_name), u'test', u'ogr')
305+
self.assertEqual(created_layer.fields().count(), 4)
306+
f = created_layer.getFeatures(QgsFeatureRequest()).next()
307+
self.assertEqual(f['id'], 1)
308+
self.assertEqual(f['field1'], 11)
309+
self.assertEqual(f['field2'], 12)
310+
self.assertEqual(f['field3'], 13)
311+
312+
#now test writing out only a subset of attributes
313+
dest_file_name = os.path.join(str(QDir.tempPath()), 'subset_attributes.shp')
314+
write_result = QgsVectorFileWriter.writeAsVectorFormat(
315+
ml,
316+
dest_file_name,
317+
'utf-8',
318+
crs,
319+
'ESRI Shapefile',
320+
attributes=[1, 3])
321+
self.assertEqual(write_result, QgsVectorFileWriter.NoError)
322+
323+
# Open result and check
324+
created_layer = QgsVectorLayer(u'{}|layerid=0'.format(dest_file_name), u'test', u'ogr')
325+
self.assertEqual(created_layer.fields().count(), 2)
326+
f = created_layer.getFeatures(QgsFeatureRequest()).next()
327+
self.assertEqual(f['field1'], 11)
328+
self.assertEqual(f['field3'], 13)
329+
330+
#finally test writing no attributes
331+
dest_file_name = os.path.join(str(QDir.tempPath()), 'subset_attributes.shp')
332+
write_result = QgsVectorFileWriter.writeAsVectorFormat(
333+
ml,
334+
dest_file_name,
335+
'utf-8',
336+
crs,
337+
'ESRI Shapefile',
338+
skipAttributeCreation=True)
339+
self.assertEqual(write_result, QgsVectorFileWriter.NoError)
340+
341+
# Open result and check
342+
created_layer = QgsVectorLayer(u'{}|layerid=0'.format(dest_file_name), u'test', u'ogr')
343+
# expect only a default 'FID' field for shapefiles
344+
self.assertEqual(created_layer.fields().count(), 1)
345+
self.assertEqual(created_layer.fields()[0].name(), 'FID')
346+
# in this case we also check that the geometry exists, to make sure feature has been correctly written
347+
# even without attributes
348+
f = created_layer.getFeatures(QgsFeatureRequest()).next()
349+
g = f.geometry()
350+
wkt = g.exportToWkt()
351+
expWkt = 'Point (1 2)'
352+
assert compareWkt(expWkt, wkt), "geometry not saved correctly when saving without attributes : mismatch Expected:\n%s\nGot:\n%s\n" % (expWkt, wkt)
353+
self.assertEqual(f['FID'], 0)
354+
276355

277356
if __name__ == '__main__':
278357
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.