|
19 | 19 | import shutil |
20 | 20 | import tempfile |
21 | 21 |
|
22 | | -from qgis.core import QgsVectorLayer, QgsPoint, QgsFeature, QgsGeometry, QgsProject, QgsMapLayerRegistry, QgsField, QgsFieldConstraints |
| 22 | +from qgis.core import QgsVectorLayer, QgsPoint, QgsFeature, QgsGeometry, QgsProject, QgsMapLayerRegistry, QgsField, QgsFieldConstraints, QgsVectorLayerUtils |
23 | 23 |
|
24 | 24 | from qgis.testing import start_app, unittest |
25 | 25 | from utilities import unitTestDataPath |
@@ -185,28 +185,20 @@ def test_SplitFeature(self): |
185 | 185 | self.assertTrue(layer.isValid()) |
186 | 186 | self.assertTrue(layer.hasGeometryType()) |
187 | 187 | layer.startEditing() |
188 | | - self.assertEqual(layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0), 0) |
189 | | - self.assertEqual(layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0), 0) |
| 188 | + self.assertEqual(layer.splitFeatures([QgsPoint(0.75, -0.5), QgsPoint(0.75, 1.5)], 0), 0) |
| 189 | + self.assertEqual(layer.splitFeatures([QgsPoint(-0.5, 0.25), QgsPoint(1.5, 0.25)], 0), 0) |
190 | 190 | self.assertTrue(layer.commitChanges()) |
191 | 191 | self.assertEqual(layer.featureCount(), 4) |
192 | 192 |
|
193 | | - def xtest_SplitFeatureWithFailedCommit(self): |
| 193 | + def test_SplitFeatureWithMultiKey(self): |
194 | 194 | """Create spatialite database""" |
195 | 195 | layer = QgsVectorLayer("dbname=%s table=test_pg_mk (geometry)" % self.dbname, "test_pg_mk", "spatialite") |
196 | 196 | self.assertTrue(layer.isValid()) |
197 | 197 | self.assertTrue(layer.hasGeometryType()) |
198 | 198 | layer.startEditing() |
199 | | - self.asserEqual(layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0), 0) |
200 | | - self.asserEqual(layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0), 0) |
201 | | - self.assertFalse(layer.commitChanges()) |
202 | | - layer.rollBack() |
203 | | - feat = next(layer.getFeatures()) |
204 | | - ref = [[(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]] |
205 | | - res = feat.geometry().asPolygon() |
206 | | - for ring1, ring2 in zip(ref, res): |
207 | | - for p1, p2 in zip(ring1, ring2): |
208 | | - for c1, c2 in zip(p1, p2): |
209 | | - self.asserEqual(c1, c2) |
| 199 | + self.assertEqual(layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0), 0) |
| 200 | + self.assertEqual(layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0), 0) |
| 201 | + self.assertTrue(layer.commitChanges()) |
210 | 202 |
|
211 | 203 | def test_queries(self): |
212 | 204 | """Test loading of query-based layers""" |
@@ -475,6 +467,21 @@ def testDefaultValues(self): |
475 | 467 | self.assertEqual(l.dataProvider().defaultValue(3), 5.7) |
476 | 468 | self.assertFalse(l.dataProvider().defaultValue(4)) |
477 | 469 |
|
| 470 | + def testVectorLayerUtilsCreateFeatureWithProviderDefaultLiteral(self): |
| 471 | + vl = QgsVectorLayer("dbname=%s table='test_defaults' key='id'" % self.dbname, "test_defaults", "spatialite") |
| 472 | + self.assertEqual(vl.dataProvider().defaultValue(2), 5) |
| 473 | + |
| 474 | + f = QgsVectorLayerUtils.createFeature(vl) |
| 475 | + self.assertEqual(f.attributes(), [None, "qgis 'is good", 5, 5.7, None]) |
| 476 | + |
| 477 | + # check that provider passed attribute values take precedence over default literals |
| 478 | + f = QgsVectorLayerUtils.createFeature(vl, attributes={1: 'qgis is great', 0: 3}) |
| 479 | + self.assertEqual(f.attributes(), [3, "qgis is great", 5, 5.7, None]) |
| 480 | + |
| 481 | + # test take vector layer default value expression overrides postgres provider default clause |
| 482 | + vl.setDefaultValueExpression(3, "4*3") |
| 483 | + f = QgsVectorLayerUtils.createFeature(vl, attributes={1: 'qgis is great', 0: 3}) |
| 484 | + self.assertEqual(f.attributes(), [3, "qgis is great", 5, 12, None]) |
478 | 485 |
|
479 | 486 | if __name__ == '__main__': |
480 | 487 | unittest.main() |
0 commit comments