|
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