Skip to content

Commit de10f66

Browse files
committed
Add unit tests for QgsMapRendererCache
Also flip to new style connects
1 parent d74fbff commit de10f66

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed

tests/src/python/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ ADD_PYTHON_TEST(PyQgsJSONUtils test_qgsjsonutils.py)
6565
ADD_PYTHON_TEST(PyQgsLineSymbolLayers test_qgslinesymbollayers.py)
6666
ADD_PYTHON_TEST(PyQgsMapCanvasAnnotationItem test_qgsmapcanvasannotationitem.py)
6767
ADD_PYTHON_TEST(PyQgsMapLayerModel test_qgsmaplayermodel.py)
68+
ADD_PYTHON_TEST(PyQgsMapRendererCache test_qgsmaprenderercache.py)
6869
ADD_PYTHON_TEST(PyQgsMapUnitScale test_qgsmapunitscale.py)
6970
ADD_PYTHON_TEST(PyQgsMargins test_qgsmargins.py)
7071
ADD_PYTHON_TEST(PyQgsMemoryProvider test_provider_memory.py)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsMapRendererCache.
3+
4+
.. note:: This program is free software; you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation; either version 2 of the License, or
7+
(at your option) any later version.
8+
"""
9+
__author__ = 'Nyall Dawson'
10+
__date__ = '1/02/2017'
11+
__copyright__ = 'Copyright 2017, The QGIS Project'
12+
# This will get replaced with a git SHA1 when you do a git archive
13+
__revision__ = '$Format:%H$'
14+
15+
import qgis # NOQA
16+
17+
from qgis.core import (QgsMapRendererCache,
18+
QgsRectangle,
19+
QgsVectorLayer,
20+
QgsProject)
21+
from qgis.testing import start_app, unittest
22+
from qgis.PyQt.QtGui import QImage
23+
start_app()
24+
25+
26+
class TestQgsMapRendererCache(unittest.TestCase):
27+
28+
def testSetCacheImages(self):
29+
cache = QgsMapRendererCache()
30+
# not set image
31+
im = cache.cacheImage('littlehands')
32+
self.assertTrue(im.isNull())
33+
34+
# set image
35+
im = QImage(200, 200, QImage.Format_RGB32)
36+
cache.setCacheImage('littlehands', im)
37+
self.assertFalse(im.isNull())
38+
self.assertEqual(cache.cacheImage('littlehands'), im)
39+
40+
# test another not set image when cache has images
41+
self.assertTrue(cache.cacheImage('bad').isNull())
42+
43+
# clear cache image
44+
cache.clearCacheImage('not in cache') # no crash!
45+
cache.clearCacheImage('littlehands')
46+
im = cache.cacheImage('littlehands')
47+
self.assertTrue(im.isNull())
48+
49+
# clear whole cache
50+
im = QImage(200, 200, QImage.Format_RGB32)
51+
cache.setCacheImage('littlehands', im)
52+
self.assertFalse(im.isNull())
53+
cache.clear()
54+
im = cache.cacheImage('littlehands')
55+
self.assertTrue(im.isNull())
56+
57+
def testInit(self):
58+
cache = QgsMapRendererCache()
59+
extent = QgsRectangle(1, 2, 3, 4)
60+
cache.init(extent, 1000)
61+
62+
# add a cache image
63+
im = QImage(200, 200, QImage.Format_RGB32)
64+
cache.setCacheImage('layer', im)
65+
self.assertFalse(cache.cacheImage('layer').isNull())
66+
67+
# re init, without changing extent or scale
68+
cache.init(extent, 1000)
69+
70+
# image should still be in cache
71+
self.assertFalse(cache.cacheImage('layer').isNull())
72+
73+
# reinit with different scale
74+
cache.init(extent, 2000)
75+
# cache should be cleared
76+
self.assertTrue(cache.cacheImage('layer').isNull())
77+
78+
# readd image to cache
79+
cache.setCacheImage('layer', im)
80+
self.assertFalse(cache.cacheImage('layer').isNull())
81+
82+
# change extent
83+
cache.init(QgsRectangle(11, 12, 13, 14), 2000)
84+
# cache should be cleared
85+
self.assertTrue(cache.cacheImage('layer').isNull())
86+
87+
def testRequestRepaint(self):
88+
layer = QgsVectorLayer("Point?field=fldtxt:string",
89+
"layer", "memory")
90+
QgsProject.instance().addMapLayers([layer])
91+
self.assertTrue(layer.isValid())
92+
93+
# add image to cache
94+
cache = QgsMapRendererCache()
95+
im = QImage(200, 200, QImage.Format_RGB32)
96+
cache.setCacheImage(layer.id(), im)
97+
self.assertFalse(cache.cacheImage(layer.id()).isNull())
98+
99+
# trigger repaint on layer
100+
layer.triggerRepaint()
101+
# cache image should be cleared
102+
self.assertTrue(cache.cacheImage(layer.id()).isNull())
103+
104+
105+
if __name__ == '__main__':
106+
unittest.main()

0 commit comments

Comments
 (0)