Skip to content

Commit f5b615a

Browse files
committed
fix virtuallayer tests on windows
1 parent 8c902b9 commit f5b615a

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

src/core/qgsvirtuallayerdefinition.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ QgsVirtualLayerDefinition QgsVirtualLayerDefinition::fromUrl( const QUrl& url )
3131
{
3232
QgsVirtualLayerDefinition def;
3333

34-
def.setFilePath( url.path() );
34+
def.setFilePath( url.toLocalFile() );
3535

3636
// regexp for column name
3737
const QString columnNameRx( "[a-zA-Z_\x80-\xFF][a-zA-Z0-9_\x80-\xFF]*" );
@@ -74,6 +74,8 @@ QgsVirtualLayerDefinition QgsVirtualLayerDefinition::fromUrl( const QUrl& url )
7474

7575
providerKey = value.left( pos );
7676
int pos2 = value.indexOf( ':', pos + 1 );
77+
if ( pos2 - pos == 2 )
78+
pos2 = value.indexOf( ':', pos + 3 );
7779
if ( pos2 != -1 )
7880
{
7981
source = QUrl::fromPercentEncoding( value.mid( pos + 1, pos2 - pos - 1 ).toUtf8() );

src/providers/virtual/qgsvirtuallayersqlitehelper.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ email : hugo dot mercier at oslandia dot com
1919
#include <stdexcept>
2020

2121
#include "qgsvirtuallayersqlitehelper.h"
22+
#include "qgslogger.h"
2223

2324
QgsScopedSqlite::QgsScopedSqlite( const QString& path, bool withExtension )
2425
{
@@ -38,7 +39,9 @@ QgsScopedSqlite::QgsScopedSqlite( const QString& path, bool withExtension )
3839

3940
if ( r )
4041
{
41-
throw std::runtime_error( sqlite3_errmsg( db_ ) );
42+
QString err = QString( "%1 [%2]" ).arg( sqlite3_errmsg( db_ ), path );
43+
QgsDebugMsg( err );
44+
throw std::runtime_error( err.toLocal8Bit().constData() );
4245
}
4346
// enable extended result codes
4447
sqlite3_extended_result_codes( db_, 1 );

tests/src/python/test_provider_virtual.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def tearDown(self):
8585
pass
8686

8787
def test_CsvNoGeometry(self):
88-
l1 = QgsVectorLayer("file:///" + os.path.join(self.testDataDir, "delimitedtext/test.csv").replace("\\", "/") + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
88+
l1 = QgsVectorLayer(QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/test.csv")).toString() + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
8989
self.assertEqual(l1.isValid(), True)
9090
QgsMapLayerRegistry.instance().addMapLayer(l1)
9191

@@ -96,7 +96,7 @@ def test_CsvNoGeometry(self):
9696

9797
def test_source_escaping(self):
9898
# the source contains ':'
99-
source = "file:///" + os.path.join(self.testDataDir, "delimitedtext/test.csv").replace("\\", "/") + "?type=csv&geomType=none&subsetIndex=no&watchFile=no"
99+
source = QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/test.csv")).toString() + "?type=csv&geomType=none&subsetIndex=no&watchFile=no"
100100
d = QgsVirtualLayerDefinition()
101101
d.addSource("t", source, "delimitedtext")
102102
l = QgsVectorLayer(d.toString(), "vtab", "virtual", False)
@@ -135,7 +135,7 @@ def create_test_db(dbfile):
135135
self.assertEqual(l.isValid(), True)
136136

137137
def test_DynamicGeometry(self):
138-
l1 = QgsVectorLayer("file:///" + os.path.join(self.testDataDir, "delimitedtext/testextpt.txt").replace("\\", "/") + "?type=csv&delimiter=%7C&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
138+
l1 = QgsVectorLayer(QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/testextpt.txt")).toString() + "?type=csv&delimiter=%7C&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
139139
self.assertEqual(l1.isValid(), True)
140140
QgsMapLayerRegistry.instance().addMapLayer(l1)
141141

@@ -337,7 +337,7 @@ def test_no_geometry(self):
337337

338338
def test_reopen(self):
339339
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
340-
tmp = os.path.join(tempfile.gettempdir(), "t.sqlite")
340+
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
341341
l = QgsVectorLayer("%s?layer=ogr:%s:vtab" % (tmp, source), "vtab2", "virtual", False)
342342
self.assertEqual(l.isValid(), True)
343343

@@ -348,7 +348,7 @@ def test_reopen(self):
348348

349349
def test_reopen2(self):
350350
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
351-
tmp = os.path.join(tempfile.gettempdir(), "t.sqlite")
351+
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
352352
l = QgsVectorLayer("%s?layer=ogr:%s:vtab&nogeometry" % (tmp, source), "vtab2", "virtual", False)
353353
self.assertEqual(l.isValid(), True)
354354

@@ -359,7 +359,7 @@ def test_reopen2(self):
359359

360360
def test_reopen3(self):
361361
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
362-
tmp = os.path.join(tempfile.gettempdir(), "t.sqlite")
362+
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
363363
query = QUrl.toPercentEncoding("SELECT * FROM vtab")
364364
l = QgsVectorLayer("%s?layer=ogr:%s:vtab&query=%s&uid=objectid&geometry=geometry:3:4326" % (tmp, source, query), "vtab2", "virtual", False)
365365
self.assertEqual(l.isValid(), True)
@@ -375,7 +375,7 @@ def test_reopen3(self):
375375

376376
def test_reopen4(self):
377377
source = QUrl.toPercentEncoding(os.path.join(self.testDataDir, "france_parts.shp"))
378-
tmp = os.path.join(tempfile.gettempdir(), "t.sqlite")
378+
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
379379
query = QUrl.toPercentEncoding("SELECT * FROM vtab")
380380
l = QgsVectorLayer("%s?layer=ogr:%s:vtab&query=%s&uid=objectid&nogeometry" % (tmp, source, query), "vtab2", "virtual", False)
381381
self.assertEqual(l.isValid(), True)
@@ -390,7 +390,7 @@ def test_reopen4(self):
390390
self.assertEqual(suma, 3064.0)
391391

392392
def test_refLayer(self):
393-
l1 = QgsVectorLayer("file:///" + os.path.join(self.testDataDir, "delimitedtext/test.csv").replace("\\", "/") + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
393+
l1 = QgsVectorLayer(QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/test.csv")).toString() + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
394394
self.assertEqual(l1.isValid(), True)
395395
QgsMapLayerRegistry.instance().addMapLayer(l1)
396396

@@ -403,7 +403,7 @@ def test_refLayer(self):
403403
print sum([f.id() for f in l2.getFeatures()])
404404

405405
def test_refLayers(self):
406-
l1 = QgsVectorLayer("file:///" + os.path.join(self.testDataDir, "delimitedtext/test.csv").replace("\\", "/") + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
406+
l1 = QgsVectorLayer(QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/test.csv")).toString() + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
407407
self.assertEqual(l1.isValid(), True)
408408
QgsMapLayerRegistry.instance().addMapLayer(l1)
409409

@@ -418,18 +418,18 @@ def test_refLayers(self):
418418
QgsMapLayerRegistry.instance().removeMapLayer(l2.id())
419419

420420
def test_refLayers2(self):
421-
l1 = QgsVectorLayer("file:///" + os.path.join(self.testDataDir, "delimitedtext/test.csv").replace("\\", "/") + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
421+
l1 = QgsVectorLayer(QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/test.csv")).toString() + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
422422
self.assertEqual(l1.isValid(), True)
423423
QgsMapLayerRegistry.instance().addMapLayer(l1)
424424

425425
# referenced layers cannot be stored !
426-
tmp = os.path.join(tempfile.gettempdir(), "t.sqlite")
426+
tmp = QUrl.fromLocalFile(os.path.join(tempfile.gettempdir(), "t.sqlite")).toString()
427427
l2 = QgsVectorLayer("%s?layer_ref=%s" % (tmp, l1.id()), "tt", "virtual", False)
428428
self.assertEqual(l2.isValid(), False)
429429
self.assertEqual("Cannot store referenced layers" in l2.dataProvider().error().message(), True)
430430

431431
def test_sql(self):
432-
l1 = QgsVectorLayer("file:///" + os.path.join(self.testDataDir, "delimitedtext/test.csv").replace("\\", "/") + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
432+
l1 = QgsVectorLayer(QUrl.fromLocalFile(os.path.join(self.testDataDir, "delimitedtext/test.csv")).toString() + "?type=csv&geomType=none&subsetIndex=no&watchFile=no", "test", "delimitedtext", False)
433433
self.assertEqual(l1.isValid(), True)
434434
QgsMapLayerRegistry.instance().addMapLayer(l1)
435435

0 commit comments

Comments
 (0)