Skip to content

Commit b6588cd

Browse files
authoredOct 19, 2016
Merge pull request #3636 from rldhont/fix_server_legend_layertitle-release-2_16
[BUGFIX][QGIS Server] GetLegendGraphic: if LAYERTITLE is false disable layer name in legend
2 parents 56ced86 + 18f4238 commit b6588cd

File tree

6 files changed

+87
-1
lines changed

6 files changed

+87
-1
lines changed
 

‎src/server/qgswmsserver.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,14 @@ QImage* QgsWMSServer::getLegendGraphics()
939939
legendNode->setUserLabel( " " ); // empty string = no override, so let's use one space
940940
}
941941
}
942+
else if ( !mDrawLegendLayerLabel )
943+
{
944+
Q_FOREACH ( QgsLayerTreeModelLegendNode* legendNode, legendModel.layerLegendNodes( nodeLayer ) )
945+
{
946+
if ( legendNode->isEmbeddedInParent() )
947+
legendNode->setEmbeddedInParent( false );
948+
}
949+
}
942950
}
943951
}
944952

‎tests/src/python/test_qgsserver.py

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919
from mimetools import Message
2020
from StringIO import StringIO
2121
from qgis.server import QgsServer
22-
from qgis.core import QgsMessageLog
22+
from qgis.core import QgsMessageLog, QgsRenderChecker
2323
from qgis.testing import unittest
24+
from qgis.PyQt.QtCore import QSize
2425
from utilities import unitTestDataPath
2526
import osgeo.gdal
27+
import tempfile
28+
import base64
2629

2730
# Strip path and content length because path may vary
2831
RE_STRIP_PATH = r'MAP=[^&]+|Content-Length: \d+'
@@ -383,6 +386,81 @@ def test_getLegendGraphics(self):
383386
self.assertEqual(-1, h.find('Content-Type: text/xml; charset=utf-8'), "Header: %s\nResponse:\n%s" % (h, r))
384387
self.assertNotEquals(-1, h.find('Content-Type: image/png'), "Header: %s\nResponse:\n%s" % (h, r))
385388

389+
def test_getLegendGraphics_layertitle(self):
390+
"""Test that does not return an exception but an image"""
391+
parms = {
392+
'MAP': self.testdata_path + "test%2Bproject.qgs",
393+
'SERVICE': 'WMS',
394+
'VERSION': '1.3.0',
395+
'REQUEST': 'GetLegendGraphic',
396+
'FORMAT': 'image/png',
397+
#'WIDTH': '20', # optional
398+
#'HEIGHT': '20', # optional
399+
'LAYER': u'testlayer+èé',
400+
'LAYERTITLE': 'TRUE',
401+
}
402+
qs = '&'.join([u"%s=%s" % (k, v) for k, v in parms.iteritems()])
403+
r, h = self._result(self.server.handleRequest(qs))
404+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_test", 250, QSize(10, 10))
405+
406+
parms = {
407+
'MAP': self.testdata_path + "test%2Bproject.qgs",
408+
'SERVICE': 'WMS',
409+
'VERSION': '1.3.0',
410+
'REQUEST': 'GetLegendGraphic',
411+
'FORMAT': 'image/png',
412+
#'WIDTH': '20', # optional
413+
#'HEIGHT': '20', # optional
414+
'LAYER': u'testlayer+èé',
415+
'LAYERTITLE': 'FALSE',
416+
}
417+
qs = '&'.join([u"%s=%s" % (k, v) for k, v in parms.iteritems()])
418+
r, h = self._result(self.server.handleRequest(qs))
419+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_test_layertitle_false", 250, QSize(10, 10))
420+
421+
def _result(self, data):
422+
headers = {}
423+
for line in data[0].decode('UTF-8').split("\n"):
424+
if line != "":
425+
header = line.split(":")
426+
self.assertEqual(len(header), 2, line)
427+
headers[str(header[0])] = str(header[1]).strip()
428+
429+
return data[1], headers
430+
431+
def _img_diff(self, image, control_image, max_diff, max_size_diff=QSize()):
432+
temp_image = os.path.join(tempfile.gettempdir(), "%s_result.png" % control_image)
433+
434+
with open(temp_image, "wb") as f:
435+
f.write(image)
436+
437+
control = QgsRenderChecker()
438+
control.setControlPathPrefix("qgis_server")
439+
control.setControlName(control_image)
440+
control.setRenderedImage(temp_image)
441+
if max_size_diff.isValid():
442+
control.setSizeTolerance(max_size_diff.width(), max_size_diff.height())
443+
return control.compareImages(control_image), control.report()
444+
445+
def _img_diff_error(self, response, headers, image, max_diff=10, max_size_diff=QSize()):
446+
self.assertEqual(
447+
headers.get("Content-Type"), "image/png",
448+
"Content type is wrong: %s" % headers.get("Content-Type"))
449+
test, report = self._img_diff(response, image, max_diff, max_size_diff)
450+
451+
with open(os.path.join(tempfile.gettempdir(), image + "_result.png"), "rb") as rendered_file:
452+
encoded_rendered_file = base64.b64encode(rendered_file.read())
453+
message = "Image is wrong\n%s\nImage:\necho '%s' | base64 -d >%s/%s_result.png" % (
454+
report, encoded_rendered_file.strip(), tempfile.gettempdir(), image
455+
)
456+
457+
with open(os.path.join(tempfile.gettempdir(), image + "_result_diff.png"), "rb") as diff_file:
458+
encoded_diff_file = base64.b64encode(diff_file.read())
459+
message += "\nDiff:\necho '%s' | base64 -d > %s/%s_result_diff.png" % (
460+
encoded_diff_file.strip(), tempfile.gettempdir(), image
461+
)
462+
463+
self.assertTrue(test, message)
386464

387465
if __name__ == '__main__':
388466
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.