def testProjectStyle(self): project = QgsProject() settings = project.styleSettings() self.assertIsInstance(settings.projectStyle(), QgsStyle) self.assertEqual(settings.projectStyle().name(), 'Project Styles') text_format = QgsTextFormat() text_format.setColor(QColor(255, 0, 0)) self.assertTrue(settings.projectStyle().addTextFormat( 'my text format', text_format)) self.assertTrue(settings.projectStyle().saveTextFormat( 'my text format', text_format, True, [])) self.assertEqual(settings.projectStyle().textFormatCount(), 1) tmp_dir = QTemporaryDir() tmp_project_file = "{}/project.qgs".format(tmp_dir.path()) self.assertTrue(project.write(tmp_project_file)) project.deleteLater() del project QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) project2 = QgsProject() self.assertTrue(project2.read(tmp_project_file)) self.assertEqual( project2.styleSettings().projectStyle().textFormatCount(), 1) self.assertEqual( project2.styleSettings().projectStyle().textFormat( 'my text format').color().name(), '#ff0000') project2.clear() self.assertEqual( project2.styleSettings().projectStyle().textFormatCount(), 0)
def testClear(self): """ Test clearing the collection """ p = QgsProject() l = QgsLayout(p) collection = l.pageCollection() collection.clear() # add a page page = QgsLayoutItemPage(l) page.setPageSize('A4') collection.addPage(page) # add a second page page2 = QgsLayoutItemPage(l) page2.setPageSize('A5') collection.addPage(page2) page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved) # clear collection.clear() self.assertEqual(collection.pageCount(), 0) self.assertEqual(len(page_about_to_be_removed_spy), 2) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page)) self.assertTrue(sip.isdeleted(page2))
def testFileStorage(self): """ Test file bound manager """ manager = QgsBookmarkManager() tmpDir = QTemporaryDir() tmpFile = "{}/bookmarks.xml".format(tmpDir.path()) manager.initialize(tmpFile) # add a bunch of bookmarks b = QgsBookmark() b.setId('1') b.setName('b1') b.setExtent( QgsReferencedRectangle(QgsRectangle(11, 21, 31, 41), QgsCoordinateReferenceSystem('EPSG:4326'))) b2 = QgsBookmark() b2.setId('2') b2.setName('b2') b2.setExtent( QgsReferencedRectangle(QgsRectangle(12, 22, 32, 42), QgsCoordinateReferenceSystem('EPSG:4326'))) b3 = QgsBookmark() b3.setId('3') b3.setName('b3') b3.setExtent( QgsReferencedRectangle(QgsRectangle(32, 32, 33, 43), QgsCoordinateReferenceSystem('EPSG:4326'))) manager.addBookmark(b) manager.addBookmark(b2) manager.addBookmark(b3) # destroy manager, causes write to disk manager.deleteLater() QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) del manager # create another new manager with same key, should contain existing bookmarks manager2 = QgsBookmarkManager() self.assertFalse(manager2.bookmarks()) manager2.initialize(tmpFile) self.assertEqual(manager2.bookmarks(), [b, b2, b3]) # but a manager with a different key should not... tmpFile2 = "{}/bookmarks2.xml".format(tmpDir.path()) manager3 = QgsBookmarkManager() manager3.initialize(tmpFile2) self.assertEqual(manager3.bookmarks(), [])
def testSettings(self): p = QgsProject() l = QgsLayout(p) map = QgsLayoutItemMap(l) shape = QgsLayoutItemShape(l) settings = QgsLayoutItemMapItemClipPathSettings(map) spy = QSignalSpy(settings.changed) self.assertFalse(settings.enabled()) settings.setEnabled(True) self.assertTrue(settings.enabled()) self.assertEqual(len(spy), 1) settings.setEnabled(True) self.assertEqual(len(spy), 1) settings.setFeatureClippingType( QgsMapClippingRegion.FeatureClippingType.NoClipping) self.assertEqual(settings.featureClippingType(), QgsMapClippingRegion.FeatureClippingType.NoClipping) self.assertEqual(len(spy), 2) settings.setFeatureClippingType( QgsMapClippingRegion.FeatureClippingType.NoClipping) self.assertEqual(len(spy), 2) self.assertFalse(settings.forceLabelsInsideClipPath()) settings.setForceLabelsInsideClipPath(True) self.assertTrue(settings.forceLabelsInsideClipPath()) self.assertEqual(len(spy), 3) settings.setForceLabelsInsideClipPath(True) self.assertEqual(len(spy), 3) settings.setSourceItem(shape) self.assertEqual(len(spy), 4) self.assertEqual(settings.sourceItem(), shape) settings.setSourceItem(None) self.assertEqual(len(spy), 5) self.assertIsNone(settings.sourceItem()) settings.setSourceItem(shape) self.assertEqual(len(spy), 6) shape.deleteLater() QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) del shape self.assertIsNone(settings.sourceItem())
def test_layer_tree_group_layer(self): """ Test setting a group layer on a QgsLayerTreeGroup """ options = QgsGroupLayer.LayerOptions(QgsCoordinateTransformContext()) group_layer = QgsGroupLayer('group', options) group_node = QgsLayerTreeGroup() self.assertFalse(group_node.groupLayer()) group_node.setGroupLayer(group_layer) self.assertEqual(group_node.groupLayer(), group_layer) group_layer.deleteLater() group_layer = None QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) # should be automatically cleaned self.assertFalse(group_node.groupLayer())
def test_children(self): options = QgsGroupLayer.LayerOptions(QgsCoordinateTransformContext()) group_layer = QgsGroupLayer('test', options) self.assertTrue(group_layer.isValid()) self.assertFalse(group_layer.childLayers()) # add some child layers layer1 = QgsVectorLayer('Point?crs=epsg:3111', 'Point', 'memory') layer2 = QgsVectorLayer('Point?crs=epsg:4326', 'Point', 'memory') group_layer.setChildLayers([layer1, layer2]) self.assertEqual(group_layer.childLayers(), [layer1, layer2]) # force deletion of a layer layer1.deleteLater() layer1 = None QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) # should be automatically cleaned self.assertEqual(group_layer.childLayers(), [layer2])
def testIsActive(self): p = QgsProject() l = QgsLayout(p) map = QgsLayoutItemMap(l) shape = QgsLayoutItemShape(l) settings = QgsLayoutItemMapItemClipPathSettings(map) self.assertFalse(settings.isActive()) settings.setEnabled(True) self.assertFalse(settings.isActive()) settings.setSourceItem(shape) self.assertTrue(settings.isActive()) settings.setEnabled(False) self.assertFalse(settings.isActive()) settings.setEnabled(True) self.assertTrue(settings.isActive()) shape.deleteLater() QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) del shape self.assertFalse(settings.isActive())
def testDeletePages(self): """ Test deleting pages from the collection """ p = QgsProject() l = QgsLayout(p) collection = l.pageCollection() # add a page page = QgsLayoutItemPage(l) page.setPageSize('A4') collection.addPage(page) # add a second page page2 = QgsLayoutItemPage(l) page2.setPageSize('A5') collection.addPage(page2) page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved) # delete page collection.deletePage(None) self.assertEqual(collection.pageCount(), 2) self.assertEqual(len(page_about_to_be_removed_spy), 0) page3 = QgsLayoutItemPage(l) # try deleting a page not in collection collection.deletePage(page3) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertFalse(sip.isdeleted(page3)) self.assertEqual(collection.pageCount(), 2) self.assertEqual(len(page_about_to_be_removed_spy), 0) self.assertEqual(l.layoutBounds(ignorePages=False), QRectF(0.0, 0.0, 210.0, 517.0)) collection.deletePage(page) self.assertEqual(collection.pageCount(), 1) self.assertEqual(l.layoutBounds(ignorePages=False), QRectF(0.0, 0.0, 148.0, 210.0)) self.assertFalse(page in collection.pages()) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page)) self.assertEqual(len(page_about_to_be_removed_spy), 1) self.assertEqual(page_about_to_be_removed_spy[-1][0], 0) collection.deletePage(page2) self.assertEqual(collection.pageCount(), 0) self.assertFalse(collection.pages()) self.assertEqual(l.layoutBounds(ignorePages=False), QRectF()) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page2)) self.assertEqual(len(page_about_to_be_removed_spy), 2) self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)
def testDeletePages(self): """ Test deleting pages from the collection """ p = QgsProject() l = QgsLayout(p) collection = l.pageCollection() # add a page page = QgsLayoutItemPage(l) page.setPageSize('A4') collection.addPage(page) # add a second page page2 = QgsLayoutItemPage(l) page2.setPageSize('A5') collection.addPage(page2) page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved) # delete page collection.deletePage(None) self.assertEqual(collection.pageCount(), 2) self.assertEqual(len(page_about_to_be_removed_spy), 0) page3 = QgsLayoutItemPage(l) # try deleting a page not in collection collection.deletePage(page3) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertFalse(sip.isdeleted(page3)) self.assertEqual(collection.pageCount(), 2) self.assertEqual(len(page_about_to_be_removed_spy), 0) collection.deletePage(page) self.assertEqual(collection.pageCount(), 1) self.assertFalse(page in collection.pages()) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page)) self.assertEqual(len(page_about_to_be_removed_spy), 1) self.assertEqual(page_about_to_be_removed_spy[-1][0], 0) collection.deletePage(page2) self.assertEqual(collection.pageCount(), 0) self.assertFalse(collection.pages()) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page2)) self.assertEqual(len(page_about_to_be_removed_spy), 2) self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)
def testDeletePages(self): """ Test deleting pages from the collection """ p = QgsProject() l = QgsLayout(p) collection = l.pageCollection() # add a page page = QgsLayoutItemPage(l) page.setPageSize('A4') collection.addPage(page) # add a second page page2 = QgsLayoutItemPage(l) page2.setPageSize('A5') collection.addPage(page2) # delete page collection.deletePage(None) self.assertEqual(collection.pageCount(), 2) page3 = QgsLayoutItemPage(l) # try deleting a page not in collection collection.deletePage(page3) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertFalse(sip.isdeleted(page3)) self.assertEqual(collection.pageCount(), 2) collection.deletePage(page) self.assertEqual(collection.pageCount(), 1) self.assertFalse(page in collection.pages()) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page)) collection.deletePage(page2) self.assertEqual(collection.pageCount(), 0) self.assertFalse(collection.pages()) QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page2))
def testPages(self): """ Test adding/retrieving/deleting pages from the collection """ p = QgsProject() l = QgsLayout(p) collection = l.pageCollection() self.assertEqual(collection.pageCount(), 0) self.assertFalse(collection.pages()) self.assertFalse(collection.page(-1)) self.assertFalse(collection.page(0)) self.assertFalse(collection.page(1)) # add a page page = QgsLayoutItemPage(l) page.setPageSize('A4') self.assertEqual(collection.pageNumber(page), -1) collection.addPage(page) self.assertTrue(page in l.items()) self.assertEqual(collection.pageCount(), 1) self.assertEqual(collection.pages(), [page]) self.assertFalse(collection.page(-1)) self.assertEqual(collection.page(0), page) self.assertFalse(collection.page(1)) self.assertEqual(collection.pageNumber(page), 0) # add a second page page2 = QgsLayoutItemPage(l) page2.setPageSize('A5') collection.addPage(page2) self.assertEqual(collection.pageCount(), 2) self.assertEqual(collection.pages(), [page, page2]) self.assertFalse(collection.page(-1)) self.assertEqual(collection.page(0), page) self.assertEqual(collection.page(1), page2) self.assertEqual(collection.pageNumber(page2), 1) # insert a page page3 = QgsLayoutItemPage(l) page3.setPageSize('A3') collection.insertPage(page3, 1) self.assertTrue(page3 in l.items()) self.assertEqual(collection.pageCount(), 3) self.assertEqual(collection.pages(), [page, page3, page2]) self.assertEqual(collection.page(0), page) self.assertEqual(collection.page(1), page3) self.assertEqual(collection.page(2), page2) self.assertEqual(collection.pageNumber(page3), 1) # delete page collection.deletePage(-1) self.assertEqual(collection.pageCount(), 3) self.assertEqual(collection.pages(), [page, page3, page2]) collection.deletePage(100) self.assertEqual(collection.pageCount(), 3) self.assertEqual(collection.pages(), [page, page3, page2]) collection.deletePage(1) self.assertEqual(collection.pageCount(), 2) self.assertEqual(collection.pages(), [page, page2]) # make sure page was deleted QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page3)) del l QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertTrue(sip.isdeleted(page)) self.assertTrue(sip.isdeleted(page2))
def test_model(self): model = QgsCombinedStyleModel() self.assertFalse(model.styles()) self.assertEqual(model.rowCount(), 0) style1 = QgsStyle() style1.createMemoryDatabase() style1.setName('first style') style1.setFileName('/home/my style1.db') model.addStyle(style1) self.assertEqual(model.styles(), [style1]) self.assertEqual(model.headerData(0, Qt.Horizontal), 'Name') self.assertEqual(model.headerData(1, Qt.Horizontal), 'Tags') self.assertEqual(model.columnCount(), 2) self.assertEqual(model.rowCount(), 1) self.assertEqual(model.data(model.index(0, 0)), 'first style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') style1.addTextFormat('format 1', QgsTextFormat(), True) self.assertEqual(model.rowCount(), 2) self.assertEqual(model.data(model.index(0, 0)), 'first style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0)), 'format 1') self.assertFalse(model.data(model.index(1, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') style2 = QgsStyle() style2.createMemoryDatabase() style2.setName('second style') style2.setFileName('/home/my style2.db') style2.addTextFormat('format 2', QgsTextFormat(), True) style2.addTextFormat('format 3', QgsTextFormat(), True) model.addStyle(style2) self.assertEqual(model.styles(), [style1, style2]) self.assertEqual(model.rowCount(), 5) self.assertEqual(model.data(model.index(0, 0)), 'first style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') self.assertEqual(model.data(model.index(1, 0)), 'format 1') self.assertFalse(model.data(model.index(1, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') self.assertEqual(model.data(model.index(2, 0)), 'second style') self.assertTrue(model.data(model.index(2, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(2, 0), QgsStyleModel.StyleName), 'second style') self.assertEqual(model.data(model.index(2, 0), QgsStyleModel.StyleFileName), '/home/my style2.db') self.assertEqual(model.data(model.index(3, 0)), 'format 2') self.assertFalse(model.data(model.index(3, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(3, 0), QgsStyleModel.StyleName), 'second style') self.assertEqual(model.data(model.index(3, 0), QgsStyleModel.StyleFileName), '/home/my style2.db') self.assertEqual(model.data(model.index(4, 0)), 'format 3') self.assertFalse(model.data(model.index(4, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(4, 0), QgsStyleModel.StyleName), 'second style') self.assertEqual(model.data(model.index(4, 0), QgsStyleModel.StyleFileName), '/home/my style2.db') style1.deleteLater() style1 = None QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertEqual(model.rowCount(), 3) self.assertEqual(model.data(model.index(0, 0)), 'second style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0)), 'format 2') self.assertFalse(model.data(model.index(1, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(2, 0)), 'format 3') self.assertFalse(model.data(model.index(2, 0), QgsStyleModel.IsTitleRole)) model.removeStyle(style2) self.assertEqual(model.rowCount(), 0) model.removeStyle(style2)
def testAdditionalLayers(self): QgsProject.instance().clear() l1 = create_layer('l1') l2 = create_layer('l2') QgsProject.instance().addMapLayers([l1, l2]) m = QgsMapLayerComboBox() self.assertEqual(m.count(), 2) l3 = create_layer('l3') l4 = create_layer('l4') m.setAdditionalLayers([l3, l4]) self.assertEqual(m.count(), 4) m.setAdditionalItems(['a', 'b']) self.assertEqual(m.count(), 6) self.assertEqual(m.itemText(0), 'l1') self.assertEqual(m.itemText(1), 'l2') self.assertEqual(m.itemText(2), 'l3') self.assertEqual(m.itemText(3), 'l4') self.assertEqual(m.itemText(4), 'a') self.assertEqual(m.itemText(5), 'b') m.setAllowEmptyLayer(True) self.assertEqual(m.count(), 7) self.assertFalse(m.itemText(0)) self.assertEqual(m.itemText(1), 'l1') self.assertEqual(m.itemText(2), 'l2') self.assertEqual(m.itemText(3), 'l3') self.assertEqual(m.itemText(4), 'l4') self.assertEqual(m.itemText(5), 'a') self.assertEqual(m.itemText(6), 'b') l3.deleteLater() QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertEqual(m.count(), 6) self.assertFalse(m.itemText(0)) self.assertEqual(m.itemText(1), 'l1') self.assertEqual(m.itemText(2), 'l2') self.assertEqual(m.itemText(3), 'l4') self.assertEqual(m.itemText(4), 'a') self.assertEqual(m.itemText(5), 'b') l5 = create_layer('l5') l6 = create_layer('l6') m.setAdditionalLayers([l5, l6, l4]) self.assertEqual(m.count(), 8) self.assertFalse(m.itemText(0)) self.assertEqual(m.itemText(1), 'l1') self.assertEqual(m.itemText(2), 'l2') self.assertEqual(m.itemText(3), 'l4') self.assertEqual(m.itemText(4), 'l5') self.assertEqual(m.itemText(5), 'l6') self.assertEqual(m.itemText(6), 'a') self.assertEqual(m.itemText(7), 'b') m.setAdditionalLayers([l5, l4]) self.assertEqual(m.count(), 7) self.assertFalse(m.itemText(0)) self.assertEqual(m.itemText(1), 'l1') self.assertEqual(m.itemText(2), 'l2') self.assertEqual(m.itemText(3), 'l4') self.assertEqual(m.itemText(4), 'l5') self.assertEqual(m.itemText(5), 'a') self.assertEqual(m.itemText(6), 'b') QgsProject.instance().removeMapLayers([l1.id(), l2.id()]) self.assertEqual(m.count(), 5) self.assertFalse(m.itemText(0)) self.assertEqual(m.itemText(1), 'l4') self.assertEqual(m.itemText(2), 'l5') self.assertEqual(m.itemText(3), 'a') self.assertEqual(m.itemText(4), 'b')
def testAdditionalLayers(self): l1 = create_layer('l1') l2 = create_layer('l2') QgsProject.instance().addMapLayers([l1, l2]) m = QgsMapLayerModel() self.assertEqual(m.rowCount(QModelIndex()), 2) l3 = create_layer('l3') l4 = create_layer('l4') m.setAdditionalLayers([l3, l4]) self.assertEqual(m.rowCount(QModelIndex()), 4) m.setAdditionalItems(['a', 'b']) self.assertEqual(m.rowCount(QModelIndex()), 6) self.assertEqual(m.data(m.index(0, 0), Qt.DisplayRole), 'l1') self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l2') self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l3') self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l4') self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'a') self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'b') m.setAllowEmptyLayer(True) self.assertEqual(m.rowCount(QModelIndex()), 7) self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole)) self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1') self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2') self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l3') self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'l4') self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'a') self.assertEqual(m.data(m.index(6, 0), Qt.DisplayRole), 'b') l3.deleteLater() QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertEqual(m.rowCount(QModelIndex()), 6) self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole)) self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1') self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2') self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l4') self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'a') self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'b') l5 = create_layer('l5') l6 = create_layer('l6') m.setAdditionalLayers([l5, l6, l4]) self.assertEqual(m.rowCount(QModelIndex()), 8) self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole)) self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1') self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2') self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l5') self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'l6') self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'l4') self.assertEqual(m.data(m.index(6, 0), Qt.DisplayRole), 'a') self.assertEqual(m.data(m.index(7, 0), Qt.DisplayRole), 'b') m.setAdditionalLayers([l5, l4]) self.assertEqual(m.rowCount(QModelIndex()), 7) self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole)) self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1') self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2') self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l5') self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'l4') self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'a') self.assertEqual(m.data(m.index(6, 0), Qt.DisplayRole), 'b') QgsProject.instance().removeMapLayers([l1.id(), l2.id()]) self.assertEqual(m.rowCount(QModelIndex()), 5) self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole)) self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l5') self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l4') self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'a') self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'b')