mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-11 00:04:27 -04:00
Timestamps can result in duplicate layer ids when layers are created rapidly or in different threads. Fix #14390
94 lines
3.4 KiB
Python
94 lines
3.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""QGIS Unit tests for QgsMapLayer
|
|
|
|
.. 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__ = 'Nyall Dawson'
|
|
__date__ = '1/02/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
|
|
|
|
from qgis.core import (QgsReadWriteContext,
|
|
QgsVectorLayer,
|
|
QgsProject)
|
|
from qgis.testing import start_app, unittest
|
|
from qgis.PyQt.QtXml import QDomDocument
|
|
|
|
start_app()
|
|
|
|
|
|
class TestQgsMapLayer(unittest.TestCase):
|
|
|
|
def testUniqueId(self):
|
|
"""
|
|
Test that layers created quickly with same name get a unique ID
|
|
"""
|
|
|
|
# make 1000 layers quickly
|
|
layers = []
|
|
for i in range(1000):
|
|
layer = QgsVectorLayer(
|
|
'Point?crs=epsg:4326&field=name:string(20)',
|
|
'test',
|
|
'memory')
|
|
layers.append(layer)
|
|
|
|
# make sure all ids are unique
|
|
ids = set()
|
|
for l in layers:
|
|
self.assertFalse(l.id() in ids)
|
|
ids.add(l.id())
|
|
|
|
def copyLayerViaXmlReadWrite(self, source, dest):
|
|
# write to xml
|
|
doc = QDomDocument("testdoc")
|
|
elem = doc.createElement("maplayer")
|
|
self.assertTrue(source.writeLayerXml(elem, doc, QgsReadWriteContext()))
|
|
self.assertTrue(dest.readLayerXml(elem, QgsReadWriteContext()), QgsProject.instance())
|
|
|
|
def testGettersSetters(self):
|
|
# test auto refresh getters/setters
|
|
layer = QgsVectorLayer("Point?field=fldtxt:string",
|
|
"layer", "memory")
|
|
self.assertFalse(layer.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer.autoRefreshInterval(), 0)
|
|
layer.setAutoRefreshInterval(5)
|
|
self.assertFalse(layer.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer.autoRefreshInterval(), 5)
|
|
layer.setAutoRefreshEnabled(True)
|
|
self.assertTrue(layer.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer.autoRefreshInterval(), 5)
|
|
layer.setAutoRefreshInterval(0) # should disable auto refresh
|
|
self.assertFalse(layer.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer.autoRefreshInterval(), 0)
|
|
|
|
def testSaveRestoreAutoRefresh(self):
|
|
""" test saving/restoring auto refresh to xml """
|
|
layer = QgsVectorLayer("Point?field=fldtxt:string",
|
|
"layer", "memory")
|
|
layer2 = QgsVectorLayer("Point?field=fldtxt:string",
|
|
"layer", "memory")
|
|
self.copyLayerViaXmlReadWrite(layer, layer2)
|
|
self.assertFalse(layer2.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer2.autoRefreshInterval(), 0)
|
|
|
|
layer.setAutoRefreshInterval(56)
|
|
self.copyLayerViaXmlReadWrite(layer, layer2)
|
|
self.assertFalse(layer2.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer2.autoRefreshInterval(), 56)
|
|
|
|
layer.setAutoRefreshEnabled(True)
|
|
self.copyLayerViaXmlReadWrite(layer, layer2)
|
|
self.assertTrue(layer2.hasAutoRefreshEnabled())
|
|
self.assertEqual(layer2.autoRefreshInterval(), 56)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|