Skip to content

Commit 16b58b9

Browse files
committedAug 22, 2018
Unit tests for QgsMapLayerProxyModel
1 parent 51a63b9 commit 16b58b9

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed
 

‎tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ ADD_PYTHON_TEST(PyQgsMapCanvasAnnotationItem test_qgsmapcanvasannotationitem.py)
108108
ADD_PYTHON_TEST(PyQgsMapLayer test_qgsmaplayer.py)
109109
ADD_PYTHON_TEST(PyQgsMapLayerAction test_qgsmaplayeraction.py)
110110
ADD_PYTHON_TEST(PyQgsMapLayerModel test_qgsmaplayermodel.py)
111+
ADD_PYTHON_TEST(PyQgsMapLayerProxyModel test_qgsmaplayerproxymodel.py)
111112
ADD_PYTHON_TEST(PyQgsMapLayerStore test_qgsmaplayerstore.py)
112113
ADD_PYTHON_TEST(PyQgsMapRenderer test_qgsmaprenderer.py)
113114
ADD_PYTHON_TEST(PyQgsMapRendererCache test_qgsmaprenderercache.py)
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsMapLayerProxyModel
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__ = '22/08/2018'
11+
__copyright__ = 'Copyright 2018, 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 QgsVectorLayer, QgsProject, QgsMapLayerModel, QgsMapLayerProxyModel
18+
from qgis.PyQt.QtCore import Qt, QModelIndex
19+
20+
from qgis.testing import start_app, unittest
21+
22+
start_app()
23+
24+
25+
def create_layer(name):
26+
layer = QgsVectorLayer("Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
27+
name, "memory")
28+
return layer
29+
30+
31+
class TestQgsMapLayerProxyModel(unittest.TestCase):
32+
33+
def testGettersSetters(self):
34+
""" test model getters/setters """
35+
m = QgsMapLayerProxyModel()
36+
l1 = create_layer('l1')
37+
QgsProject.instance().addMapLayer(l1)
38+
l2 = create_layer('l2')
39+
QgsProject.instance().addMapLayer(l2)
40+
41+
m.setFilters(QgsMapLayerProxyModel.LineLayer | QgsMapLayerProxyModel.WritableLayer)
42+
self.assertEqual(m.filters(), QgsMapLayerProxyModel.LineLayer | QgsMapLayerProxyModel.WritableLayer)
43+
44+
m.setExceptedLayerIds([l2.id()])
45+
self.assertEqual(m.exceptedLayerIds(), [l2.id()])
46+
47+
m.setExceptedLayerList([l2])
48+
self.assertEqual(m.exceptedLayerList(), [l2])
49+
50+
m.setExcludedProviders(['a', 'b'])
51+
self.assertEqual(m.excludedProviders(), ['a', 'b'])
52+
53+
m.setFilterString('c')
54+
self.assertEqual(m.filterString(), 'c')
55+
56+
def testFilterGeometryType(self):
57+
""" test filtering by geometry type """
58+
QgsProject.instance().clear()
59+
m = QgsMapLayerProxyModel()
60+
l1 = QgsVectorLayer("Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
61+
'layer 1', "memory")
62+
QgsProject.instance().addMapLayer(l1)
63+
l2 = QgsVectorLayer("Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
64+
'layer 2', "memory")
65+
QgsProject.instance().addMapLayer(l2)
66+
l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer",
67+
'layer 3', "memory")
68+
QgsProject.instance().addMapLayer(l3)
69+
l4 = QgsVectorLayer("LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
70+
'layer 4', "memory")
71+
QgsProject.instance().addMapLayer(l4)
72+
73+
m.setFilters(QgsMapLayerProxyModel.PolygonLayer)
74+
self.assertEqual(m.rowCount(), 1)
75+
self.assertEqual(m.data(m.index(0, 0)), 'layer 2')
76+
77+
m.setFilters(QgsMapLayerProxyModel.PointLayer)
78+
self.assertEqual(m.rowCount(), 1)
79+
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
80+
81+
m.setFilters(QgsMapLayerProxyModel.LineLayer)
82+
self.assertEqual(m.rowCount(), 1)
83+
self.assertEqual(m.data(m.index(0, 0)), 'layer 4')
84+
85+
m.setFilters(QgsMapLayerProxyModel.NoGeometry)
86+
self.assertEqual(m.rowCount(), 1)
87+
self.assertEqual(m.data(m.index(0, 0)), 'layer 3')
88+
89+
m.setFilters(QgsMapLayerProxyModel.HasGeometry)
90+
self.assertEqual(m.rowCount(), 3)
91+
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
92+
self.assertEqual(m.data(m.index(1, 0)), 'layer 2')
93+
self.assertEqual(m.data(m.index(2, 0)), 'layer 4')
94+
95+
m.setFilters(QgsMapLayerProxyModel.VectorLayer)
96+
self.assertEqual(m.rowCount(), 4)
97+
self.assertEqual(m.data(m.index(0, 0)), 'layer 1')
98+
self.assertEqual(m.data(m.index(1, 0)), 'layer 2')
99+
self.assertEqual(m.data(m.index(2, 0)), 'layer 3')
100+
self.assertEqual(m.data(m.index(3, 0)), 'layer 4')
101+
102+
m.setFilters(QgsMapLayerProxyModel.PluginLayer)
103+
self.assertEqual(m.rowCount(), 0)
104+
105+
m.setFilters(QgsMapLayerProxyModel.RasterLayer)
106+
self.assertEqual(m.rowCount(), 0)
107+
108+
def testFilterString(self):
109+
""" test filtering by string"""
110+
QgsProject.instance().clear()
111+
m = QgsMapLayerProxyModel()
112+
l1 = QgsVectorLayer("Point?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
113+
'layer 1', "memory")
114+
QgsProject.instance().addMapLayer(l1)
115+
l2 = QgsVectorLayer("Polygon?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
116+
'lAyEr 2', "memory")
117+
QgsProject.instance().addMapLayer(l2)
118+
l3 = QgsVectorLayer("None?field=fldtxt:string&field=fldint:integer",
119+
'another', "memory")
120+
QgsProject.instance().addMapLayer(l3)
121+
l4 = QgsVectorLayer("LineString?crs=EPSG:3111&field=fldtxt:string&field=fldint:integer",
122+
'final layer', "memory")
123+
QgsProject.instance().addMapLayer(l4)
124+
125+
m.setFilterString('layer')
126+
self.assertEqual(m.rowCount(), 3)
127+
self.assertEqual(m.data(m.index(0, 0)), 'final layer')
128+
self.assertEqual(m.data(m.index(1, 0)), 'layer 1')
129+
self.assertEqual(m.data(m.index(2, 0)), 'lAyEr 2')
130+
131+
m.setFilterString('')
132+
self.assertEqual(m.rowCount(), 4)
133+
134+
135+
if __name__ == '__main__':
136+
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.