Skip to content

Commit c0ebc68

Browse files
committedSep 6, 2020
Fix test
1 parent 1c683e2 commit c0ebc68

File tree

3 files changed

+65
-42
lines changed

3 files changed

+65
-42
lines changed
 

‎python/core/auto_generated/vectortile/qgsmapboxglstyleconverter.sip.in

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -242,23 +242,27 @@ Parses a symbol layer.
242242
%End
243243

244244

245-
static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor = 0 );
245+
static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor /Out/ = 0 );
246246
%Docstring
247247
Parses a color value which is interpolated by zoom range.
248248

249249
:param json: definition of color interpolation
250250
:param context: conversion context
251-
:param defaultColor: optional storage for a reasonable "default" color representing the overall property.
251+
252+
:return: - QgsProperty representing interpolation settings
253+
- defaultColor: storage for a reasonable "default" color representing the overall property.
252254
%End
253255

254-
static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber = 0 );
256+
static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber /Out/ = 0 );
255257
%Docstring
256258
Parses a numeric value which is interpolated by zoom range.
257259

258260
:param json: definition of interpolation
259261
:param context: conversion context
260262
:param multiplier: optional multiplication factor
261-
:param defaultNumber: optional storage for a reasonable "default" number representing the overall property.
263+
264+
:return: - QgsProperty representing interpolation settings
265+
- defaultNumber: storage for a reasonable "default" number representing the overall property.
262266
%End
263267

264268
static QgsProperty parseInterpolateOpacityByZoom( const QVariantMap &json );
@@ -293,8 +297,8 @@ Parses a list of interpolation stops
293297
%End
294298

295299
static QgsProperty parseInterpolateListByZoom( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
296-
QColor *defaultColor = 0,
297-
double *defaultNumber = 0 );
300+
QColor *defaultColor /Out/ = 0,
301+
double *defaultNumber /Out/ = 0 );
298302
%Docstring
299303
Interpolates a list which starts with the interpolate function.
300304

‎src/core/vectortile/qgsmapboxglstyleconverter.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,10 @@ class CORE_EXPORT QgsMapBoxGlStyleConverter
262262
* \param json definition of color interpolation
263263
* \param context conversion context
264264
* \param defaultColor optional storage for a reasonable "default" color representing the overall property.
265+
*
266+
* \returns QgsProperty representing interpolation settings
265267
*/
266-
static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor = nullptr );
268+
static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor SIP_OUT = nullptr );
267269

268270
/**
269271
* Parses a numeric value which is interpolated by zoom range.
@@ -272,8 +274,10 @@ class CORE_EXPORT QgsMapBoxGlStyleConverter
272274
* \param context conversion context
273275
* \param multiplier optional multiplication factor
274276
* \param defaultNumber optional storage for a reasonable "default" number representing the overall property.
277+
*
278+
* \returns QgsProperty representing interpolation settings
275279
*/
276-
static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber = nullptr );
280+
static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber SIP_OUT = nullptr );
277281

278282
/**
279283
* Interpolates opacity with either scale_linear() or scale_exp() (depending on base value).
@@ -308,8 +312,8 @@ class CORE_EXPORT QgsMapBoxGlStyleConverter
308312
* \warning This is private API only, and may change in future QGIS versions
309313
*/
310314
static QgsProperty parseInterpolateListByZoom( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
311-
QColor *defaultColor = nullptr,
312-
double *defaultNumber = nullptr );
315+
QColor *defaultColor SIP_OUT = nullptr,
316+
double *defaultNumber SIP_OUT = nullptr );
313317

