mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-16 00:05:45 -04:00
Restore virtual layer tests in PyQt5
This commit is contained in:
parent
7e6d641c68
commit
b23e58a6d9
@ -5,8 +5,6 @@ PyQgsPalLabelingServer
|
||||
PyQgsServer
|
||||
PyQgsServerAccessControl
|
||||
PyQgsSipCoverage
|
||||
PyQgsVirtualLayerDefinition
|
||||
PyQgsVirtualLayerProvider
|
||||
qgis_composermapgridtest
|
||||
qgis_composerutils
|
||||
ProcessingGrass7AlgorithmsImageryTest
|
||||
|
@ -43,6 +43,10 @@ start_app()
|
||||
TEST_DATA_DIR = unitTestDataPath()
|
||||
|
||||
|
||||
def toPercent(s):
|
||||
return bytes(QUrl.toPercentEncoding(s)).decode()
|
||||
|
||||
|
||||
class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
|
||||
@classmethod
|
||||
@ -137,7 +141,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l1.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l1)
|
||||
|
||||
query = QUrl.toPercentEncoding("select *,makepoint(x,y) as geom from vtab1")
|
||||
query = toPercent("select *,makepoint(x,y) as geom from vtab1")
|
||||
l2 = QgsVectorLayer("?layer_ref=%s&query=%s&geometry=geom:point:0&uid=id" % (l1.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
|
||||
@ -163,7 +167,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l1)
|
||||
ref_sum = sum(f.attributes()[0] for f in l1.getFeatures())
|
||||
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM vtab1")
|
||||
query = toPercent("SELECT * FROM vtab1")
|
||||
l2 = QgsVectorLayer("?layer_ref=%s&geometry=geometry:3:4326&query=%s&uid=OBJECTID" % (l1.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
self.assertEqual(l2.dataProvider().wkbType(), 3)
|
||||
@ -187,7 +191,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(ref_sum, ref_sum3)
|
||||
|
||||
# with two geometry columns
|
||||
query = QUrl.toPercentEncoding("SELECT *,geometry as geom FROM vtab1")
|
||||
query = toPercent("SELECT *,geometry as geom FROM vtab1")
|
||||
l2 = QgsVectorLayer("?layer_ref=%s&query=%s&uid=OBJECTID&geometry=geom:3:4326" % (l1.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
self.assertEqual(l2.dataProvider().wkbType(), 3)
|
||||
@ -210,7 +214,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(ref_sum, ref_sum3)
|
||||
|
||||
# the same, without geometry
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM ww")
|
||||
query = toPercent("SELECT * FROM ww")
|
||||
l2 = QgsVectorLayer("?layer_ref=%s:ww&query=%s&uid=ObJeCtId&nogeometry" % (l1.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
self.assertEqual(l2.dataProvider().wkbType(), 100) # NoGeometry
|
||||
@ -230,7 +234,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l1.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l1)
|
||||
|
||||
query = str(QUrl.toPercentEncoding("SELECT * FROM vtab1"))
|
||||
query = toPercent("SELECT * FROM vtab1")
|
||||
l2 = QgsVectorLayer("?layer_ref=%s&query=%s&uid=ObjectId&nogeometry" % (l1.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
|
||||
@ -241,7 +245,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l1.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l1)
|
||||
|
||||
query = str(QUrl.toPercentEncoding("SELECT * FROM vt"))
|
||||
query = toPercent("SELECT * FROM vt")
|
||||
l2 = QgsVectorLayer("?layer_ref=%s:vt&query=%s&uid=ObJeCtId&nogeometry" % (l1.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
self.assertEqual(l2.dataProvider().wkbType(), 100) # NoGeometry
|
||||
@ -258,7 +262,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
ref_sum = sum(f.attributes()[1] for f in l2.getFeatures())
|
||||
|
||||
# use a temporary file
|
||||
query = QUrl.toPercentEncoding("select id,Pilots,vtab1.geometry from vtab1,vtab2 where intersects(vtab1.geometry,vtab2.geometry)")
|
||||
query = toPercent("select id,Pilots,vtab1.geometry from vtab1,vtab2 where intersects(vtab1.geometry,vtab2.geometry)")
|
||||
l3 = QgsVectorLayer("?layer_ref=%s&layer_ref=%s&uid=id&query=%s&geometry=geometry:1:4326" % (l1.id(), l2.id(), query), "vtab", "virtual", False)
|
||||
self.assertEqual(l3.isValid(), True)
|
||||
self.assertEqual(l3.dataProvider().wkbType(), 1)
|
||||
@ -296,7 +300,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
QgsMapLayerRegistry.instance().removeMapLayer(l.id())
|
||||
|
||||
def test_embeddedLayer(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
l = QgsVectorLayer("?layer=ogr:%s" % source, "vtab", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
|
||||
@ -304,9 +308,9 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l.isValid(), True)
|
||||
|
||||
def test_filter_rect(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
|
||||
query = QUrl.toPercentEncoding("select * from vtab where _search_frame_=BuildMbr(-2.10,49.38,-1.3,49.99,4326)")
|
||||
query = toPercent("select * from vtab where _search_frame_=BuildMbr(-2.10,49.38,-1.3,49.99,4326)")
|
||||
l2 = QgsVectorLayer("?layer=ogr:%s:vtab&query=%s&uid=objectid" % (source, query), "vtab2", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
self.assertEqual(l2.dataProvider().featureCount(), 1)
|
||||
@ -314,7 +318,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(a, [u"Basse-Normandie"])
|
||||
|
||||
def test_recursiveLayer(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
l = QgsVectorLayer("?layer=ogr:%s" % source, "vtab", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l)
|
||||
@ -333,7 +337,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l2.dataProvider().wkbType(), 100) # NoGeometry
|
||||
|
||||
def test_reopen(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
|
||||
l = QgsVectorLayer("%s?layer=ogr:%s:vtab" % (tmp, source), "vtab2", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
@ -344,7 +348,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l2.dataProvider().featureCount(), 4)
|
||||
|
||||
def test_reopen2(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
|
||||
l = QgsVectorLayer("%s?layer=ogr:%s:vtab&nogeometry" % (tmp, source), "vtab2", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
@ -355,9 +359,9 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l2.dataProvider().featureCount(), 4)
|
||||
|
||||
def test_reopen3(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM vtab")
|
||||
query = toPercent("SELECT * FROM vtab")
|
||||
l = QgsVectorLayer("%s?layer=ogr:%s:vtab&query=%s&uid=objectid&geometry=geometry:3:4326" % (tmp, source, query), "vtab2", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
|
||||
@ -371,9 +375,9 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(suma, 3064.0)
|
||||
|
||||
def test_reopen4(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM vtab")
|
||||
query = toPercent("SELECT * FROM vtab")
|
||||
l = QgsVectorLayer("%s?layer=ogr:%s:vtab&query=%s&uid=objectid&nogeometry" % (tmp, source, query), "vtab2", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
|
||||
@ -406,7 +410,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
|
||||
# cf qgis bug #12266
|
||||
for i in range(10):
|
||||
q = QUrl.toPercentEncoding("select * from t" + str(i))
|
||||
q = toPercent("select * from t" + str(i))
|
||||
l2 = QgsVectorLayer("?layer_ref=%s:t%d&query=%s&uid=id" % (l1.id(), i, q), "vtab", "virtual", False)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l2)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
@ -441,7 +445,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l2)
|
||||
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM france_parts")
|
||||
query = toPercent("SELECT * FROM france_parts")
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual")
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
|
||||
@ -457,7 +461,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(n, 1)
|
||||
|
||||
# use uid
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM france_parts")
|
||||
query = toPercent("SELECT * FROM france_parts")
|
||||
l5 = QgsVectorLayer("?query=%s&geometry=geometry:polygon:4326&uid=ObjectId" % query, "tt", "virtual")
|
||||
self.assertEqual(l5.isValid(), True)
|
||||
|
||||
@ -499,14 +503,14 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l2)
|
||||
|
||||
# unnamed column
|
||||
query = QUrl.toPercentEncoding("SELECT count(*)")
|
||||
query = toPercent("SELECT count(*)")
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().fields().at(0).name(), "count(*)")
|
||||
self.assertEqual(l4.dataProvider().fields().at(0).type(), QVariant.Int)
|
||||
|
||||
def test_sql_field_types(self):
|
||||
query = QUrl.toPercentEncoding("SELECT 42 as t, 'ok'||'ok' as t2, GeomFromText('') as t3, 3.14*2 as t4")
|
||||
query = toPercent("SELECT 42 as t, 'ok'||'ok' as t2, GeomFromText('') as t3, 3.14*2 as t4")
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().fields().at(0).name(), "t")
|
||||
@ -519,7 +523,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l4.dataProvider().fields().at(3).type(), QVariant.Double)
|
||||
|
||||
# with type annotations
|
||||
query = QUrl.toPercentEncoding("SELECT '42.0' as t /*:real*/, 3 as t2/*:text */, GeomFromText('') as t3 /*:multiPoInT:4326 */, 3.14*2 as t4/*:int*/")
|
||||
query = toPercent("SELECT '42.0' as t /*:real*/, 3 as t2/*:text */, GeomFromText('') as t3 /*:multiPoInT:4326 */, 3.14*2 as t4/*:int*/")
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().fields().at(0).name(), "t")
|
||||
@ -537,13 +541,13 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(f.attributes()[2], 6.28)
|
||||
|
||||
# with type annotations and url options
|
||||
query = QUrl.toPercentEncoding("SELECT 1 as id /*:int*/, geomfromtext('point(0 0)',4326) as geometry/*:point:4326*/")
|
||||
query = toPercent("SELECT 1 as id /*:int*/, geomfromtext('point(0 0)',4326) as geometry/*:point:4326*/")
|
||||
l4 = QgsVectorLayer("?query=%s&geometry=geometry" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().wkbType(), 1) # point
|
||||
|
||||
# with type annotations and url options (2)
|
||||
query = QUrl.toPercentEncoding("SELECT 1 as id /*:int*/, 3.14 as f, geomfromtext('point(0 0)',4326) as geometry/*:point:4326*/")
|
||||
query = toPercent("SELECT 1 as id /*:int*/, 3.14 as f, geomfromtext('point(0 0)',4326) as geometry/*:point:4326*/")
|
||||
l4 = QgsVectorLayer("?query=%s&geometry=geometry&field=id:text" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().fields().at(0).name(), "id")
|
||||
@ -553,18 +557,18 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l4.dataProvider().wkbType(), 1) # point
|
||||
|
||||
def test_sql3b(self):
|
||||
query = QUrl.toPercentEncoding("SELECT GeomFromText('POINT(0 0)') as geom")
|
||||
query = toPercent("SELECT GeomFromText('POINT(0 0)') as geom")
|
||||
l4 = QgsVectorLayer("?query=%s&geometry=geom" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().wkbType(), 1)
|
||||
|
||||
# forced geometry type
|
||||
query = QUrl.toPercentEncoding("SELECT GeomFromText('POINT(0 0)') as geom")
|
||||
query = toPercent("SELECT GeomFromText('POINT(0 0)') as geom")
|
||||
l4 = QgsVectorLayer("?query=%s&geometry=geom:point:0" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().wkbType(), 1)
|
||||
|
||||
query = QUrl.toPercentEncoding("SELECT CastToPoint(GeomFromText('POINT(0 0)')) as geom")
|
||||
query = toPercent("SELECT CastToPoint(GeomFromText('POINT(0 0)')) as geom")
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
self.assertEqual(l4.dataProvider().wkbType(), 1)
|
||||
@ -574,7 +578,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l2)
|
||||
|
||||
query = QUrl.toPercentEncoding("SELECT OBJECTId from france_parts")
|
||||
query = toPercent("SELECT OBJECTId from france_parts")
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
s = sum(f.attributes()[0] for f in l4.getFeatures())
|
||||
@ -586,7 +590,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l2)
|
||||
|
||||
query = QUrl.toPercentEncoding('SELECT OBJECTId from "FranCe parts"')
|
||||
query = toPercent('SELECT OBJECTId from "FranCe parts"')
|
||||
l4 = QgsVectorLayer("?query=%s" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l4.isValid(), True)
|
||||
s = sum(f.attributes()[0] for f in l4.getFeatures())
|
||||
@ -594,7 +598,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
|
||||
def test_encoding(self):
|
||||
# changes encoding on a shapefile (the only provider supporting setEncoding)
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "shp_latin1.dbf"))
|
||||
source = toPercent(os.path.join(self.testDataDir, "shp_latin1.dbf"))
|
||||
l = QgsVectorLayer("?layer=ogr:%s:fp:latin1" % source, "vtab", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
|
||||
@ -608,8 +612,8 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(f.attributes()[1], u"accents \ufffd\ufffd\ufffd") # invalid unicode characters
|
||||
|
||||
def test_rowid(self):
|
||||
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
query = QUrl.toPercentEncoding("select rowid as uid, * from vtab limit 1 offset 3")
|
||||
source = toPercent(os.path.join(self.testDataDir, "france_parts.shp"))
|
||||
query = toPercent("select rowid as uid, * from vtab limit 1 offset 3")
|
||||
l = QgsVectorLayer("?layer=ogr:%s:vtab&query=%s" % (source, query), "vtab2", "virtual", False)
|
||||
# the last line must have a fixed rowid (not an autoincrement)
|
||||
for f in l.getFeatures():
|
||||
@ -617,21 +621,21 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(lid, 3)
|
||||
|
||||
def test_geometry_conversion(self):
|
||||
query = QUrl.toPercentEncoding("select geomfromtext('multipoint((0 0),(1 1))') as geom")
|
||||
query = toPercent("select geomfromtext('multipoint((0 0),(1 1))') as geom")
|
||||
l = QgsVectorLayer("?query=%s&geometry=geom:multipoint:0" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
for f in l.getFeatures():
|
||||
self.assertEqual(f.geometry().exportToWkt().lower().startswith("multipoint"), True)
|
||||
self.assertEqual("),(" in f.geometry().exportToWkt(), True) # has two points
|
||||
|
||||
query = QUrl.toPercentEncoding("select geomfromtext('multipolygon(((0 0,1 0,1 1,0 1,0 0)),((0 1,1 1,1 2,0 2,0 1)))') as geom")
|
||||
query = toPercent("select geomfromtext('multipolygon(((0 0,1 0,1 1,0 1,0 0)),((0 1,1 1,1 2,0 2,0 1)))') as geom")
|
||||
l = QgsVectorLayer("?query=%s&geometry=geom:multipolygon:0" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
for f in l.getFeatures():
|
||||
self.assertEqual(f.geometry().exportToWkt().lower().startswith("multipolygon"), True)
|
||||
self.assertEqual(")),((" in f.geometry().exportToWkt(), True) # has two polygons
|
||||
|
||||
query = QUrl.toPercentEncoding("select geomfromtext('multilinestring((0 0,1 0,1 1,0 1,0 0),(0 1,1 1,1 2,0 2,0 1))') as geom")
|
||||
query = toPercent("select geomfromtext('multilinestring((0 0,1 0,1 1,0 1,0 0),(0 1,1 1,1 2,0 2,0 1))') as geom")
|
||||
l = QgsVectorLayer("?query=%s&geometry=geom:multilinestring:0" % query, "tt", "virtual", False)
|
||||
self.assertEqual(l.isValid(), True)
|
||||
for f in l.getFeatures():
|
||||
@ -668,21 +672,23 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
self.assertEqual(l1.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l1)
|
||||
|
||||
query = QUrl.toPercentEncoding("SELECT * FROM france_parts")
|
||||
query = toPercent("SELECT * FROM france_parts")
|
||||
l2 = QgsVectorLayer("?query=%s" % query, "aa", "virtual", False)
|
||||
self.assertEqual(l2.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l2)
|
||||
|
||||
self.assertEqual(len(l2.dependencies()), 1)
|
||||
self.assertEqual(l2.dependencies()[0].layerId().startswith('france_parts'), True)
|
||||
ll0 = l2.dependencies().pop()
|
||||
self.assertEqual(ll0.layerId().startswith('france_parts'), True)
|
||||
|
||||
query = QUrl.toPercentEncoding("SELECT t1.objectid, t2.name_0 FROM france_parts as t1, aa as t2")
|
||||
query = toPercent("SELECT t1.objectid, t2.name_0 FROM france_parts as t1, aa as t2")
|
||||
l3 = QgsVectorLayer("?query=%s" % query, "bb", "virtual", False)
|
||||
self.assertEqual(l3.isValid(), True)
|
||||
QgsMapLayerRegistry.instance().addMapLayer(l3)
|
||||
|
||||
self.assertEqual(len(l2.dependencies()), 1)
|
||||
self.assertEqual(l2.dependencies()[0].layerId().startswith('france_parts'), True)
|
||||
ll0 = l2.dependencies().pop()
|
||||
self.assertEqual(ll0.layerId().startswith('france_parts'), True)
|
||||
|
||||
self.assertEqual(len(l3.dependencies()), 2)
|
||||
|
||||
@ -691,7 +697,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
QgsProject.instance().setFileName(temp)
|
||||
QgsProject.instance().write()
|
||||
|
||||
QgsMapLayerRegistry.instance().removeMapLayers([l1, l2])
|
||||
QgsMapLayerRegistry.instance().removeMapLayers([l1.id(), l2.id()])
|
||||
QgsProject.instance().clear()
|
||||
|
||||
QgsProject.instance().setFileName(temp)
|
||||
@ -795,7 +801,7 @@ class TestQgsVirtualLayerProvider(unittest.TestCase, ProviderTestCase):
|
||||
'LEFT JOIN {} AS j1 ON t."b_id"=j1."id" ' +
|
||||
'LEFT JOIN {} AS j2 ON t."c_id"=j2."id"').format(v1.id(), v2.id(), v3.id()))
|
||||
|
||||
QgsMapLayerRegistry.instance().removeMapLayers([v1, v2, v3])
|
||||
QgsMapLayerRegistry.instance().removeMapLayers([v1.id(), v2.id(), v3.id()])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -23,6 +23,14 @@ from qgis.core import (QgsField,
|
||||
from qgis.testing import unittest
|
||||
from qgis.PyQt.QtCore import QVariant, QUrl
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def strToUrl(s):
|
||||
if sys.version_info.major == 3:
|
||||
return QUrl.fromEncoded(bytes(s, "utf8"))
|
||||
else:
|
||||
return QUrl.fromEncoded(s)
|
||||
|
||||
|
||||
class TestQgsVirtualLayerDefinition(unittest.TestCase):
|
||||
@ -33,45 +41,45 @@ class TestQgsVirtualLayerDefinition(unittest.TestCase):
|
||||
d.setFilePath("/file")
|
||||
self.assertEqual(d.toString(), "file:///file")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).filePath(), "/file")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).filePath(), "/file")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).filePath(), "/file")
|
||||
d.setFilePath(os.path.join('C:/', 'file'))
|
||||
self.assertEqual(d.toString(), "file:///C:/file")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).filePath(), os.path.join('C:/', 'file'))
|
||||
#self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).filePath(), os.path.join('C:/', 'file'))
|
||||
d.setQuery("SELECT * FROM mytable")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).query(), "SELECT * FROM mytable")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).query(), "SELECT * FROM mytable")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).query(), "SELECT * FROM mytable")
|
||||
|
||||
q = u"SELECT * FROM tableéé /*:int*/"
|
||||
d.setQuery(q)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).query(), q)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).query(), q)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).query(), q)
|
||||
|
||||
s1 = u"file://foo&bar=okié"
|
||||
d.addSource("name", s1, "provider", "utf8")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).sourceLayers()[0].source(), s1)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).sourceLayers()[0].source(), s1)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).sourceLayers()[0].source(), s1)
|
||||
|
||||
n1 = u"éé ok"
|
||||
d.addSource(n1, s1, "provider")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).sourceLayers()[1].name(), n1)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).sourceLayers()[1].name(), n1)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).sourceLayers()[1].name(), n1)
|
||||
|
||||
d.addSource("ref1", "id0001")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).sourceLayers()[2].reference(), "id0001")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).sourceLayers()[2].reference(), "id0001")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).sourceLayers()[2].reference(), "id0001")
|
||||
|
||||
s = "dbname='C:\\tt' table=\"test\" (geometry) sql="
|
||||
d.addSource("nn", s, "spatialite")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).sourceLayers()[3].source(), s)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).sourceLayers()[3].source(), s)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).sourceLayers()[3].source(), s)
|
||||
|
||||
d.setGeometryField("geom")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).geometryField(), "geom")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).geometryField(), "geom")
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).geometryField(), "geom")
|
||||
|
||||
d.setGeometryWkbType(QgsWkbTypes.Point)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(d.toUrl()).geometryWkbType(), QgsWkbTypes.Point)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(QUrl.fromEncoded(d.toString())).geometryWkbType(), QgsWkbTypes.Point)
|
||||
self.assertEqual(QgsVirtualLayerDefinition.fromUrl(strToUrl(d.toString())).geometryWkbType(), QgsWkbTypes.Point)
|
||||
|
||||
f = QgsFields()
|
||||
f.append(QgsField("a", QVariant.Int))
|
||||
|
Loading…
x
Reference in New Issue
Block a user