@@ -37,10 +37,55 @@ def __init__(self, methodName):
37
37
"""Run once on class initialization."""
38
38
unittest .TestCase .__init__ (self , methodName )
39
39
40
+ def testLayerOrderUpdatedThroughBridge (self ):
41
+ """ test that project layer order is updated when layer tree changes """
42
+
43
+ prj = QgsProject .instance ()
44
+ prj .clear ()
45
+ layer = QgsVectorLayer ("Point?field=fldtxt:string" ,
46
+ "layer1" , "memory" )
47
+ layer2 = QgsVectorLayer ("Point?field=fldtxt:string" ,
48
+ "layer2" , "memory" )
49
+ layer3 = QgsVectorLayer ("Point?field=fldtxt:string" ,
50
+ "layer3" , "memory" )
51
+ prj .addMapLayers ([layer , layer2 , layer3 ])
52
+
53
+ canvas = QgsMapCanvas ()
54
+ bridge = QgsLayerTreeMapCanvasBridge (prj .layerTreeRoot (), canvas )
55
+
56
+ #custom layer order
57
+ bridge .setHasCustomLayerOrder (True )
58
+ bridge .setCustomLayerOrder ([layer3 .id (), layer .id (), layer2 .id ()])
59
+ app .processEvents ()
60
+ self .assertEqual ([l .id () for l in prj .layerOrder ()], [layer3 .id (), layer .id (), layer2 .id ()])
61
+
62
+ # no custom layer order
63
+ bridge .setHasCustomLayerOrder (False )
64
+ app .processEvents ()
65
+ self .assertEqual ([l .id () for l in prj .layerOrder ()], [layer .id (), layer2 .id (), layer3 .id ()])
66
+
67
+ # mess around with the layer tree order
68
+ root = prj .layerTreeRoot ()
69
+ layer_node = root .findLayer (layer2 .id ())
70
+ cloned_node = layer_node .clone ()
71
+ parent = layer_node .parent ()
72
+ parent .insertChildNode (0 , cloned_node )
73
+ parent .removeChildNode (layer_node )
74
+ app .processEvents ()
75
+ # make sure project respects this
76
+ self .assertEqual ([l .id () for l in prj .layerOrder ()], [layer2 .id (), layer .id (), layer3 .id ()])
77
+
78
+ # make sure project order includes ALL layers, not just visible ones
79
+ layer_node = root .findLayer (layer .id ())
80
+ layer_node .setItemVisibilityChecked (False )
81
+ app .processEvents ()
82
+ self .assertEqual ([l .id () for l in prj .layerOrder ()], [layer2 .id (), layer .id (), layer3 .id ()])
83
+
40
84
def testCustomLayerOrderUpdatedFromProject (self ):
41
85
""" test that setting project layer order is reflected in custom layer order panel """
42
86
43
87
prj = QgsProject .instance ()
88
+ prj .clear ()
44
89
layer = QgsVectorLayer ("Point?field=fldtxt:string" ,
45
90
"layer1" , "memory" )
46
91
layer2 = QgsVectorLayer ("Point?field=fldtxt:string" ,
0 commit comments