314318
/**
315319
* Parses a \a color in one of these supported formats:

‎tests/src/python/test_qgsmapboxglconverter.py

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,27 @@ def testColorAsHslaComponents(self):
4646

4747
def testParseInterpolateColorByZoom(self):
4848
conversion_context = QgsMapBoxGlStyleConversionContext()
49-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateColorByZoom({}, conversion_context).isActive(),
49+
props, default_col = QgsMapBoxGlStyleConverter.parseInterpolateColorByZoom({}, conversion_context)
50+
self.assertEqual(props.isActive(),
5051
False)
51-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateColorByZoom({'base': 1,
52-
'stops': [[0, '#f1f075'],
53-
[150, '#b52e3e'],
54-
[250, '#e55e5e']]
55-
},
56-
conversion_context).expressionString(),
52+
props, default_col = QgsMapBoxGlStyleConverter.parseInterpolateColorByZoom({'base': 1,
53+
'stops': [[0, '#f1f075'],
54+
[150, '#b52e3e'],
55+
[250, '#e55e5e']]
56+
},
57+
conversion_context)
58+
self.assertEqual(props.expressionString(),
5759
'CASE WHEN @zoom_level >= 0 AND @zoom_level < 150 THEN color_hsla(scale_linear(@zoom_level, 0, 150, 59, 352), scale_linear(@zoom_level, 0, 150, 81, 59), scale_linear(@zoom_level, 0, 150, 70, 44), scale_linear(@zoom_level, 0, 150, 255, 255)) WHEN @zoom_level >= 150 AND @zoom_level < 250 THEN color_hsla(scale_linear(@zoom_level, 150, 250, 352, 0), scale_linear(@zoom_level, 150, 250, 59, 72), scale_linear(@zoom_level, 150, 250, 44, 63), scale_linear(@zoom_level, 150, 250, 255, 255)) WHEN @zoom_level >= 250 THEN color_hsla(0, 72, 63, 255) ELSE color_hsla(0, 72, 63, 255) END')
58-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateColorByZoom({'base': 2,
59-
'stops': [[0, '#f1f075'],
60-
[150, '#b52e3e'],
61-
[250, '#e55e5e']]
62-
},
63-
conversion_context).expressionString(),
60+
self.assertEqual(default_col.name(), '#f1f075')
61+
props, default_col = QgsMapBoxGlStyleConverter.parseInterpolateColorByZoom({'base': 2,
62+
'stops': [[0, '#f1f075'],
63+
[150, '#b52e3e'],
64+
[250, '#e55e5e']]
65+
},
66+
conversion_context)
67+
self.assertEqual(props.expressionString(),
6468
'CASE WHEN @zoom_level >= 0 AND @zoom_level < 150 THEN color_hsla(59 + 293 * (2^(@zoom_level-0)-1)/(2^(150-0)-1), 81 + -22 * (2^(@zoom_level-0)-1)/(2^(150-0)-1), 70 + -26 * (2^(@zoom_level-0)-1)/(2^(150-0)-1), 255 + 0 * (2^(@zoom_level-0)-1)/(2^(150-0)-1)) WHEN @zoom_level >= 150 AND @zoom_level < 250 THEN color_hsla(352 + -352 * (2^(@zoom_level-150)-1)/(2^(250-150)-1), 59 + 13 * (2^(@zoom_level-150)-1)/(2^(250-150)-1), 44 + 19 * (2^(@zoom_level-150)-1)/(2^(250-150)-1), 255 + 0 * (2^(@zoom_level-150)-1)/(2^(250-150)-1)) WHEN @zoom_level >= 250 THEN color_hsla(0, 72, 63, 255) ELSE color_hsla(0, 72, 63, 255) END')
69+
self.assertEqual(default_col.name(), '#f1f075')
6570

6671
def testParseStops(self):
6772
conversion_context = QgsMapBoxGlStyleConversionContext()
@@ -74,22 +79,28 @@ def testParseStops(self):
7479

7580
def testInterpolateByZoom(self):
7681
conversion_context = QgsMapBoxGlStyleConversionContext()
77-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateByZoom({'base': 1,
78-
'stops': [[0, 11],
79-
[150, 15],
80-
[250, 22]]
81-
}, conversion_context).expressionString(),
82+
prop, default_val = QgsMapBoxGlStyleConverter.parseInterpolateByZoom({'base': 1,
83+
'stops': [[0, 11],
84+
[150, 15],
85+
[250, 22]]
86+
}, conversion_context)
87+
self.assertEqual(prop.expressionString(),
8288
'CASE WHEN @zoom_level > 0 AND @zoom_level <= 150 THEN scale_linear(@zoom_level, 0, 150, 11, 15) * 1 WHEN @zoom_level > 150 AND @zoom_level <= 250 THEN scale_linear(@zoom_level, 150, 250, 15, 22) * 1 END')
83-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateByZoom({'base': 1,
84-
'stops': [[0, 11],
85-
[150, 15]]
86-
}, conversion_context).expressionString(),
89+
self.assertEqual(default_val, 11.0)
90+
prop, default_val = QgsMapBoxGlStyleConverter.parseInterpolateByZoom({'base': 1,
91+
'stops': [[0, 11],
92+
[150, 15]]
93+
}, conversion_context)
94+
self.assertEqual(prop.expressionString(),
8795
'scale_linear(@zoom_level, 0, 150, 11, 15) * 1')
88-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateByZoom({'base': 2,
89-
'stops': [[0, 11],
90-
[150, 15]]
91-
}, conversion_context).expressionString(),
96+
self.assertEqual(default_val, 11.0)
97+
prop, default_val = QgsMapBoxGlStyleConverter.parseInterpolateByZoom({'base': 2,
98+
'stops': [[0, 11],
99+
[150, 15]]
100+
}, conversion_context)
101+
self.assertEqual(prop.expressionString(),
92102
'11 + 4 * (2^(@zoom_level-0)-1)/(2^(150-0)-1)* 1')
103+
self.assertEqual(default_val, 11.0)
93104

94105
def testInterpolateOpacityByZoom(self):
95106
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateOpacityByZoom({'base': 1,
@@ -111,7 +122,7 @@ def testInterpolateOpacityByZoom(self):
111122

112123
def testInterpolateListByZoom(self):
113124
conversion_context = QgsMapBoxGlStyleConversionContext()
114-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateListByZoom([
125+
prop, default_color, default_val = QgsMapBoxGlStyleConverter.parseInterpolateListByZoom([
115126
"interpolate",
116127
["linear"],
117128
["zoom"],
@@ -121,9 +132,11 @@ def testInterpolateListByZoom(self):
121132
0.3,
122133
18,
123134
0.6
124-
], QgsMapBoxGlStyleConverter.Opacity, conversion_context, 2).expressionString(),
125-
"CASE WHEN @zoom_level < 10 THEN set_color_part(@symbol_color, 'alpha', 0.1 * 255) WHEN @zoom_level >= 10 AND @zoom_level < 15 THEN set_color_part(@symbol_color, 'alpha', scale_linear(@zoom_level, 10, 15, 0.1 * 255, 0.3 * 255)) WHEN @zoom_level >= 15 AND @zoom_level < 18 THEN set_color_part(@symbol_color, 'alpha', scale_linear(@zoom_level, 15, 18, 0.3 * 255, 0.6 * 255)) WHEN @zoom_level >= 18 THEN set_color_part(@symbol_color, 'alpha', 0.6) END")
126-
self.assertEqual(QgsMapBoxGlStyleConverter.parseInterpolateListByZoom([
135+
], QgsMapBoxGlStyleConverter.Opacity, conversion_context, 2)
136+
self.assertEqual(prop.expressionString(),
137+
"CASE WHEN @zoom_level < 10 THEN set_color_part(@symbol_color, 'alpha', 0.1 * 255) WHEN @zoom_level >= 10 AND @zoom_level < 15 THEN set_color_part(@symbol_color, 'alpha', scale_linear(@zoom_level, 10, 15, 0.1 * 255, 0.3 * 255)) WHEN @zoom_level >= 15 AND @zoom_level < 18 THEN set_color_part(@symbol_color, 'alpha', scale_linear(@zoom_level, 15, 18, 0.3 * 255, 0.6 * 255)) WHEN @zoom_level >= 18 THEN set_color_part(@symbol_color, 'alpha', 0.6) END")
138+
139+
prop, default_color, default_val = QgsMapBoxGlStyleConverter.parseInterpolateListByZoom([
127140
"interpolate",
128141
["linear"],
129142
["zoom"],
@@ -133,8 +146,10 @@ def testInterpolateListByZoom(self):
133146
0.3,
134147
18,
135148
0.6
136-
], QgsMapBoxGlStyleConverter.Numeric, conversion_context, 2).expressionString(),
137-
"CASE WHEN @zoom_level > 10 AND @zoom_level <= 15 THEN scale_linear(@zoom_level, 10, 15, 0.1, 0.3) * 2 WHEN @zoom_level > 15 AND @zoom_level <= 18 THEN scale_linear(@zoom_level, 15, 18, 0.3, 0.6) * 2 END")
149+
], QgsMapBoxGlStyleConverter.Numeric, conversion_context, 2)
150+
self.assertEqual(prop.expressionString(),
151+
"CASE WHEN @zoom_level > 10 AND @zoom_level <= 15 THEN scale_linear(@zoom_level, 10, 15, 0.1, 0.3) * 2 WHEN @zoom_level > 15 AND @zoom_level <= 18 THEN scale_linear(@zoom_level, 15, 18, 0.3, 0.6) * 2 END")
152+
self.assertEqual(default_val, 0.2)
138153

139154
def testParseExpression(self):
140155
conversion_context = QgsMapBoxGlStyleConversionContext()

0 commit comments

Comments
 (0)
Please sign in to comment.