def testCreateLayerMultiPoint(self): layer = QgsVectorLayer("MultiPoint?crs=epsg:3111&field=id:integer&field=fldtxt:string&field=fldint:integer", "addfeat", "memory") pr = layer.dataProvider() f = QgsFeature() f.setAttributes([1, "test", 1]) f.setGeometry(QgsGeometry.fromWkt('MultiPoint(1 2, 3 4)')) f2 = QgsFeature() f2.setAttributes([2, "test2", 3]) f3 = QgsFeature() f3.setAttributes([3, "test2", NULL]) f3.setGeometry(QgsGeometry.fromWkt('MultiPoint(7 8)')) pr.addFeatures([f, f2, f3]) uri = '{} table="qgis_test"."new_table_multipoint" sql='.format(self.dbconn) error, message = QgsVectorLayerExporter.exportLayer(layer, uri, 'mssql', QgsCoordinateReferenceSystem('EPSG:3111')) self.assertEqual(error, QgsVectorLayerExporter.NoError) new_layer = QgsVectorLayer(uri, 'new', 'mssql') self.assertTrue(new_layer.isValid()) self.assertEqual(new_layer.wkbType(), QgsWkbTypes.MultiPoint) self.assertEqual(new_layer.crs().authid(), 'EPSG:3111') self.assertEqual([f.name() for f in new_layer.fields()], ['qgs_fid', 'id', 'fldtxt', 'fldint']) features = [f.attributes() for f in new_layer.getFeatures()] self.assertEqual(features, [[1, 1, 'test', 1], [2, 2, 'test2', 3], [3, 3, 'test2', NULL]]) geom = [f.geometry().asWkt() for f in new_layer.getFeatures()] self.assertEqual(geom, ['MultiPoint ((1 2),(3 4))', '', 'MultiPoint ((7 8))'])
def testCreateLayer(self): layer = QgsVectorLayer("Point?field=id:integer&field=fldtxt:string&field=fldint:integer", "addfeat", "memory") pr = layer.dataProvider() f = QgsFeature() f.setAttributes([1, "test", 1]) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(1, 2))) f2 = QgsFeature() f2.setAttributes([2, "test2", 3]) f3 = QgsFeature() f3.setAttributes([3, "test2", NULL]) f3.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(3, 2))) f4 = QgsFeature() f4.setAttributes([4, NULL, 3]) f4.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(4, 3))) pr.addFeatures([f, f2, f3, f4]) uri = '{} table="qgis_test"."new_table" sql='.format(self.dbconn) error, message = QgsVectorLayerExporter.exportLayer(layer, uri, 'mssql', QgsCoordinateReferenceSystem('EPSG:4326')) self.assertEqual(error, QgsVectorLayerExporter.NoError) new_layer = QgsVectorLayer(uri, 'new', 'mssql') self.assertTrue(new_layer.isValid()) self.assertEqual(new_layer.wkbType(), QgsWkbTypes.Point) self.assertEqual([f.name() for f in new_layer.fields()], ['qgs_fid', 'id', 'fldtxt', 'fldint']) features = [f.attributes() for f in new_layer.getFeatures()] self.assertEqual(features, [[1, 1, 'test', 1], [2, 2, 'test2', 3], [3, 3, 'test2', NULL], [4, 4, NULL, 3]]) geom = [f.geometry().asWkt() for f in new_layer.getFeatures()] self.assertEqual(geom, ['Point (1 2)', '', 'Point (3 2)', 'Point (4 3)'])
def test_algorithm(self): geocoder = TestGeocoder() alg = TestGeocoderAlgorithm(geocoder) alg.initParameters() fields = QgsFields() fields.append(QgsField('some_pk', QVariant.Int)) fields.append(QgsField('address', QVariant.String)) f = QgsFeature(fields) f.initAttributes(2) f['some_pk'] = 17 params = {'FIELD': 'address'} context = QgsProcessingContext() feedback = QgsProcessingFeedback() self.assertTrue(alg.prepareAlgorithm(params, context, feedback)) output_fields = alg.outputFields(fields) self.assertEqual([f.name() for f in output_fields], ['some_pk', 'address']) self.assertEqual([f.type() for f in output_fields], [QVariant.Int, QVariant.String]) # empty field res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertTrue(res[0].geometry().isNull()) self.assertEqual(res[0].attributes(), [17, NULL]) # no result f['address'] = 'c' res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertTrue(res[0].geometry().isNull()) self.assertEqual(res[0].attributes(), [17, 'c']) f['address'] = 'a' res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertEqual(res[0].geometry().asWkt(), 'Point (1 2)') self.assertEqual(res[0].attributes(), [17, 'a']) f['address'] = 'b' res = alg.processFeature(f, context, feedback) self.assertEqual(len(res), 1) self.assertEqual(res[0].geometry().asWkt(), 'Point (11 12)') self.assertEqual(res[0].attributes(), [17, 'b'])