2020 QgsVectorLayer ,
2121 QgsFeatureRequest ,
2222 QgsFeature ,
23- QgsFields ,
23+ QgsWkbTypes ,
2424 QgsField ,
2525 QgsGeometry ,
2626 QgsPointXY ,
@@ -197,6 +197,7 @@ def testCreateLayer(self):
197197
198198 new_layer = QgsVectorLayer (uri , 'new' , 'mssql' )
199199 self .assertTrue (new_layer .isValid ())
200+ self .assertEqual (new_layer .wkbType (), QgsWkbTypes .Point )
200201 self .assertEqual ([f .name () for f in new_layer .fields ()], ['qgs_fid' , 'id' , 'fldtxt' , 'fldint' ])
201202
202203 features = [f .attributes () for f in new_layer .getFeatures ()]
@@ -208,7 +209,7 @@ def testCreateLayer(self):
208209 self .assertEqual (geom , ['Point (1 2)' , '' , 'Point (3 2)' , 'Point (4 3)' ])
209210
210211 def testCreateLayerMultiPoint (self ):
211- layer = QgsVectorLayer ("MultiPoint?field=id:integer&field=fldtxt:string&field=fldint:integer" ,
212+ layer = QgsVectorLayer ("MultiPoint?crs=epsg:3111& field=id:integer&field=fldtxt:string&field=fldint:integer" ,
212213 "addfeat" , "memory" )
213214 pr = layer .dataProvider ()
214215 f = QgsFeature ()
@@ -222,11 +223,13 @@ def testCreateLayerMultiPoint(self):
222223 pr .addFeatures ([f , f2 , f3 ])
223224
224225 uri = '{} table="qgis_test"."new_table_multipoint" sql=' .format (self .dbconn )
225- error , message = QgsVectorLayerExporter .exportLayer (layer , uri , 'mssql' , QgsCoordinateReferenceSystem ('EPSG:4326 ' ))
226+ error , message = QgsVectorLayerExporter .exportLayer (layer , uri , 'mssql' , QgsCoordinateReferenceSystem ('EPSG:3111 ' ))
226227 self .assertEqual (error , QgsVectorLayerExporter .NoError )
227228
228229 new_layer = QgsVectorLayer (uri , 'new' , 'mssql' )
229230 self .assertTrue (new_layer .isValid ())
231+ self .assertEqual (new_layer .wkbType (), QgsWkbTypes .MultiPoint )
232+ self .assertEqual (new_layer .crs ().authid (), 'EPSG:3111' )
230233 self .assertEqual ([f .name () for f in new_layer .fields ()], ['qgs_fid' , 'id' , 'fldtxt' , 'fldint' ])
231234
232235 features = [f .attributes () for f in new_layer .getFeatures ()]
@@ -236,6 +239,34 @@ def testCreateLayerMultiPoint(self):
236239 geom = [f .geometry ().asWkt () for f in new_layer .getFeatures ()]
237240 self .assertEqual (geom , ['MultiPoint ((1 2),(3 4))' , '' , 'MultiPoint ((7 8))' ])
238241
242+ def testInsertPolygonInMultiPolygon (self ):
243+ layer = QgsVectorLayer ("MultiPolygon?crs=epsg:4326&field=id:integer" , "addfeat" , "memory" )
244+ pr = layer .dataProvider ()
245+ f = QgsFeature ()
246+ f .setAttributes ([1 ])
247+ f .setGeometry (QgsGeometry .fromWkt ('MultiPolygon(((0 0, 1 0, 1 1, 0 1, 0 0)),((10 0, 11 0, 11 1, 10 1, 10 0)))' ))
248+ pr .addFeatures ([f ])
249+
250+ uri = '{} table="qgis_test"."new_table_multipolygon" sql=' .format (self .dbconn )
251+ error , message = QgsVectorLayerExporter .exportLayer (layer , uri , 'mssql' , QgsCoordinateReferenceSystem ('EPSG:4326' ))
252+ self .assertEqual (error , QgsVectorLayerExporter .NoError )
253+
254+ new_layer = QgsVectorLayer (uri , 'new' , 'mssql' )
255+ self .assertTrue (new_layer .isValid ())
256+ self .assertEqual (new_layer .wkbType (), QgsWkbTypes .MultiPolygon )
257+ geom = [f .geometry ().asWkt () for f in new_layer .getFeatures ()]
258+ self .assertEqual (geom , ['MultiPolygon (((0 0, 1 0, 1 1, 0 1, 0 0)),((10 0, 11 0, 11 1, 10 1, 10 0)))' ])
259+
260+ # add single part
261+ f2 = QgsFeature ()
262+ f2 .setAttributes ([2 ])
263+ f2 .setGeometry (QgsGeometry .fromWkt ('Polygon((30 0, 31 0, 31 1, 30 1, 30 0))' ))
264+ self .assertTrue (new_layer .dataProvider ().addFeatures ([f2 ]))
265+
266+ # should become multipart
267+ geom = [f .geometry ().asWkt () for f in new_layer .getFeatures ()]
268+ self .assertEqual (geom , ['MultiPolygon (((0 0, 1 0, 1 1, 0 1, 0 0)),((10 0, 11 0, 11 1, 10 1, 10 0)))' , 'MultiPolygon (((30 0, 31 0, 31 1, 30 1, 30 0)))' ])
269+
239270
240271if __name__ == '__main__' :
241272 unittest .main ()
0 commit comments