19
19
from qgis .core import (
20
20
QgsLayerTreeModel ,
21
21
QgsProject ,
22
- QgsVectorLayer
22
+ QgsVectorLayer ,
23
+ QgsLayerTreeLayer ,
24
+ QgsLayerTree ,
25
+ )
26
+ from qgis .gui import (
27
+ QgsLayerTreeView ,
28
+ QgsLayerTreeViewDefaultActions ,
23
29
)
24
- from qgis .gui import (QgsLayerTreeView ,
25
- QgsLayerTreeViewDefaultActions )
26
30
from qgis .testing import start_app , unittest
27
31
from utilities import (unitTestDataPath )
28
32
from qgis .PyQt .QtCore import QStringListModel
@@ -46,9 +50,26 @@ def __init__(self, methodName):
46
50
"layer2" , "memory" )
47
51
self .layer3 = QgsVectorLayer ("Point?field=fldtxt:string" ,
48
52
"layer3" , "memory" )
53
+ self .layer4 = QgsVectorLayer ("Point?field=fldtxt:string" ,
54
+ "layer4" , "memory" )
55
+ self .layer5 = QgsVectorLayer ("Point?field=fldtxt:string" ,
56
+ "layer5" , "memory" )
49
57
self .project .addMapLayers ([self .layer , self .layer2 , self .layer3 ])
50
58
self .model = QgsLayerTreeModel (self .project .layerTreeRoot ())
51
59
60
+ def nodeOrder (self , group ):
61
+ nodeorder = []
62
+ layerTree = QgsLayerTree ()
63
+ for node in group :
64
+ if QgsLayerTree .isGroup (node ):
65
+ groupname = node .name ()
66
+ nodeorder .append (groupname )
67
+ for child in self .nodeOrder (node .children ()):
68
+ nodeorder .append (groupname + '-' + child )
69
+ elif QgsLayerTree .isLayer (node ):
70
+ nodeorder .append (node .layer ().name ())
71
+ return nodeorder
72
+
52
73
def testSetModel (self ):
53
74
view = QgsLayerTreeView ()
54
75
@@ -90,8 +111,8 @@ def testDefaultActions(self):
90
111
show_in_overview .trigger ()
91
112
self .assertEqual (view .currentNode ().customProperty ('overview' , 0 ), False )
92
113
93
- def testMoveToTopAction (self ):
94
- """Test move to top action"""
114
+ def testMoveToTopActionLayer (self ):
115
+ """Test move to top action on layer """
95
116
view = QgsLayerTreeView ()
96
117
view .setModel (self .model )
97
118
actions = QgsLayerTreeViewDefaultActions (view )
@@ -101,6 +122,67 @@ def testMoveToTopAction(self):
101
122
movetotop .trigger ()
102
123
self .assertEqual (self .project .layerTreeRoot ().layerOrder (), [self .layer3 , self .layer , self .layer2 ])
103
124
125
+ def testMoveToTopActionGroup (self ):
126
+ """Test move to top action on group"""
127
+ view = QgsLayerTreeView ()
128
+ group = self .project .layerTreeRoot ().addGroup ("embeddedgroup" )
129
+ group .addLayer (self .layer4 )
130
+ group .addLayer (self .layer5 )
131
+ groupname = group .name ()
132
+ view .setModel (self .model )
133
+ actions = QgsLayerTreeViewDefaultActions (view )
134
+ self .assertEqual (self .nodeOrder (self .project .layerTreeRoot ().children ()), [
135
+ self .layer .name (),
136
+ self .layer2 .name (),
137
+ self .layer3 .name (),
138
+ groupname ,
139
+ groupname + '-' + self .layer4 .name (),
140
+ groupname + '-' + self .layer5 .name (),
141
+ ])
142
+
143
+ nodeLayerIndex = self .model .node2index (group )
144
+ view .setCurrentIndex (nodeLayerIndex )
145
+ movetotop = actions .actionMoveToTop ()
146
+ movetotop .trigger ()
147
+ self .assertEqual (self .nodeOrder (self .project .layerTreeRoot ().children ()), [
148
+ groupname ,
149
+ groupname + '-' + self .layer4 .name (),
150
+ groupname + '-' + self .layer5 .name (),
151
+ self .layer .name (),
152
+ self .layer2 .name (),
153
+ self .layer3 .name (),
154
+ ])
155
+
156
+ def testMoveToTopActionEmbeddedGroup (self ):
157
+ """Test move to top action on embeddedgroup layer"""
158
+ view = QgsLayerTreeView ()
159
+ group = self .project .layerTreeRoot ().addGroup ("embeddedgroup" )
160
+ group .addLayer (self .layer4 )
161
+ group .addLayer (self .layer5 )
162
+ groupname = group .name ()
163
+ view .setModel (self .model )
164
+ actions = QgsLayerTreeViewDefaultActions (view )
165
+ self .assertEqual (self .nodeOrder (self .project .layerTreeRoot ().children ()), [
166
+ self .layer .name (),
167
+ self .layer2 .name (),
168
+ self .layer3 .name (),
169
+ groupname ,
170
+ groupname + '-' + self .layer4 .name (),
171
+ groupname + '-' + self .layer5 .name (),
172
+ ])
173
+
174
+ view .setCurrentLayer (self .layer5 )
175
+ movetotop = actions .actionMoveToTop ()
176
+ movetotop .trigger ()
177
+ self .assertEqual (self .nodeOrder (self .project .layerTreeRoot ().children ()), [
178
+ self .layer .name (),
179
+ self .layer2 .name (),
180
+ self .layer3 .name (),
181
+ groupname ,
182
+ groupname + '-' + self .layer5 .name (),
183
+ groupname + '-' + self .layer4 .name (),
184
+ ])
185
+
104
186
105
187
if __name__ == '__main__' :
106
188
unittest .main ()
0 commit comments