def testDataDefinedIconRotate(self):
        """ Test icon-rotate property that depends on a data attribute """
        context = QgsMapBoxGlStyleConversionContext()

        image = QImage(QSize(1, 1), QImage.Format_ARGB32)
        context.setSprites(image, {
            "foo": {
                "x": 0,
                "y": 0,
                "width": 1,
                "height": 1,
                "pixelRatio": 1
            }
        })
        style = {
            "layout": {
                "icon-image": "{foo}",
                "icon-rotate": ["get", "ROTATION"],
                "text-size": 11,
                "icon-size": 1
            },
            "type": "symbol",
            "id": "poi_label",
            "source-layer": "poi_label"
        }
        renderer, has_renderer, labeling, has_labeling = QgsMapBoxGlStyleConverter.parseSymbolLayer(
            style, context)
        self.assertTrue(has_renderer)
        self.assertFalse(has_labeling)
        dd_props = renderer.symbol().symbolLayers()[0].dataDefinedProperties()
        prop = dd_props.property(QgsSymbolLayer.PropertyAngle)
        self.assertEqual(prop.asExpression(), '"ROTATION"')
    def testLinePattern(self):
        """ Test line-pattern property """
        context = QgsMapBoxGlStyleConversionContext()

        image = QImage(QSize(1, 1), QImage.Format_ARGB32)
        context.setSprites(image, {
            "foo": {
                "x": 0,
                "y": 0,
                "width": 1,
                "height": 1,
                "pixelRatio": 1
            }
        })
        style = {
            "id": "mountain range/ridge",
            "type": "line",
            "source": "esri",
            "source-layer": "mountain range",
            "filter": ["==", "_symbol", 1],
            "minzoom": 13,
            "layout": {
                "line-join": "round"
            },
            "paint": {
                "line-pattern": {
                    "stops": [[13, "foo"], [15, "foo"]]
                },
                "line-width": {
                    "stops": [[14, 20], [15, 40]]
                }
            }
        }
        has_renderer, rendererStyle = QgsMapBoxGlStyleConverter.parseLineLayer(
            style, context)
        self.assertTrue(has_renderer)
        self.assertEqual(rendererStyle.geometryType(),
                         QgsWkbTypes.LineGeometry)
        self.assertEqual(rendererStyle.symbol().symbolLayers()[0].layerType(),
                         'RasterLine')
        dd_props = rendererStyle.symbol().symbolLayers(
        )[0].dataDefinedProperties()
        prop = dd_props.property(QgsSymbolLayer.PropertyFile)
        self.assertTrue(prop.isActive())