Skip to content

Commit be37410

Browse files
elpasonyalldawson
authored andcommitted
Unit tests for transform context project<->layer sync
1 parent 3d687e5 commit be37410

File tree

3 files changed

+137
-2
lines changed

3 files changed

+137
-2
lines changed

tests/src/python/test_qgsproject.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import qgis # NOQA
2020

2121
from qgis.core import (QgsProject,
22+
QgsCoordinateTransformContext,
2223
QgsProjectDirtyBlocker,
2324
QgsApplication,
2425
QgsUnitTypes,
@@ -1190,6 +1191,16 @@ def testColorScheme(self):
11901191
del p
11911192
self.assertEqual(len(spy), 0)
11921193

1194+
def testTransformContextSignalIsEmitted(self):
1195+
"""Test that when a project transform context changes a transformContextChanged signal is emitted"""
1196+
1197+
p = QgsProject()
1198+
spy = QSignalSpy(p.transformContextChanged)
1199+
ctx = QgsCoordinateTransformContext()
1200+
ctx.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857), 1234, 1235)
1201+
p.setTransformContext(ctx)
1202+
self.assertEqual(len(spy), 1)
1203+
11931204

11941205
if __name__ == '__main__':
11951206
unittest.main()

tests/src/python/test_qgsrasterlayer.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@
4747
QgsSingleBandPseudoColorRenderer,
4848
QgsLimitedRandomColorRamp,
4949
QgsGradientColorRamp,
50-
QgsHueSaturationFilter)
50+
QgsHueSaturationFilter,
51+
QgsCoordinateTransformContext,
52+
QgsCoordinateReferenceSystem
53+
)
5154
from utilities import unitTestDataPath
5255
from qgis.testing import start_app, unittest
5356
from qgis.testing.mocked import get_iface
@@ -1030,6 +1033,62 @@ def layerToSld(self, layer, properties={}):
10301033
return dom, root, errorMessage
10311034

10321035

