Exemple #1
0
    def testLayerOrder(self):
        """ test project layer order"""
        prj = QgsProject()
        layer = QgsVectorLayer("Point?field=fldtxt:string", "layer1", "memory")
        layer2 = QgsVectorLayer("Point?field=fldtxt:string", "layer2",
                                "memory")
        layer3 = QgsVectorLayer("Point?field=fldtxt:string", "layer3",
                                "memory")
        prj.addMapLayers([layer, layer2, layer3])

        layer_order_changed_spy = QSignalSpy(prj.layerOrderChanged)
        prj.setLayerOrder([layer2, layer])
        self.assertEqual(len(layer_order_changed_spy), 1)
        prj.setLayerOrder([layer2, layer])
        self.assertEqual(len(layer_order_changed_spy),
                         1)  # no signal, order not changed

        self.assertEqual(prj.layerOrder(), [layer2, layer])
        prj.setLayerOrder([layer])
        self.assertEqual(prj.layerOrder(), [layer])
        self.assertEqual(len(layer_order_changed_spy), 2)

        # remove a layer
        prj.setLayerOrder([layer2, layer, layer3])
        self.assertEqual(len(layer_order_changed_spy), 3)
        prj.removeMapLayer(layer)
        self.assertEqual(prj.layerOrder(), [layer2, layer3])
        self.assertEqual(len(layer_order_changed_spy),
                         3)  # should be no signal

        # save and restore
        file_name = os.path.join(str(QDir.tempPath()), 'proj.qgs')
        prj.setFileName(file_name)
        prj.write()
        prj2 = QgsProject()
        prj2.setFileName(file_name)
        prj2.read()
        self.assertEqual([l.id() for l in prj2.layerOrder()],
                         [layer2.id(), layer3.id()])

        # clear project
        prj.clear()
        self.assertEqual(prj.layerOrder(), [])