mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
Fix tests
This commit is contained in:
parent
f33aabd90a
commit
baa4c86262
@ -3,6 +3,8 @@ class QgsLayerTree : QgsLayerTreeGroup
|
|||||||
%TypeHeaderCode
|
%TypeHeaderCode
|
||||||
#include <qgslayertree.h>
|
#include <qgslayertree.h>
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
public:
|
||||||
static bool isGroup( QgsLayerTreeNode *node );
|
static bool isGroup( QgsLayerTreeNode *node );
|
||||||
static bool isLayer( const QgsLayerTreeNode *node );
|
static bool isLayer( const QgsLayerTreeNode *node );
|
||||||
|
|
||||||
@ -16,7 +18,7 @@ class QgsLayerTree : QgsLayerTreeGroup
|
|||||||
|
|
||||||
QList<QgsMapLayer *> customLayerOrder() const;
|
QList<QgsMapLayer *> customLayerOrder() const;
|
||||||
void setCustomLayerOrder( const QList<QgsMapLayer *> &customLayerOrder );
|
void setCustomLayerOrder( const QList<QgsMapLayer *> &customLayerOrder );
|
||||||
void setCustomLayerOrder( const QStringList &customLayerOrder );
|
void setCustomLayerOrder( const QStringList &customLayerOrder ) /PyName=setCustomLayerOrderByIds/;
|
||||||
QList<QgsMapLayer *> layerOrder() const;
|
QList<QgsMapLayer *> layerOrder() const;
|
||||||
bool hasCustomLayerOrder() const;
|
bool hasCustomLayerOrder() const;
|
||||||
void setHasCustomLayerOrder( bool hasCustomLayerOrder );
|
void setHasCustomLayerOrder( bool hasCustomLayerOrder );
|
||||||
|
@ -51,6 +51,8 @@ class QgsLayerTreeNode : QObject
|
|||||||
QgsLayerTreeNode* node = qobject_cast<QgsLayerTreeNode*>(sipCpp);
|
QgsLayerTreeNode* node = qobject_cast<QgsLayerTreeNode*>(sipCpp);
|
||||||
if (QgsLayerTree::isLayer(node))
|
if (QgsLayerTree::isLayer(node))
|
||||||
sipType = sipType_QgsLayerTreeLayer;
|
sipType = sipType_QgsLayerTreeLayer;
|
||||||
|
else if (qobject_cast<QgsLayerTree*>(sipCpp))
|
||||||
|
sipType = sipType_QgsLayerTree;
|
||||||
else if (QgsLayerTree::isGroup(node))
|
else if (QgsLayerTree::isGroup(node))
|
||||||
sipType = sipType_QgsLayerTreeGroup;
|
sipType = sipType_QgsLayerTreeGroup;
|
||||||
}
|
}
|
||||||
|
@ -418,46 +418,6 @@ bool QgsComposerLegend::writeXml( QDomElement &elem, QDomDocument &doc ) const
|
|||||||
return _writeXml( composerLegendElem, doc );
|
return _writeXml( composerLegendElem, doc );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _readOldLegendGroup( QDomElement &elem, QgsLayerTreeGroup *parentGroup, QgsProject *project )
|
|
||||||
{
|
|
||||||
QDomElement itemElem = elem.firstChildElement();
|
|
||||||
|
|
||||||
while ( !itemElem.isNull() )
|
|
||||||
{
|
|
||||||
|
|
||||||
if ( itemElem.tagName() == QLatin1String( "LayerItem" ) )
|
|
||||||
{
|
|
||||||
QString layerId = itemElem.attribute( QStringLiteral( "layerId" ) );
|
|
||||||
if ( QgsMapLayer *layer = project->mapLayer( layerId ) )
|
|
||||||
{
|
|
||||||
QgsLayerTreeLayer *nodeLayer = parentGroup->addLayer( layer );
|
|
||||||
QString userText = itemElem.attribute( QStringLiteral( "userText" ) );
|
|
||||||
if ( !userText.isEmpty() )
|
|
||||||
nodeLayer->setCustomProperty( QStringLiteral( "legend/title-label" ), userText );
|
|
||||||
QString style = itemElem.attribute( QStringLiteral( "style" ) );
|
|
||||||
if ( !style.isEmpty() )
|
|
||||||
nodeLayer->setCustomProperty( QStringLiteral( "legend/title-style" ), style );
|
|
||||||
QString showFeatureCount = itemElem.attribute( QStringLiteral( "showFeatureCount" ) );
|
|
||||||
if ( showFeatureCount.toInt() )
|
|
||||||
nodeLayer->setCustomProperty( QStringLiteral( "showFeatureCount" ), 1 );
|
|
||||||
|
|
||||||
// support for individual legend items (user text, order) not implemented yet
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( itemElem.tagName() == QLatin1String( "GroupItem" ) )
|
|
||||||
{
|
|
||||||
QgsLayerTreeGroup *nodeGroup = parentGroup->addGroup( itemElem.attribute( QStringLiteral( "userText" ) ) );
|
|
||||||
QString style = itemElem.attribute( QStringLiteral( "style" ) );
|
|
||||||
if ( !style.isEmpty() )
|
|
||||||
nodeGroup->setCustomProperty( QStringLiteral( "legend/title-style" ), style );
|
|
||||||
|
|
||||||
_readOldLegendGroup( itemElem, nodeGroup, project );
|
|
||||||
}
|
|
||||||
|
|
||||||
itemElem = itemElem.nextSiblingElement();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QgsComposerLegend::readXml( const QDomElement &itemElem, const QDomDocument &doc )
|
bool QgsComposerLegend::readXml( const QDomElement &itemElem, const QDomDocument &doc )
|
||||||
{
|
{
|
||||||
if ( itemElem.isNull() )
|
if ( itemElem.isNull() )
|
||||||
|
@ -58,6 +58,7 @@ class CORE_EXPORT QgsLayerTree : public QgsLayerTreeGroup
|
|||||||
* Cast node to a group. No type checking is done - use isGroup() to find out whether this operation is legal.
|
* Cast node to a group. No type checking is done - use isGroup() to find out whether this operation is legal.
|
||||||
*
|
*
|
||||||
* @note Added in QGIS 2.4
|
* @note Added in QGIS 2.4
|
||||||
|
* @note Not available in python bindings, because cast is automatic.
|
||||||
*/
|
*/
|
||||||
static inline QgsLayerTreeGroup *toGroup( QgsLayerTreeNode *node )
|
static inline QgsLayerTreeGroup *toGroup( QgsLayerTreeNode *node )
|
||||||
{
|
{
|
||||||
@ -68,6 +69,7 @@ class CORE_EXPORT QgsLayerTree : public QgsLayerTreeGroup
|
|||||||
* Cast node to a layer. No type checking is done - use isLayer() to find out whether this operation is legal.
|
* Cast node to a layer. No type checking is done - use isLayer() to find out whether this operation is legal.
|
||||||
*
|
*
|
||||||
* @note Added in QGIS 2.4
|
* @note Added in QGIS 2.4
|
||||||
|
* @note Not available in python bindings, because cast is automatic.
|
||||||
*/
|
*/
|
||||||
static inline QgsLayerTreeLayer *toLayer( QgsLayerTreeNode *node )
|
static inline QgsLayerTreeLayer *toLayer( QgsLayerTreeNode *node )
|
||||||
{
|
{
|
||||||
@ -78,14 +80,21 @@ class CORE_EXPORT QgsLayerTree : public QgsLayerTreeGroup
|
|||||||
* Cast node to a layer. No type checking is done - use isLayer() to find out whether this operation is legal.
|
* Cast node to a layer. No type checking is done - use isLayer() to find out whether this operation is legal.
|
||||||
*
|
*
|
||||||
* @note Added in QGIS 2.4
|
* @note Added in QGIS 2.4
|
||||||
|
* @note Not available in python bindings, because cast is automatic.
|
||||||
*/
|
*/
|
||||||
static inline const QgsLayerTreeLayer *toLayer( const QgsLayerTreeNode *node )
|
static inline const QgsLayerTreeLayer *toLayer( const QgsLayerTreeNode *node )
|
||||||
{
|
{
|
||||||
return static_cast< const QgsLayerTreeLayer *>( node );
|
return static_cast< const QgsLayerTreeLayer *>( node );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Constructor
|
/**
|
||||||
|
* Create a new empty layer tree
|
||||||
|
*/
|
||||||
QgsLayerTree();
|
QgsLayerTree();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy constructor
|
||||||
|
*/
|
||||||
QgsLayerTree( const QgsLayerTree &other );
|
QgsLayerTree( const QgsLayerTree &other );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,6 +64,7 @@ ADD_PYTHON_TEST(PyQgsGraduatedSymbolRenderer test_qgsgraduatedsymbolrenderer.py)
|
|||||||
ADD_PYTHON_TEST(PyQgsInterval test_qgsinterval.py)
|
ADD_PYTHON_TEST(PyQgsInterval test_qgsinterval.py)
|
||||||
ADD_PYTHON_TEST(PyQgsJSONUtils test_qgsjsonutils.py)
|
ADD_PYTHON_TEST(PyQgsJSONUtils test_qgsjsonutils.py)
|
||||||
ADD_PYTHON_TEST(PyQgsLayerTreeMapCanvasBridge test_qgslayertreemapcanvasbridge.py)
|
ADD_PYTHON_TEST(PyQgsLayerTreeMapCanvasBridge test_qgslayertreemapcanvasbridge.py)
|
||||||
|
ADD_PYTHON_TEST(PyQgsLayerTree test_qgslayertree.py)
|
||||||
ADD_PYTHON_TEST(PyQgsLayoutManager test_qgslayoutmanager.py)
|
ADD_PYTHON_TEST(PyQgsLayoutManager test_qgslayoutmanager.py)
|
||||||
ADD_PYTHON_TEST(PyQgsLineSymbolLayers test_qgslinesymbollayers.py)
|
ADD_PYTHON_TEST(PyQgsLineSymbolLayers test_qgslinesymbollayers.py)
|
||||||
ADD_PYTHON_TEST(PyQgsMapCanvas test_qgsmapcanvas.py)
|
ADD_PYTHON_TEST(PyQgsMapCanvas test_qgsmapcanvas.py)
|
||||||
|
83
tests/src/python/test_qgslayertree.py
Normal file
83
tests/src/python/test_qgslayertree.py
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""QGIS Unit tests for QgsLayerTree.
|
||||||
|
|
||||||
|
.. note:: This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
"""
|
||||||
|
__author__ = 'Matthias Kuhn'
|
||||||
|
__date__ = '22.3.2017'
|
||||||
|
__copyright__ = 'Copyright 2017, The QGIS Project'
|
||||||
|
# This will get replaced with a git SHA1 when you do a git archive
|
||||||
|
__revision__ = '$Format:%H$'
|
||||||
|
|
||||||
|
import qgis # NOQA
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from qgis.core import (
|
||||||
|
QgsLayerTree,
|
||||||
|
QgsProject,
|
||||||
|
QgsVectorLayer
|
||||||
|
)
|
||||||
|
from qgis.testing import start_app, unittest
|
||||||
|
from utilities import (unitTestDataPath)
|
||||||
|
from qgis.PyQt.QtTest import QSignalSpy
|
||||||
|
from qgis.PyQt.QtCore import QDir
|
||||||
|
|
||||||
|
app = start_app()
|
||||||
|
TEST_DATA_DIR = unitTestDataPath()
|
||||||
|
|
||||||
|
|
||||||
|
class TestQgsLayerTree(unittest.TestCase):
|
||||||
|
|
||||||
|
def __init__(self, methodName):
|
||||||
|
"""Run once on class initialization."""
|
||||||
|
unittest.TestCase.__init__(self, methodName)
|
||||||
|
|
||||||
|
def testCustomLayerOrder(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.layerTreeRoot().customLayerOrderChanged)
|
||||||
|
prj.layerTreeRoot().setCustomLayerOrder([layer2, layer])
|
||||||
|
self.assertEqual(len(layer_order_changed_spy), 1)
|
||||||
|
prj.layerTreeRoot().setCustomLayerOrder([layer2, layer])
|
||||||
|
self.assertEqual(len(layer_order_changed_spy), 1) # no signal, order not changed
|
||||||
|
|
||||||
|
self.assertEqual(prj.layerTreeRoot().customLayerOrder(), [layer2, layer])
|
||||||
|
prj.layerTreeRoot().setCustomLayerOrder([layer])
|
||||||
|
self.assertEqual(prj.layerTreeRoot().customLayerOrder(), [layer])
|
||||||
|
self.assertEqual(len(layer_order_changed_spy), 2)
|
||||||
|
|
||||||
|
# remove a layer
|
||||||
|
prj.layerTreeRoot().setCustomLayerOrder([layer2, layer, layer3])
|
||||||
|
self.assertEqual(len(layer_order_changed_spy), 3)
|
||||||
|
prj.removeMapLayer(layer)
|
||||||
|
self.assertEqual(prj.layerTreeRoot().customLayerOrder(), [layer2, layer3])
|
||||||
|
self.assertEqual(len(layer_order_changed_spy), 4)
|
||||||
|
|
||||||
|
# save and restore
|
||||||
|
file_name = os.path.join(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.layerTreeRoot().customLayerOrder()], [layer2.id(), layer3.id()])
|
||||||
|
|
||||||
|
# clear project
|
||||||
|
prj.clear()
|
||||||
|
self.assertEqual(prj.layerTreeRoot().customLayerOrder(), [])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
@ -54,32 +54,34 @@ class TestQgsLayerTreeMapCanvasBridge(unittest.TestCase):
|
|||||||
bridge = QgsLayerTreeMapCanvasBridge(prj.layerTreeRoot(), canvas)
|
bridge = QgsLayerTreeMapCanvasBridge(prj.layerTreeRoot(), canvas)
|
||||||
|
|
||||||
#custom layer order
|
#custom layer order
|
||||||
bridge.setHasCustomLayerOrder(True)
|
prj.layerTreeRoot().setHasCustomLayerOrder(True)
|
||||||
bridge.setCustomLayerOrder([layer3.id(), layer.id(), layer2.id()])
|
prj.layerTreeRoot().setCustomLayerOrder([layer3, layer, layer2])
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer3.id(), layer.id(), layer2.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().customLayerOrder()], [layer3, layer, layer2])
|
||||||
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer3, layer, layer2])
|
||||||
|
|
||||||
# no custom layer order
|
# no custom layer order
|
||||||
bridge.setHasCustomLayerOrder(False)
|
prj.layerTreeRoot().setHasCustomLayerOrder(False)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer.id(), layer2.id(), layer3.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().customLayerOrder()], [layer3, layer, layer2])
|
||||||
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer, layer2, layer3])
|
||||||
|
|
||||||
# mess around with the layer tree order
|
# mess around with the layer tree order
|
||||||
root = prj.layerTreeRoot()
|
root = prj.layerTreeRoot()
|
||||||
layer_node = root.findLayer(layer2.id())
|
layer_node = root.findLayer(layer2)
|
||||||
cloned_node = layer_node.clone()
|
cloned_node = layer_node.clone()
|
||||||
parent = layer_node.parent()
|
parent = layer_node.parent()
|
||||||
parent.insertChildNode(0, cloned_node)
|
parent.insertChildNode(0, cloned_node)
|
||||||
parent.removeChildNode(layer_node)
|
parent.removeChildNode(layer_node)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
# make sure project respects this
|
# make sure project respects this
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer2.id(), layer.id(), layer3.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer2, layer, layer3])
|
||||||
|
|
||||||
# make sure project order includes ALL layers, not just visible ones
|
# make sure project order includes ALL layers, not just visible ones
|
||||||
layer_node = root.findLayer(layer.id())
|
layer_node = root.findLayer(layer)
|
||||||
layer_node.setItemVisibilityChecked(False)
|
layer_node.setItemVisibilityChecked(False)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer2.id(), layer.id(), layer3.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer2, layer, layer3])
|
||||||
|
|
||||||
def testCustomLayerOrderUpdatedFromProject(self):
|
def testCustomLayerOrderUpdatedFromProject(self):
|
||||||
""" test that setting project layer order is reflected in custom layer order panel """
|
""" test that setting project layer order is reflected in custom layer order panel """
|
||||||
@ -99,37 +101,35 @@ class TestQgsLayerTreeMapCanvasBridge(unittest.TestCase):
|
|||||||
custom_order_widget = QgsCustomLayerOrderWidget(bridge)
|
custom_order_widget = QgsCustomLayerOrderWidget(bridge)
|
||||||
|
|
||||||
#custom layer order
|
#custom layer order
|
||||||
bridge.setHasCustomLayerOrder(True)
|
prj.layerTreeRoot().setHasCustomLayerOrder(True)
|
||||||
bridge.setCustomLayerOrder([layer3.id(), layer.id(), layer2.id()])
|
prj.layerTreeRoot().setCustomLayerOrder([layer3, layer, layer2])
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer3.id(), layer.id(), layer2.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().customLayerOrder()], [layer3, layer, layer2])
|
||||||
|
|
||||||
# no custom layer order
|
# no custom layer order
|
||||||
bridge.setHasCustomLayerOrder(False)
|
prj.layerTreeRoot().setHasCustomLayerOrder(False)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer.id(), layer2.id(), layer3.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer, layer2, layer3])
|
||||||
|
|
||||||
# mess around with the project layer order
|
# mess around with the project layer order
|
||||||
prj.setLayerOrder([layer3, layer, layer2])
|
prj.layerTreeRoot().setCustomLayerOrder([layer3, layer, layer2])
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
# make sure bridge respects this new order
|
self.assertEqual(prj.layerTreeRoot().layerOrder(), [layer, layer2, layer3])
|
||||||
self.assertTrue(bridge.hasCustomLayerOrder())
|
|
||||||
self.assertEqual(bridge.customLayerOrder(), [layer3.id(), layer.id(), layer2.id()])
|
|
||||||
|
|
||||||
# try reordering through bridge
|
# try reordering through bridge
|
||||||
bridge.setHasCustomLayerOrder(False)
|
prj.layerTreeRoot().setHasCustomLayerOrder(False)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer.id(), layer2.id(), layer3.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer, layer2, layer3])
|
||||||
root = prj.layerTreeRoot()
|
root = prj.layerTreeRoot()
|
||||||
layer_node = root.findLayer(layer2.id())
|
layer_node = root.findLayer(layer2)
|
||||||
cloned_node = layer_node.clone()
|
cloned_node = layer_node.clone()
|
||||||
parent = layer_node.parent()
|
parent = layer_node.parent()
|
||||||
parent.insertChildNode(0, cloned_node)
|
parent.insertChildNode(0, cloned_node)
|
||||||
parent.removeChildNode(layer_node)
|
parent.removeChildNode(layer_node)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
# make sure project respects this
|
# make sure project respects this
|
||||||
self.assertEqual([l.id() for l in prj.layerOrder()], [layer2.id(), layer.id(), layer3.id()])
|
self.assertEqual([l for l in prj.layerTreeRoot().layerOrder()], [layer2, layer, layer3])
|
||||||
self.assertFalse(bridge.hasCustomLayerOrder())
|
self.assertFalse(prj.layerTreeRoot().hasCustomLayerOrder())
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -111,10 +111,11 @@ class TestQgsMapThemeCollection(unittest.TestCase):
|
|||||||
"layer3", "memory")
|
"layer3", "memory")
|
||||||
prj.addMapLayers([layer, layer2, layer3])
|
prj.addMapLayers([layer, layer2, layer3])
|
||||||
|
|
||||||
prj.setLayerOrder([layer2, layer])
|
prj.layerTreeRoot().setHasCustomLayerOrder(True)
|
||||||
|
prj.layerTreeRoot().setCustomLayerOrder([layer2, layer])
|
||||||
self.assertEqual(prj.mapThemeCollection().masterLayerOrder(), [layer2, layer])
|
self.assertEqual(prj.mapThemeCollection().masterLayerOrder(), [layer2, layer])
|
||||||
|
|
||||||
prj.setLayerOrder([layer, layer2, layer3])
|
prj.layerTreeRoot().setCustomLayerOrder([layer, layer2, layer3])
|
||||||
# make some themes...
|
# make some themes...
|
||||||
theme1 = QgsMapThemeCollection.MapThemeRecord()
|
theme1 = QgsMapThemeCollection.MapThemeRecord()
|
||||||
theme1.setLayerRecords([QgsMapThemeCollection.MapThemeLayerRecord(layer3),
|
theme1.setLayerRecords([QgsMapThemeCollection.MapThemeLayerRecord(layer3),
|
||||||
@ -144,7 +145,7 @@ class TestQgsMapThemeCollection(unittest.TestCase):
|
|||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayerIds('theme3'), [layer.id(), layer2.id()])
|
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayerIds('theme3'), [layer.id(), layer2.id()])
|
||||||
|
|
||||||
# reset master order
|
# reset master order
|
||||||
prj.setLayerOrder([layer2, layer3, layer])
|
prj.layerTreeRoot().setCustomLayerOrder([layer2, layer3, layer])
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme1'), [layer3, layer])
|
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme1'), [layer3, layer])
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme2'), [layer2, layer3, layer])
|
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme2'), [layer2, layer3, layer])
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme3'), [layer2, layer])
|
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme3'), [layer2, layer])
|
||||||
@ -159,6 +160,7 @@ class TestQgsMapThemeCollection(unittest.TestCase):
|
|||||||
layer_node = root.findLayer(layer2.id())
|
layer_node = root.findLayer(layer2.id())
|
||||||
layer_node.setItemVisibilityChecked(False)
|
layer_node.setItemVisibilityChecked(False)
|
||||||
app.processEvents()
|
app.processEvents()
|
||||||
|
prj.layerTreeRoot().setHasCustomLayerOrder(False)
|
||||||
self.assertEqual(prj.mapThemeCollection().masterLayerOrder(), [layer, layer2, layer3])
|
self.assertEqual(prj.mapThemeCollection().masterLayerOrder(), [layer, layer2, layer3])
|
||||||
|
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme1'), [layer, layer3])
|
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme1'), [layer, layer3])
|
||||||
@ -169,12 +171,6 @@ class TestQgsMapThemeCollection(unittest.TestCase):
|
|||||||
[layer.id(), layer2.id(), layer3.id()])
|
[layer.id(), layer2.id(), layer3.id()])
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayerIds('theme3'), [layer.id(), layer2.id()])
|
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayerIds('theme3'), [layer.id(), layer2.id()])
|
||||||
|
|
||||||
# no layer order - should use stored order as a last resort
|
|
||||||
prj.setLayerOrder([])
|
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme1'), [layer3, layer])
|
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme2'), [layer3, layer2, layer])
|
|
||||||
self.assertEqual(prj.mapThemeCollection().mapThemeVisibleLayers('theme3'), [layer2, layer])
|
|
||||||
|
|
||||||
def testMasterVisibleLayers(self):
|
def testMasterVisibleLayers(self):
|
||||||
""" test master visible layers"""
|
""" test master visible layers"""
|
||||||
prj = QgsProject.instance()
|
prj = QgsProject.instance()
|
||||||
@ -188,9 +184,10 @@ class TestQgsMapThemeCollection(unittest.TestCase):
|
|||||||
prj.addMapLayers([layer, layer2, layer3])
|
prj.addMapLayers([layer, layer2, layer3])
|
||||||
|
|
||||||
# general setup...
|
# general setup...
|
||||||
prj.setLayerOrder([layer2, layer])
|
prj.layerTreeRoot().setHasCustomLayerOrder(True)
|
||||||
|
prj.layerTreeRoot().setCustomLayerOrder([layer2, layer])
|
||||||
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer2, layer])
|
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer2, layer])
|
||||||
prj.setLayerOrder([layer3, layer, layer2])
|
prj.layerTreeRoot().setCustomLayerOrder([layer3, layer, layer2])
|
||||||
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer3, layer, layer2])
|
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer3, layer, layer2])
|
||||||
|
|
||||||
#hide some layers
|
#hide some layers
|
||||||
@ -201,11 +198,11 @@ class TestQgsMapThemeCollection(unittest.TestCase):
|
|||||||
layer_node.setItemVisibilityChecked(True)
|
layer_node.setItemVisibilityChecked(True)
|
||||||
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer3, layer, layer2])
|
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer3, layer, layer2])
|
||||||
layer_node.setItemVisibilityChecked(False)
|
layer_node.setItemVisibilityChecked(False)
|
||||||
prj.setLayerOrder([layer, layer2, layer3])
|
prj.layerTreeRoot().setCustomLayerOrder([layer, layer2, layer3])
|
||||||
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer, layer3])
|
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer, layer3])
|
||||||
|
|
||||||
# test with no project layer order set, should respect tree order
|
# test with no project layer order set, should respect tree order
|
||||||
prj.setLayerOrder([])
|
prj.layerTreeRoot().setCustomLayerOrder([])
|
||||||
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer, layer3])
|
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer, layer3])
|
||||||
layer_node.setItemVisibilityChecked(True)
|
layer_node.setItemVisibilityChecked(True)
|
||||||
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer, layer2, layer3])
|
self.assertEqual(prj.mapThemeCollection().masterVisibleLayers(), [layer, layer2, layer3])
|
||||||
|
@ -27,8 +27,6 @@ from qgis.gui import (QgsLayerTreeMapCanvasBridge,
|
|||||||
QgsMapCanvas)
|
QgsMapCanvas)
|
||||||
from qgis.testing import start_app, unittest
|
from qgis.testing import start_app, unittest
|
||||||
from utilities import (unitTestDataPath)
|
from utilities import (unitTestDataPath)
|
||||||
from qgis.PyQt.QtCore import QDir
|
|
||||||
from qgis.PyQt.QtTest import QSignalSpy
|
|
||||||
|
|
||||||
app = start_app()
|
app = start_app()
|
||||||
TEST_DATA_DIR = unitTestDataPath()
|
TEST_DATA_DIR = unitTestDataPath()
|
||||||
@ -183,48 +181,6 @@ class TestQgsProject(unittest.TestCase):
|
|||||||
expected = ['polys', 'lines']
|
expected = ['polys', 'lines']
|
||||||
self.assertEqual(sorted(layers_names), sorted(expected))
|
self.assertEqual(sorted(layers_names), sorted(expected))
|
||||||
|
|
||||||
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(), [])
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user