diff --git a/python/PyQt6/server/auto_generated/qgsserverparameters.sip.in b/python/PyQt6/server/auto_generated/qgsserverparameters.sip.in index 973004e5bfe8..fc32f831f0a2 100644 --- a/python/PyQt6/server/auto_generated/qgsserverparameters.sip.in +++ b/python/PyQt6/server/auto_generated/qgsserverparameters.sip.in @@ -70,42 +70,46 @@ Converts the parameter into a list of strings :return: A list of strings %End - QList toIntList( bool &ok, char delimiter = ',' ) const; + QList toIntList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of integers. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of integers %End - QList toDoubleList( bool &ok, char delimiter = ',' ) const; + QList toDoubleList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of doubles. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of doubles %End - QList toColorList( bool &ok, char delimiter = ',' ) const; + QList toColorList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of colors. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of colors %End - QList toGeomList( bool &ok, char delimiter = ',' ) const; + QList toGeomList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of geometries. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of geometries %End diff --git a/python/server/auto_generated/qgsserverparameters.sip.in b/python/server/auto_generated/qgsserverparameters.sip.in index 236bde6c7fc0..495bd8f08bd2 100644 --- a/python/server/auto_generated/qgsserverparameters.sip.in +++ b/python/server/auto_generated/qgsserverparameters.sip.in @@ -70,42 +70,46 @@ Converts the parameter into a list of strings :return: A list of strings %End - QList toIntList( bool &ok, char delimiter = ',' ) const; + QList toIntList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of integers. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of integers %End - QList toDoubleList( bool &ok, char delimiter = ',' ) const; + QList toDoubleList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of doubles. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of doubles %End - QList toColorList( bool &ok, char delimiter = ',' ) const; + QList toColorList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of colors. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of colors %End - QList toGeomList( bool &ok, char delimiter = ',' ) const; + QList toGeomList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; %Docstring Converts the parameter into a list of geometries. :param ok: ``True`` if there's no error during the conversion, ``False`` otherwise :param delimiter: The character used for delimiting +:param skipEmptyParts: for splitting :return: A list of geometries %End diff --git a/src/server/qgsserverparameters.cpp b/src/server/qgsserverparameters.cpp index b60aefcdccc4..76d970c25ded 100644 --- a/src/server/qgsserverparameters.cpp +++ b/src/server/qgsserverparameters.cpp @@ -95,12 +95,12 @@ QStringList QgsServerParameterDefinition::toStringList( const char delimiter, co } } -QList QgsServerParameterDefinition::toGeomList( bool &ok, const char delimiter ) const +QList QgsServerParameterDefinition::toGeomList( bool &ok, const char delimiter, const bool skipEmptyParts ) const { ok = true; QList geoms; - const auto constStringList( toStringList( delimiter ) ); + const auto constStringList( toStringList( delimiter, skipEmptyParts ) ); for ( const auto &wkt : constStringList ) { const QgsGeometry g( QgsGeometry::fromWkt( wkt ) ); @@ -202,12 +202,12 @@ QStringList QgsServerParameterDefinition::toExpressionList() const return filters; } -QList QgsServerParameterDefinition::toColorList( bool &ok, const char delimiter ) const +QList QgsServerParameterDefinition::toColorList( bool &ok, const char delimiter, bool skipEmptyParts ) const { ok = true; QList colors; - const auto constStringList( toStringList( delimiter ) ); + const auto constStringList( toStringList( delimiter, skipEmptyParts ) ); for ( const auto &part : constStringList ) { QString cStr( part ); @@ -234,12 +234,12 @@ QList QgsServerParameterDefinition::toColorList( bool &ok, const char de return colors; } -QList QgsServerParameterDefinition::toIntList( bool &ok, const char delimiter ) const +QList QgsServerParameterDefinition::toIntList( bool &ok, const char delimiter, bool skipEmptyParts ) const { ok = true; QList ints; - const auto constStringList( toStringList( delimiter ) ); + const auto constStringList( toStringList( delimiter, skipEmptyParts ) ); for ( const auto &part : constStringList ) { const int val = part.toInt( &ok ); @@ -255,12 +255,12 @@ QList QgsServerParameterDefinition::toIntList( bool &ok, const char delimit return ints; } -QList QgsServerParameterDefinition::toDoubleList( bool &ok, const char delimiter ) const +QList QgsServerParameterDefinition::toDoubleList( bool &ok, const char delimiter, bool skipEmptyParts ) const { ok = true; QList vals; - const auto constStringList( toStringList( delimiter ) ); + const auto constStringList( toStringList( delimiter, skipEmptyParts ) ); for ( const auto &part : constStringList ) { const double val = part.toDouble( &ok ); diff --git a/src/server/qgsserverparameters.h b/src/server/qgsserverparameters.h index 5b86c18703aa..c46985dac84f 100644 --- a/src/server/qgsserverparameters.h +++ b/src/server/qgsserverparameters.h @@ -80,33 +80,37 @@ class SERVER_EXPORT QgsServerParameterDefinition * Converts the parameter into a list of integers. * \param ok TRUE if there's no error during the conversion, FALSE otherwise * \param delimiter The character used for delimiting + * \param skipEmptyParts for splitting * \returns A list of integers */ - QList toIntList( bool &ok, char delimiter = ',' ) const; + QList toIntList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of doubles. * \param ok TRUE if there's no error during the conversion, FALSE otherwise * \param delimiter The character used for delimiting + * \param skipEmptyParts for splitting * \returns A list of doubles */ - QList toDoubleList( bool &ok, char delimiter = ',' ) const; + QList toDoubleList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of colors. * \param ok TRUE if there's no error during the conversion, FALSE otherwise * \param delimiter The character used for delimiting + * \param skipEmptyParts for splitting * \returns A list of colors */ - QList toColorList( bool &ok, char delimiter = ',' ) const; + QList toColorList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of geometries. * \param ok TRUE if there's no error during the conversion, FALSE otherwise * \param delimiter The character used for delimiting + * \param skipEmptyParts for splitting * \returns A list of geometries */ - QList toGeomList( bool &ok, char delimiter = ',' ) const; + QList toGeomList( bool &ok, char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of OGC filters. diff --git a/src/server/services/wms/qgswmsparameters.cpp b/src/server/services/wms/qgswmsparameters.cpp index 51938793114d..73bd199690a0 100644 --- a/src/server/services/wms/qgswmsparameters.cpp +++ b/src/server/services/wms/qgswmsparameters.cpp @@ -49,15 +49,15 @@ namespace QgsWms QgsServerParameterDefinition::raiseError( msg ); } - QStringList QgsWmsParameter::toStyleList( const char delimiter ) const + QStringList QgsWmsParameter::toStyleList( const char delimiter, bool skipEmptyParts ) const { - return QgsServerParameterDefinition::toStringList( delimiter, false ); + return QgsServerParameterDefinition::toStringList( delimiter, skipEmptyParts ); } - QList QgsWmsParameter::toGeomList( const char delimiter ) const + QList QgsWmsParameter::toGeomList( const char delimiter, bool skipEmptyParts ) const { bool ok = true; - const QList geoms = QgsServerParameterDefinition::toGeomList( ok, delimiter ); + const QList geoms = QgsServerParameterDefinition::toGeomList( ok, delimiter, skipEmptyParts ); if ( !ok ) { @@ -138,10 +138,10 @@ namespace QgsWms return col; } - QList QgsWmsParameter::toColorList( const char delimiter ) const + QList QgsWmsParameter::toColorList( const char delimiter, bool skipEmptyParts ) const { bool ok = false; - const QList vals = QgsServerParameterDefinition::toColorList( ok, delimiter ); + const QList vals = QgsServerParameterDefinition::toColorList( ok, delimiter, skipEmptyParts ); if ( !ok ) { @@ -152,10 +152,10 @@ namespace QgsWms return vals; } - QList QgsWmsParameter::toIntList( const char delimiter ) const + QList QgsWmsParameter::toIntList( const char delimiter, bool skipEmptyParts ) const { bool ok = false; - const QList vals = QgsServerParameterDefinition::toIntList( ok, delimiter ); + const QList vals = QgsServerParameterDefinition::toIntList( ok, delimiter, skipEmptyParts ); if ( !ok ) { @@ -166,10 +166,10 @@ namespace QgsWms return vals; } - QList QgsWmsParameter::toDoubleList( const char delimiter ) const + QList QgsWmsParameter::toDoubleList( const char delimiter, bool skipEmptyParts ) const { bool ok = false; - const QList vals = QgsServerParameterDefinition::toDoubleList( ok, delimiter ); + const QList vals = QgsServerParameterDefinition::toDoubleList( ok, delimiter, skipEmptyParts ); if ( !ok ) { @@ -1271,77 +1271,77 @@ namespace QgsWms QStringList QgsWmsParameters::highlightLabelSize() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELSIZE ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELSIZE ).toStringList( ';', false ); } QList QgsWmsParameters::highlightLabelSizeAsInt() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELSIZE ).toIntList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELSIZE ).toIntList( ';', false ); } QStringList QgsWmsParameters::highlightLabelColor() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELCOLOR ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELCOLOR ).toStringList( ';', false ); } QList QgsWmsParameters::highlightLabelColorAsColor() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELCOLOR ).toColorList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELCOLOR ).toColorList( ';', false ); } QStringList QgsWmsParameters::highlightLabelWeight() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELWEIGHT ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELWEIGHT ).toStringList( ';', false ); } QList QgsWmsParameters::highlightLabelWeightAsInt() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELWEIGHT ).toIntList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELWEIGHT ).toIntList( ';', false ); } QStringList QgsWmsParameters::highlightLabelFont() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELFONT ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELFONT ).toStringList( ';', false ); } QStringList QgsWmsParameters::highlightLabelBufferColor() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERCOLOR ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERCOLOR ).toStringList( ';', false ); } QList QgsWmsParameters::highlightLabelBufferColorAsColor() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERCOLOR ).toColorList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERCOLOR ).toColorList( ';', false ); } QStringList QgsWmsParameters::highlightLabelBufferSize() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERSIZE ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERSIZE ).toStringList( ';', false ); } QList QgsWmsParameters::highlightLabelBufferSizeAsFloat() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERSIZE ).toDoubleList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABELBUFFERSIZE ).toDoubleList( ';', false ); } QList QgsWmsParameters::highlightLabelRotation() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_ROTATION ).toDoubleList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_ROTATION ).toDoubleList( ';', false ); } QList QgsWmsParameters::highlightLabelDistance() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_DISTANCE ).toDoubleList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_DISTANCE ).toDoubleList( ';', false ); } QStringList QgsWmsParameters::highlightLabelHorizontalAlignment() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_HORIZONTAL_ALIGNMENT ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_HORIZONTAL_ALIGNMENT ).toStringList( ';', false ); } QStringList QgsWmsParameters::highlightLabelVerticalAlignment() const { - return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_VERTICAL_ALIGNMENT ).toStringList( ';' ); + return mWmsParameters.value( QgsWmsParameter::HIGHLIGHT_LABEL_VERTICAL_ALIGNMENT ).toStringList( ';', false ); } QString QgsWmsParameters::wmsPrecision() const @@ -1806,91 +1806,91 @@ namespace QgsWms wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_GEOM, mapId ); if ( wmsParam.isValid() ) { - geoms = wmsParam.toGeomList( ';' ); + geoms = wmsParam.toGeomList( ';', false ); } QStringList slds; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_SYMBOL, mapId ); if ( wmsParam.isValid() ) { - slds = wmsParam.toStringList( ';' ); + slds = wmsParam.toStringList( ';', false ); } QStringList labels; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELSTRING, mapId ); if ( wmsParam.isValid() ) { - labels = wmsParam.toStringList( ';' ); + labels = wmsParam.toStringList( ';', false ); } QStringList fonts; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELFONT, mapId ); if ( wmsParam.isValid() ) { - fonts = wmsParam.toStringList( ';' ); + fonts = wmsParam.toStringList( ';', false ); } QList colors; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELCOLOR, mapId ); if ( wmsParam.isValid() ) { - colors = wmsParam.toColorList( ';' ); + colors = wmsParam.toColorList( ';', false ); } QList sizes; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELSIZE, mapId ); if ( wmsParam.isValid() ) { - sizes = wmsParam.toIntList( ';' ); + sizes = wmsParam.toIntList( ';', false ); } QList weights; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELWEIGHT, mapId ); if ( wmsParam.isValid() ) { - weights = wmsParam.toIntList( ';' ); + weights = wmsParam.toIntList( ';', false ); } QList bufferColors; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELBUFFERCOLOR, mapId ); if ( wmsParam.isValid() ) { - bufferColors = wmsParam.toColorList( ';' ); + bufferColors = wmsParam.toColorList( ';', false ); } QList bufferSizes; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABELBUFFERSIZE, mapId ); if ( wmsParam.isValid() ) { - bufferSizes = wmsParam.toDoubleList( ';' ); + bufferSizes = wmsParam.toDoubleList( ';', false ); } QList rotations; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABEL_ROTATION, mapId ); if ( wmsParam.isValid() ) { - rotations = wmsParam.toDoubleList( ';' ); + rotations = wmsParam.toDoubleList( ';', false ); } QList distances; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABEL_DISTANCE, mapId ); if ( wmsParam.isValid() ) { - distances = wmsParam.toDoubleList( ';' ); + distances = wmsParam.toDoubleList( ';', false ); } QStringList halis; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABEL_HORIZONTAL_ALIGNMENT, mapId ); if ( wmsParam.isValid() ) { - halis = wmsParam.toStringList(); + halis = wmsParam.toStringList( ';', false ); } QStringList valis; wmsParam = idParameter( QgsWmsParameter::HIGHLIGHT_LABEL_VERTICAL_ALIGNMENT, mapId ); if ( wmsParam.isValid() ) { - valis = wmsParam.toStringList(); + valis = wmsParam.toStringList( ';', false ); } int nHLayers = std::min( geoms.size(), slds.size() ); diff --git a/src/server/services/wms/qgswmsparameters.h b/src/server/services/wms/qgswmsparameters.h index 117b9e9362b9..5d0566b11809 100644 --- a/src/server/services/wms/qgswmsparameters.h +++ b/src/server/services/wms/qgswmsparameters.h @@ -214,42 +214,47 @@ namespace QgsWms * Converts the parameter into a list of strings and keeps empty parts * Default style value is an empty string * \param delimiter The character used for delimiting + * \param skipEmptyParts for splitting * \returns A list of strings * \since QGIS 3.8 */ - QStringList toStyleList( const char delimiter = ',' ) const; + QStringList toStyleList( const char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of geometries. * \param delimiter The character delimiting string geometries + * \param skipEmptyParts for splitting * \returns A list of geometries * \throws QgsBadRequestException Invalid parameter exception */ - QList toGeomList( const char delimiter = ',' ) const; + QList toGeomList( const char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of integers. * \param delimiter The character delimiting string integers + * \param skipEmptyParts for splitting * \returns A list of integers * \throws QgsBadRequestException Invalid parameter exception */ - QList toIntList( const char delimiter = ',' ) const; + QList toIntList( const char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of doubles. * \param delimiter The character delimiting string doubles + * \param skipEmptyParts for splitting * \returns A list of doubles * \throws QgsBadRequestException Invalid parameter exception */ - QList toDoubleList( const char delimiter = ',' ) const; + QList toDoubleList( const char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a list of colors. * \param delimiter The character delimiting string colors + * \param skipEmptyParts for splitting * \returns A list of colors * \throws QgsBadRequestException Invalid parameter exception */ - QList toColorList( const char delimiter = ',' ) const; + QList toColorList( const char delimiter = ',', bool skipEmptyParts = true ) const; /** * Converts the parameter into a rectangle. diff --git a/tests/src/python/test_qgsserver_wms_getprint.py b/tests/src/python/test_qgsserver_wms_getprint.py index e2555b0e0d17..d579987f6bdc 100644 --- a/tests/src/python/test_qgsserver_wms_getprint.py +++ b/tests/src/python/test_qgsserver_wms_getprint.py @@ -526,6 +526,36 @@ def test_wms_getprint_external(self): r, h = self._result(self._execute_request(qs)) self._img_diff_error(r, h, "WMS_GetPrint_External") + def test_wms_getprint_highlight_empty_labels(self): + qs = "?" + "&".join( + [ + "%s=%s" % i + for i in list( + { + "MAP": urllib.parse.quote(self.projectPath), + "SERVICE": "WMS", + "VERSION": "1.1.1", + "REQUEST": "GetPrint", + "TEMPLATE": "layoutA4", + "FORMAT": "png", + "map0:EXTENT": "-33626185.498,-13032965.185,33978427.737,16020257.031", + "map0:LAYERS": "Country,Hello", + "CRS": "EPSG:3857", + "map0:HIGHLIGHT_GEOM": "POINT(-4000000 12215266);POINT(3271207 6832268);POINT(2360238 1035192)", + "map0:HIGHLIGHT_LABELSTRING": "Arctic;;Africa", + "map0:HIGHLIGHT_SYMBOL": 'circle%23ff000017.5%237bdcb5128.4;circle%23ff000017.5%237bdcb5128.4;circle%23ff000017.5%237bdcb5128.4', + "map0:HIGHLIGHT_LABELSIZE": "16;16;16", + "map0:HIGHLIGHT_LABELCOLOR": "red;red;red", + "map0:HIGHLIGHT_LABELBUFFERCOLOR": "white;white;white", + "map0:HIGHLIGHT_LABELBUFFERSIZE": "1;1;1", + }.items() + ) + ] + ) + + r, h = self._result(self._execute_request(qs)) + self._img_diff_error(r, h, "WMS_GetPrint_Highlight_Empty_Labels") + if __name__ == "__main__": unittest.main() diff --git a/tests/testdata/control_images/qgis_server/WMS_GetPrint_Highlight_Empty_Labels/WMS_GetPrint_Highlight_Empty_Labels.png b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Highlight_Empty_Labels/WMS_GetPrint_Highlight_Empty_Labels.png new file mode 100644 index 000000000000..202dbbc3b525 Binary files /dev/null and b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Highlight_Empty_Labels/WMS_GetPrint_Highlight_Empty_Labels.png differ diff --git a/tests/testdata/control_images/qgis_server/WMS_GetPrint_Highlight_Empty_Labels/WMS_GetPrint_Highlight_Empty_Labels_mask.png b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Highlight_Empty_Labels/WMS_GetPrint_Highlight_Empty_Labels_mask.png new file mode 100644 index 000000000000..e10f1634c450 Binary files /dev/null and b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Highlight_Empty_Labels/WMS_GetPrint_Highlight_Empty_Labels_mask.png differ