Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
add test to check qgslayoutlegenditem
  • Loading branch information
speillet committed Jun 30, 2021
1 parent c07f8f8 commit f24bd45
Show file tree
Hide file tree
Showing 3 changed files with 2,199 additions and 0 deletions.
269 changes: 269 additions & 0 deletions tests/src/python/test_qgsserver_wms_getprint_legend.py
@@ -0,0 +1,269 @@
# -*- coding: utf-8 -*-
"""QGIS Unit tests for QgsServer WMS GetPrint legend.
From build dir, run: ctest -R PyQgsServerWMSGetPrintLegend -V
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
"""
__author__ = 'Sebastien Peillet'
__date__ = '30/06/2021'
__copyright__ = 'Copyright 2021, The QGIS Project'

import os
import shutil

# Needed on Qt 5 so that the serialization of XML is consistent among all executions
os.environ['QT_HASH_SEED'] = '1'

from qgis.testing import unittest
from qgis.server import QgsBufferServerRequest, QgsBufferServerResponse
from qgis.core import QgsProject
from qgis.PyQt.QtCore import QTemporaryDir
from qgis.PyQt.QtGui import QImage


from test_qgsserver import QgsServerTestBase
from utilities import unitTestDataPath


class PyQgsServerWMSGetPrintLegend(QgsServerTestBase):
"""Tests for issue GH #42036 QGIS Server GetPrint:
QGIS server print behaves inconsistently regarding legend content"""

def test_wms_getprint_legend(self):
"""Test project has 2 layer: red and green and four templates:
red: follow map theme red
green: follow map theme green
blank: no map theme
full: follow map theme full with both layer
"""

tmp_dir = QTemporaryDir()
shutil.copyfile(os.path.join(unitTestDataPath('qgis_server'), 'test_project_legend.qgs'), os.path.join(tmp_dir.path(), 'test_project_legend.qgs'))
shutil.copyfile(os.path.join(unitTestDataPath('qgis_server'), 'test_project_legend.gpkg'), os.path.join(tmp_dir.path(), 'test_project_legend.gpkg'))

project = QgsProject()
self.assertTrue(project.read(os.path.join(tmp_dir.path(), 'test_project_legend.qgs')))

params = {
"SERVICE": "WMS",
"VERSION": "1.3",
"REQUEST": "GetPrint",
"TEMPLATE": "blank",
"FORMAT": "png",
"LAYERS": "",
"map0:EXTENT": "778000,5600000,836000,5650000",
"map0:SCALE": "281285",
"map0:LAYERS": "red",
"CRS": "EPSG:3857",
"DPI": '72'
}

######################################################
# Template legend tests
# Legend symbol are displayed at coordinates :
# First item : 600 x , 40 y
# Second item : 600 x , 60 y

# blank template, no theme, specified layer is red
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# blank template, specified layer is green
params["map0:LAYERS"] = "green"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# blank template
params["map0:LAYERS"] = ""
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)

# red template, red theme, specified layer is red
params["TEMPLATE"] = "red"
params["map0:LAYERS"] = "red"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# red template, red theme, specified layer is green
params["map0:LAYERS"] = "green"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# red template, red theme
params["map0:LAYERS"] = ""
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# green template, green theme, specified layer is red
params["TEMPLATE"] = "green"
params["map0:LAYERS"] = "red"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# green template, green theme, specified layer is green
params["map0:LAYERS"] = "green"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# green template, green theme
params["map0:LAYERS"] = ""
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# full template, full theme, specified layer is red
params["TEMPLATE"] = "full"
params["map0:LAYERS"] = "red"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# full template, full theme, specified layer is green
params["map0:LAYERS"] = "green"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)

# full template, full theme
params["map0:LAYERS"] = ""
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)


if __name__ == '__main__':
unittest.main()
Binary file not shown.

0 comments on commit f24bd45

Please sign in to comment.