diff --git a/tests/src/python/test_provider_ogr_gpkg.py b/tests/src/python/test_provider_ogr_gpkg.py index 8bdc1528e3b..fe790ac50f1 100644 --- a/tests/src/python/test_provider_ogr_gpkg.py +++ b/tests/src/python/test_provider_ogr_gpkg.py @@ -634,7 +634,7 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase): self.assertTrue(vl.commitChanges()) def test_SplitFeature(self): - """Test gpkg feature can be splitted""" + """Test gpkg feature can be split""" tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.gpkg') ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile) lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon) diff --git a/tests/src/python/test_provider_ogr_sqlite.py b/tests/src/python/test_provider_ogr_sqlite.py index 5e573161d2f..ec00f4b42fe 100644 --- a/tests/src/python/test_provider_ogr_sqlite.py +++ b/tests/src/python/test_provider_ogr_sqlite.py @@ -19,7 +19,7 @@ import tempfile import shutil from osgeo import gdal, ogr -from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsFieldConstraints, NULL +from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsFieldConstraints, QgsFieldConstraints, QgsPointXY, NULL from qgis.testing import start_app, unittest from qgis.PyQt.QtCore import QDate, QTime, QDateTime @@ -147,13 +147,13 @@ class TestPyQgsOGRProviderSqlite(unittest.TestCase): self.assertEqual(vl.dataProvider().fieldConstraints(-1), QgsFieldConstraints.Constraints()) self.assertEqual(vl.dataProvider().fieldConstraints(1001), QgsFieldConstraints.Constraints()) - self.assertFalse(vl.dataProvider().fieldConstraints(0) & QgsFieldConstraints.ConstraintNotNull) + self.assertTrue(vl.dataProvider().fieldConstraints(0) & QgsFieldConstraints.ConstraintNotNull) self.assertFalse(vl.dataProvider().fieldConstraints(1) & QgsFieldConstraints.ConstraintNotNull) self.assertTrue(vl.dataProvider().fieldConstraints(2) & QgsFieldConstraints.ConstraintNotNull) # test that constraints have been saved to fields correctly fields = vl.fields() - self.assertFalse(fields.at(0).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull) + self.assertTrue(fields.at(0).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull) self.assertFalse(fields.at(1).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull) self.assertTrue(fields.at(2).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull) self.assertEqual(fields.at(2).constraints().constraintOrigin(QgsFieldConstraints.ConstraintNotNull), QgsFieldConstraints.ConstraintOriginProvider) @@ -270,6 +270,38 @@ class TestPyQgsOGRProviderSqlite(unittest.TestCase): vl.reload() self.assertTrue(vl.fields().at(vl.fields().count() - 1).name() == "orig_ogc_fid") + def test_SplitFeature(self): + """Test sqlite feature can be split""" + tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.sqlite') + ds = ogr.GetDriverByName('SQlite').CreateDataSource(tmpfile) + lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon) + lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString)) + f = ogr.Feature(lyr.GetLayerDefn()) + f.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON ((0 0,0 1,1 1,1 0,0 0))')) + lyr.CreateFeature(f) + f = None + ds = None + + layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr') + + # Check that pk field has unique constraint + fields = layer.fields() + pkfield = fields.at(0) + self.assertTrue(pkfield.constraints().constraints() & QgsFieldConstraints.ConstraintUnique) + + self.assertTrue(layer.isValid()) + self.assertTrue(layer.isSpatial()) + self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))') + layer.startEditing() + self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, 0), QgsPointXY(0.5, 1)], 0), 0) + self.assertTrue(layer.commitChanges()) + self.assertEqual(layer.featureCount(), 2) + + layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr') + self.assertEqual(layer.featureCount(), 2) + self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0.5 0, 0.5 1, 1 1, 1 0, 0.5 0))') + self.assertEqual([f for f in layer.getFeatures()][1].geometry().asWkt(), 'Polygon ((0.5 1, 0.5 0, 0 0, 0 1, 0.5 1))') + if __name__ == '__main__': unittest.main()