|
30 | 30 | QgsProviderRegistry,
|
31 | 31 | QgsVirtualLayerDefinition,
|
32 | 32 | QgsWKBTypes
|
| 33 | + QgsProject |
33 | 34 | )
|
34 | 35 |
|
35 | 36 | from utilities import (unitTestDataPath,
|
@@ -664,5 +665,43 @@ def test_queryOnMemoryLayer(self):
|
664 | 665 | ml.addFeatures([f3])
|
665 | 666 | self.assertEqual(ml.featureCount(), vl.featureCount())
|
666 | 667 |
|
| 668 | + def test_ProjectDependencies(self): |
| 669 | + # make a virtual layer with living references and save it to a project |
| 670 | + l1 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "france_parts", "ogr", False) |
| 671 | + self.assertEqual(l1.isValid(), True) |
| 672 | + QgsMapLayerRegistry.instance().addMapLayer(l1) |
| 673 | + |
| 674 | + query = QUrl.toPercentEncoding("SELECT * FROM france_parts") |
| 675 | + l2 = QgsVectorLayer("?query=%s" % query, "aa", "virtual", False) |
| 676 | + self.assertEqual(l2.isValid(), True) |
| 677 | + QgsMapLayerRegistry.instance().addMapLayer(l2) |
| 678 | + |
| 679 | + self.assertEqual(len(l2.layerDependencies()), 1) |
| 680 | + self.assertEqual(l2.layerDependencies()[0].startswith('france_parts'), True) |
| 681 | + |
| 682 | + query = QUrl.toPercentEncoding("SELECT t1.objectid, t2.name_0 FROM france_parts as t1, aa as t2") |
| 683 | + l3 = QgsVectorLayer("?query=%s" % query, "bb", "virtual", False) |
| 684 | + self.assertEqual(l3.isValid(), True) |
| 685 | + QgsMapLayerRegistry.instance().addMapLayer(l3) |
| 686 | + |
| 687 | + self.assertEqual(len(l2.layerDependencies()), 1) |
| 688 | + self.assertEqual(l2.layerDependencies()[0].startswith('france_parts'), True) |
| 689 | + |
| 690 | + self.assertEqual(len(l3.layerDependencies()), 2) |
| 691 | + |
| 692 | + temp = os.path.join(tempfile.gettempdir(), "qgstestproject.qgs") |
| 693 | + |
| 694 | + QgsProject.instance().setFileName(temp) |
| 695 | + QgsProject.instance().write() |
| 696 | + |
| 697 | + QgsMapLayerRegistry.instance().removeMapLayers([l1, l2]) |
| 698 | + QgsProject.instance().clear() |
| 699 | + |
| 700 | + QgsProject.instance().setFileName(temp) |
| 701 | + QgsProject.instance().read() |
| 702 | + |
| 703 | + # make sure the 3 layers are loaded back |
| 704 | + self.assertEqual(len(QgsMapLayerRegistry.instance().mapLayers()), 3) |
| 705 | + |
667 | 706 | if __name__ == '__main__':
|
668 | 707 | unittest.main()
|
0 commit comments