@@ -20,7 +20,7 @@
import glob
from osgeo import gdal , ogr
from qgis .core import QgsVectorLayer , QgsFeature , QgsGeometry , QgsFeatureRequest
from qgis .core import QgsVectorLayer , QgsFeature , QgsGeometry , QgsFeatureRequest , QgsRectangle
from qgis .testing import start_app , unittest
from utilities import unitTestDataPath
@@ -156,5 +156,44 @@ def testBug15351_closeIter_commit_closeProvider(self):
def testBug15351_commit_closeIter_closeProvider (self ):
self .internalTestBug15351 ('commit_closeIter_closeProvider' )
@unittest .expectedFailure (int (gdal .VersionInfo ('VERSION_NUM' )) < GDAL_COMPUTE_VERSION (2 , 1 , 2 ))
def testGeopackageExtentUpdate (self ):
''' test http://hub.qgis.org/issues/15273 '''
tmpfile = os .path .join (self .basetestpath , 'testGeopackageExtentUpdate.gpkg' )
ds = ogr .GetDriverByName ('GPKG' ).CreateDataSource (tmpfile )
lyr = ds .CreateLayer ('test' , geom_type = ogr .wkbPoint )
f = ogr .Feature (lyr .GetLayerDefn ())
f .SetGeometry (ogr .CreateGeometryFromWkt ('POINT(0 0)' ))
lyr .CreateFeature (f )
f = ogr .Feature (lyr .GetLayerDefn ())
f .SetGeometry (ogr .CreateGeometryFromWkt ('POINT(1 1)' ))
lyr .CreateFeature (f )
f = None
f = ogr .Feature (lyr .GetLayerDefn ())
f .SetGeometry (ogr .CreateGeometryFromWkt ('POINT(1 0.5)' ))
lyr .CreateFeature (f )
f = None
ds = None
vl = QgsVectorLayer (u'{}' .format (tmpfile ), u'test' , u'ogr' )
# Test moving a geometry that touches the bbox
self .assertTrue (vl .startEditing ())
self .assertTrue (vl .changeGeometry (1 , QgsGeometry .fromWkt ('Point (0.5 0)' )))
self .assertTrue (vl .commitChanges ())
reference = QgsGeometry .fromRect (QgsRectangle (0.5 , 0.0 , 1.0 , 1.0 ))
provider_extent = QgsGeometry .fromRect (vl .extent ())
self .assertTrue (QgsGeometry .compare (provider_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.00001 ),
provider_extent .asPolygon ()[0 ])
# Test deleting a geometry that touches the bbox
self .assertTrue (vl .startEditing ())
self .assertTrue (vl .deleteFeature (2 ))
self .assertTrue (vl .commitChanges ())
reference = QgsGeometry .fromRect (QgsRectangle (0.5 , 0.0 , 1.0 , 0.5 ))
provider_extent = QgsGeometry .fromRect (vl .extent ())
self .assertTrue (QgsGeometry .compare (provider_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.00001 ),
provider_extent .asPolygon ()[0 ])
if __name__ == '__main__' :
unittest .main ()