1036+
class TestQgsRasterLayerTransformContext(unittest.TestCase):
1037+
1038+
def setUp(self):
1039+
"""Prepare tc"""
1040+
super(TestQgsRasterLayerTransformContext, self).setUp()
1041+
self.ctx = QgsCoordinateTransformContext()
1042+
self.ctx.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857), 1234, 1235)
1043+
self.rpath = os.path.join(unitTestDataPath(), 'landsat.tif')
1044+
1045+
def testTransformContextIsSetInCtor(self):
1046+
"""Test transform context can be set from ctor"""
1047+
1048+
rl = QgsRasterLayer(self.rpath, 'raster')
1049+
self.assertFalse(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1050+
1051+
options = QgsRasterLayer.LayerOptions(transformContext=self.ctx)
1052+
rl = QgsRasterLayer(self.rpath, 'raster', 'gdal', options)
1053+
self.assertTrue(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1054+
1055+
def testTransformContextInheritsFromProject(self):
1056+
"""Test that when a layer is added to a project it inherits its context"""
1057+
1058+
rl = QgsRasterLayer(self.rpath, 'raster')
1059+
self.assertFalse(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1060+
1061+
p = QgsProject()
1062+
self.assertFalse(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1063+
p.setTransformContext(self.ctx)
1064+
self.assertTrue(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1065+
1066+
p.addMapLayers([rl])
1067+
self.assertTrue(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1068+
1069+
def testTransformContextIsSyncedFromProject(self):
1070+
"""Test that when a layer is synced when project context changes"""
1071+
1072+
rl = QgsRasterLayer(self.rpath, 'raster')
1073+
self.assertFalse(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1074+
1075+
p = QgsProject()
1076+
self.assertFalse(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1077+
p.setTransformContext(self.ctx)
1078+
self.assertTrue(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1079+
1080+
p.addMapLayers([rl])
1081+
self.assertTrue(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1082+
1083+
# Now change the project context
1084+
tc2 = QgsCoordinateTransformContext()
1085+
p.setTransformContext(tc2)
1086+
self.assertFalse(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1087+
self.assertFalse(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1088+
p.setTransformContext(self.ctx)
1089+
self.assertTrue(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1090+
self.assertTrue(rl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
1091+
1092+
10331093
if __name__ == '__main__':
10341094
unittest.main()
1035-
rule

tests/src/python/test_qgsvectorlayer.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from qgis.core import (QgsWkbTypes,
2424
QgsAction,
25+
QgsCoordinateTransformContext,
2526
QgsDataProvider,
2627
QgsDefaultValue,
2728
QgsEditorWidgetSetup,
@@ -3167,6 +3168,70 @@ def testMaximumValue(self):
31673168
pass
31683169

31693170

3171+
class TestQgsVectorLayerTransformContext(unittest.TestCase):
3172+
3173+
def setUp(self):
3174+
"""Prepare tc"""
3175+
super(TestQgsVectorLayerTransformContext, self).setUp()
3176+
self.ctx = QgsCoordinateTransformContext()
3177+
self.ctx.addSourceDestinationDatumTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857), 1234, 1235)
3178+
3179+
def testTransformContextIsSetInCtor(self):
3180+
"""Test transform context can be set from ctor"""
3181+
3182+
vl = QgsVectorLayer(
3183+
'Point?crs=epsg:4326&field=pk:integer&field=cnt:integer&field=name:string(0)&field=name2:string(0)&field=num_char:string&key=pk',
3184+
'test', 'memory')
3185+
self.assertFalse(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3186+
3187+
options = QgsVectorLayer.LayerOptions(self.ctx)
3188+
vl = QgsVectorLayer(
3189+
'Point?crs=epsg:4326&field=pk:integer&field=cnt:integer&field=name:string(0)&field=name2:string(0)&field=num_char:string&key=pk',
3190+
'test', 'memory', options)
3191+
self.assertTrue(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3192+
3193+
def testTransformContextInheritsFromProject(self):
3194+
"""Test that when a layer is added to a project it inherits its context"""
3195+
3196+
vl = QgsVectorLayer(
3197+
'Point?crs=epsg:4326&field=pk:integer&field=cnt:integer&field=name:string(0)&field=name2:string(0)&field=num_char:string&key=pk',
3198+
'test', 'memory')
3199+
self.assertFalse(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3200+
3201+
p = QgsProject()
3202+
self.assertFalse(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3203+
p.setTransformContext(self.ctx)
3204+
self.assertTrue(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3205+
3206+
p.addMapLayers([vl])
3207+
self.assertTrue(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3208+
3209+
def testTransformContextIsSyncedFromProject(self):
3210+
"""Test that when a layer is synced when project context changes"""
3211+
3212+
vl = QgsVectorLayer(
3213+
'Point?crs=epsg:4326&field=pk:integer&field=cnt:integer&field=name:string(0)&field=name2:string(0)&field=num_char:string&key=pk',
3214+
'test', 'memory')
3215+
self.assertFalse(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3216+
3217+
p = QgsProject()
3218+
self.assertFalse(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3219+
p.setTransformContext(self.ctx)
3220+
self.assertTrue(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3221+
3222+
p.addMapLayers([vl])
3223+
self.assertTrue(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3224+
3225+
# Now change the project context
3226+
tc2 = QgsCoordinateTransformContext()
3227+
p.setTransformContext(tc2)
3228+
self.assertFalse(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3229+
self.assertFalse(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3230+
p.setTransformContext(self.ctx)
3231+
self.assertTrue(p.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3232+
self.assertTrue(vl.transformContext().hasTransform(QgsCoordinateReferenceSystem(4326), QgsCoordinateReferenceSystem(3857)))
3233+
3234+
31703235
# TODO:
31713236
# - fetch rect: feat with changed geometry: 1. in rect, 2. out of rect
31723237
# - more join tests

0 commit comments

Comments
 (0)