Skip to content

Commit bb0490d

Browse files
committed
Added a test to verify that we can get a map to render in the template (python bindings)
1 parent d18c9c6 commit bb0490d

File tree

1 file changed

+66
-4
lines changed

1 file changed

+66
-4
lines changed

tests/src/python/test_qgscomposition.py

+66-4
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,16 @@
2020
import sys
2121
import os
2222
from utilities import unitTestDataPath, getQgisTestApp
23-
from PyQt4.QtCore import QUrl, QString, qDebug
23+
from PyQt4.QtCore import QFileInfo, QDir, QStringList
2424
from PyQt4.QtXml import QDomDocument
25-
from qgis.core import (QgsComposition, QgsPoint)
25+
from qgis.core import (QgsComposition,
26+
QgsPoint,
27+
QgsRasterLayer,
28+
QgsMultiBandColorRenderer,
29+
QgsMapLayerRegistry,
30+
QgsMapRenderer
31+
)
2632

27-
from qgscompositionchecker import QgsCompositionChecker
2833
# support python < 2.7 via unittest2
2934
# needed for expected failure decorator
3035
if sys.version_info[0:2] < (2,7):
@@ -34,7 +39,7 @@
3439
print "You need to install unittest2 to run the salt tests"
3540
sys.exit(1)
3641
else:
37-
from unittest import TestCase, expectedFailure
42+
from unittest import expectedFailure
3843

3944
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
4045
TEST_DATA_DIR = unitTestDataPath()
@@ -94,5 +99,62 @@ def testNoSubstitutionMap(self):
9499
myMessage = ('Map 0 could not be found in template %s', myFile)
95100
assert myMap is not None, myMessage
96101

102+
def testPrintMapFromTemplate(self):
103+
"""Test that we can get a map to render in the template."""
104+
myPath = os.path.join(TEST_DATA_DIR, 'landsat.tif')
105+
myFileInfo = QFileInfo(myPath)
106+
myRasterLayer = QgsRasterLayer(myFileInfo.filePath(),
107+
myFileInfo.completeBaseName())
108+
myRenderer = QgsMultiBandColorRenderer(
109+
myRasterLayer.dataProvider(), 2, 3, 4)
110+
#mRasterLayer.setRenderer( rasterRenderer )
111+
myPipe = myRasterLayer.pipe()
112+
assert myPipe.set( myRenderer ), "Cannot set pipe renderer"
113+
114+
QgsMapLayerRegistry.instance().addMapLayer(myRasterLayer)
115+
116+
myMapRenderer = QgsMapRenderer()
117+
myLayerStringList = QStringList()
118+
myLayerStringList.append(myRasterLayer.id())
119+
myMapRenderer.setLayerSet(myLayerStringList)
120+
myMapRenderer.setProjectionsEnabled(False)
121+
122+
123+
myComposition = QgsComposition(myMapRenderer)
124+
myFile = os.path.join(TEST_DATA_DIR, 'template-for-substitution.qpt')
125+
myTemplateFile = file(myFile, 'rt')
126+
myTemplateContent = myTemplateFile.read()
127+
myTemplateFile.close()
128+
myDocument = QDomDocument()
129+
myDocument.setContent(myTemplateContent)
130+
myComposition.loadFromTemplate(myDocument)
131+
132+
# now render the map, first zooming to the raster extents
133+
myMap = myComposition.getComposerMapById(0)
134+
myMessage = ('Map 0 could not be found in template %s', myFile)
135+
assert myMap is not None, myMessage
136+
137+
myExtent = myRasterLayer.extent()
138+
myMap.setNewExtent(myExtent)
139+
140+
myImagePath = os.path.join(str(QDir.tempPath()),
141+
'template_map_render_python.png')
142+
143+
myPageNumber = 0
144+
myImage = myComposition.printPageAsRaster(myPageNumber)
145+
myImage.save(myImagePath)
146+
assert os.path.exists(myImagePath), 'Map render was not created.'
147+
148+
# Not sure if this is a predictable way to test but its quicker than
149+
# rendering.
150+
myFileSize = QFileInfo(myImagePath).size()
151+
myExpectedFileSize = 100000
152+
myMessage = ('Expected file size to be greater than %s, got %s' %
153+
(myExpectedFileSize, myFileSize))
154+
assert myFileSize > myExpectedFileSize, myMessage
155+
156+
157+
158+
97159
if __name__ == '__main__':
98160
unittest.main()

0 commit comments

Comments
 (0)