Skip to content

Commit e518634

Browse files
committed
Add beginning of unit tests for QgsLayerTreeView
1 parent d98af7a commit e518634

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

tests/src/python/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ ADD_PYTHON_TEST(PyQgsJsonUtils test_qgsjsonutils.py)
7171
ADD_PYTHON_TEST(PyQgsLayerMetadata test_qgslayermetadata.py)
7272
ADD_PYTHON_TEST(PyQgsLayerTreeMapCanvasBridge test_qgslayertreemapcanvasbridge.py)
7373
ADD_PYTHON_TEST(PyQgsLayerTree test_qgslayertree.py)
74+
ADD_PYTHON_TEST(PyQgsLayerTreeView test_qgslayertreeview.py)
7475
ADD_PYTHON_TEST(PyQgsLayout test_qgslayout.py)
7576
ADD_PYTHON_TEST(PyQgsLayoutAlign test_qgslayoutaligner.py)
7677
ADD_PYTHON_TEST(PyQgsLayoutAtlas test_qgslayoutatlas.py)
+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsLayerTreeView.
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__ = '02.04.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+
import os
18+
19+
from qgis.core import (
20+
QgsLayerTreeModel,
21+
QgsProject,
22+
QgsVectorLayer
23+
)
24+
from qgis.gui import (QgsLayerTreeView,
25+
QgsLayerTreeViewDefaultActions)
26+
from qgis.testing import start_app, unittest
27+
from utilities import (unitTestDataPath)
28+
from qgis.PyQt.QtCore import QStringListModel
29+
from qgis.PyQt.QtTest import QSignalSpy
30+
31+
app = start_app()
32+
TEST_DATA_DIR = unitTestDataPath()
33+
34+
35+
class TestQgsLayerTreeView(unittest.TestCase):
36+
37+
def __init__(self, methodName):
38+
"""Run once on class initialization."""
39+
unittest.TestCase.__init__(self, methodName)
40+
41+
# setup a dummy project
42+
self.project = QgsProject()
43+
self.layer = QgsVectorLayer("Point?field=fldtxt:string",
44+
"layer1", "memory")
45+
self.layer2 = QgsVectorLayer("Point?field=fldtxt:string",
46+
"layer2", "memory")
47+
self.layer3 = QgsVectorLayer("Point?field=fldtxt:string",
48+
"layer3", "memory")
49+
self.project.addMapLayers([self.layer, self.layer2, self.layer3])
50+
self.model = QgsLayerTreeModel(self.project.layerTreeRoot())
51+
52+
def testSetModel(self):
53+
view = QgsLayerTreeView()
54+
55+
# should not work
56+
string_list_model = QStringListModel()
57+
view.setModel(string_list_model)
58+
self.assertFalse(view.model())
59+
60+
# should work
61+
view.setModel(self.model)
62+
self.assertEqual(view.model(), self.model)
63+
64+
def testSetCurrentLayer(self):
65+
view = QgsLayerTreeView()
66+
view.setModel(self.model)
67+
current_layer_changed_spy = QSignalSpy(view.currentLayerChanged)
68+
self.assertFalse(view.currentLayer())
69+
view.setCurrentLayer(self.layer3)
70+
self.assertEqual(view.currentLayer(), self.layer3)
71+
self.assertEqual(len(current_layer_changed_spy), 1)
72+
view.setCurrentLayer(self.layer)
73+
self.assertEqual(view.currentLayer(), self.layer)
74+
self.assertEqual(len(current_layer_changed_spy), 2)
75+
view.setCurrentLayer(None)
76+
self.assertFalse(view.currentLayer())
77+
self.assertEqual(len(current_layer_changed_spy), 3)
78+
79+
def testDefaultActions(self):
80+
view = QgsLayerTreeView()
81+
view.setModel(self.model)
82+
actions = QgsLayerTreeViewDefaultActions(view)
83+
84+
# show in overview action
85+
view.setCurrentLayer(self.layer)
86+
self.assertEqual(view.currentNode().customProperty('overview', 0), False)
87+
show_in_overview = actions.actionShowInOverview()
88+
show_in_overview.trigger()
89+
self.assertEqual(view.currentNode().customProperty('overview', 0), True)
90+
show_in_overview.trigger()
91+
self.assertEqual(view.currentNode().customProperty('overview', 0), False)
92+
93+
94+
if __name__ == '__main__':
95+
unittest.main()

0 commit comments

Comments
 (0)