Skip to content

Commit 05fb394

Browse files
committed
Regression test to similate crash that occurs when setting a raster layer renderer a second time
1 parent 6873b31 commit 05fb394

File tree

1 file changed

+55
-1
lines changed

1 file changed

+55
-1
lines changed

tests/src/python/test_qgsrasterlayer.py

+55-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
11
import os
22
import unittest
33

4-
from qgis.core import QgsRasterLayer, QgsPoint, QgsMapLayerRegistry, QgsMapRenderer, QgsSingleBandGrayRenderer, QgsContrastEnhancement, QgsRasterTransparency, QgsRenderChecker
54
from PyQt4.QtCore import QFileInfo, QString, QStringList
5+
from PyQt4 import QtGui
6+
7+
from qgis.core import (QgsRasterLayer,
8+
QgsColorRampShader,
9+
QgsContrastEnhancement,
10+
QgsMapLayerRegistry,
11+
QgsMapRenderer,
12+
QgsPoint,
13+
QgsRasterShader,
14+
QgsRasterTransparency,
15+
QgsRenderChecker,
16+
QgsSingleBandGrayRenderer,
17+
QgsSingleBandPseudoColorRenderer)
618

719
# Convenience instances in case you may need them
820
# not used in this test
@@ -104,5 +116,47 @@ def testTransparency(self):
104116
myResultFlag = myChecker.runTest( "raster_transparency_python" );
105117
assert myResultFlag, "Raster transparency rendering test failed"
106118

119+
def testShaderCrash(self):
120+
"""Check if we assign a shader and then reassign it no crash occurs."""
121+
myPath = os.path.abspath(os.path.join(__file__, '..', '..', '..', 'testdata', 'raster', 'band1_float32_noct_epsg4326.tif'))
122+
myFileInfo = QFileInfo(myPath)
123+
myBaseName = myFileInfo.baseName()
124+
myRasterLayer = QgsRasterLayer(myPath, myBaseName)
125+
myMessage = 'Raster not loaded: %s' % myPath
126+
assert myRasterLayer.isValid(), myMessage
127+
128+
myRasterShader = QgsRasterShader()
129+
myColorRampShader = QgsColorRampShader()
130+
myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
131+
myItems = []
132+
myItem = QgsColorRampShader.ColorRampItem(10, QtGui.QColor('#ffff00'), 'foo')
133+
myItems.append(myItem)
134+
myItem = QgsColorRampShader.ColorRampItem(100, QtGui.QColor('#ff00ff'), 'bar')
135+
myItems.append(myItem)
136+
myItem = QgsColorRampShader.ColorRampItem(1000, QtGui.QColor('#00ff00'), 'kazam')
137+
myItems.append(myItem)
138+
myColorRampShader.setColorRampItemList(myItems)
139+
myRasterShader.setRasterShaderFunction(myColorRampShader)
140+
myPseudoRenderer = QgsSingleBandPseudoColorRenderer(myRasterLayer.dataProvider(), 1, myRasterShader)
141+
myRasterLayer.setRenderer(myPseudoRenderer)
142+
143+
######## works first time #############
144+
145+
myRasterShader = QgsRasterShader()
146+
myColorRampShader = QgsColorRampShader()
147+
myColorRampShader.setColorRampType(QgsColorRampShader.INTERPOLATED)
148+
myItems = []
149+
myItem = QgsColorRampShader.ColorRampItem(10, QtGui.QColor('#ffff00'), 'foo')
150+
myItems.append(myItem)
151+
myItem = QgsColorRampShader.ColorRampItem(100, QtGui.QColor('#ff00ff'), 'bar')
152+
myItems.append(myItem)
153+
myItem = QgsColorRampShader.ColorRampItem(1000, QtGui.QColor('#00ff00'), 'kazam')
154+
myItems.append(myItem)
155+
myColorRampShader.setColorRampItemList(myItems)
156+
myRasterShader.setRasterShaderFunction(myColorRampShader)
157+
######## crash on next line ##################
158+
myPseudoRenderer = QgsSingleBandPseudoColorRenderer(myRasterLayer.dataProvider(), 1, myRasterShader)
159+
myRasterLayer.setRenderer(myPseudoRenderer)
160+
107161
if __name__ == '__main__':
108162
unittest.main()

0 commit comments

Comments
 (0)