Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed Nov 26, 2021
1 parent 99194ce commit 15fbd6a
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/src/python/CMakeLists.txt
Expand Up @@ -295,6 +295,7 @@ ADD_PYTHON_TEST(PyQgsSingleSymbolRenderer test_qgssinglesymbolrenderer.py)
ADD_PYTHON_TEST(PyQgsShapefileProvider test_provider_shapefile.py)
ADD_PYTHON_TEST(PyQgsSvgCache test_qgssvgcache.py)
ADD_PYTHON_TEST(PyQgsSymbolButton test_qgssymbolbutton.py)
ADD_PYTHON_TEST(PyQgsSymbolLayerRegistry test_qgssymbollayerregistry.py)
ADD_PYTHON_TEST(PyQgsTabfileProvider test_provider_tabfile.py)
ADD_PYTHON_TEST(PyQgsTableCell test_qgstablecell.py)
ADD_PYTHON_TEST(PyQgsTabWidget test_qgstabwidget.py)
Expand Down
75 changes: 75 additions & 0 deletions tests/src/python/test_qgssymbollayerregistry.py
@@ -0,0 +1,75 @@
# -*- coding: utf-8 -*-
"""QGIS Unit tests
.. 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__ = 'Denis Rouzaud'
__date__ = '26/11/2021'
__copyright__ = 'Copyright 2015, The QGIS Project'

import qgis # NOQA
from qgis.core import Qgis, QgsApplication, QgsSymbolLayerAbstractMetadata, QgsSymbolLayer, QgsSimpleMarkerSymbolLayer
from qgis.testing import start_app, unittest
from qgis.PyQt import sip


start_app()


class MySuperMarkerMetadata(QgsSymbolLayerAbstractMetadata):
def __init__(self):
super(MySuperMarkerMetadata, self).__init__('MySuperMarker', 'My Super Marker', Qgis.SymbolType.Marker)

def createSymbolLayer(self, map: dict) -> QgsSymbolLayer:
return QgsSimpleMarkerSymbolLayer()


class TestQgsSymbolLayerRegistry(unittest.TestCase):

@classmethod
def setUpClass(cls):
"""
Setup the involved layers and relations for a n:m relation
:return:
"""
cls.registry = QgsApplication.instance().symbolLayerRegistry()

def testCreateInstance(self):
"""Test registry creation"""
self.assertTrue(self.registry)

def testAddRemoveSymbolLayer(self):
"""Test adding/removing layers to the registry"""
n = len(self.registry.symbolLayersForType(Qgis.SymbolType.Marker))
metadata = MySuperMarkerMetadata()
# add layer
self.assertTrue(self.registry.addSymbolLayerType(metadata))
# layer already added
self.assertFalse(self.registry.addSymbolLayerType(metadata))
# check there is one more layer
self.assertEqual(len(self.registry.symbolLayersForType(Qgis.SymbolType.Marker)), n + 1)
# remove layer
self.assertTrue(self.registry.removeSymbolLayerType(metadata))
# check layer has been deleted
self.assertTrue(sip.isdeleted(metadata))
# already removed
self.assertFalse(self.registry.removeSymbolLayerType(MySuperMarkerMetadata()))

def testOwnership(self):
"""
Test that registered layers do not require that a reference to them is kept.
They should be parented to the registry (on transfer) and even if there's no reference
to the registry around (see the `del` below) this childship should continue to exist.
"""
metadata = MySuperMarkerMetadata()
self.assertTrue(self.registry.addSymbolLayerType(metadata))
del metadata
self.assertIn(MySuperMarkerMetadata().name(), self.registry.symbolLayersForType(Qgis.SymbolType.Marker))
self.assertTrue(self.registry.removeSymbolLayerType(MySuperMarkerMetadata()))


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

0 comments on commit 15fbd6a

Please sign in to comment.