Skip to content

Commit 592151f

Browse files
authored
Merge pull request #5176 from alexbruy/fix-test
[processing] attempt to fix failing test
2 parents a45913b + a090d7d commit 592151f

File tree

2 files changed

+34
-69
lines changed

2 files changed

+34
-69
lines changed

python/plugins/processing/tests/ToolsTest.py

+32-47
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,17 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28+
import os
29+
import shutil
30+
import tempfile
31+
2832
from qgis.testing import start_app, unittest
2933
from processing.tests.TestData import points2
3034
from processing.tools import vector
3135
from qgis.core import (QgsVectorLayer, QgsFeatureRequest)
3236
from processing.core.ProcessingConfig import ProcessingConfig
3337

34-
import os.path
35-
import errno
36-
import shutil
37-
38-
dataFolder = os.path.join(os.path.dirname(__file__), '../../../../tests/testdata/')
39-
tmpBaseFolder = os.path.join(os.sep, 'tmp', 'qgis_test', str(os.getpid()))
40-
41-
42-
def mkDirP(path):
43-
try:
44-
os.makedirs(path)
45-
except OSError as exc:
46-
if exc.errno == errno.EEXIST and os.path.isdir(path):
47-
pass
48-
else:
49-
raise
38+
testDataPath = os.path.join(os.path.dirname(__file__), 'testdata')
5039

5140
start_app()
5241

@@ -55,54 +44,50 @@ class VectorTest(unittest.TestCase):
5544

5645
@classmethod
5746
def setUpClass(cls):
58-
mkDirP(tmpBaseFolder)
47+
cls.cleanup_paths = []
5948

6049
@classmethod
6150
def tearDownClass(cls):
62-
shutil.rmtree(tmpBaseFolder)
63-
pass
51+
for path in cls.cleanup_paths:
52+
shutil.rmtree(path)
6453

65-
# See http://hub.qgis.org/issues/15698
66-
def test_ogrLayerName(self):
67-
tmpdir = os.path.join(tmpBaseFolder, 'ogrLayerName')
68-
os.mkdir(tmpdir)
54+
def testOgrLayerNameExtraction(self):
55+
outdir = tempfile.mkdtemp()
56+
self.cleanup_paths.append(outdir)
6957

70-
def linkTestfile(f, t):
71-
os.link(os.path.join(dataFolder, f), os.path.join(tmpdir, t))
58+
def _copyFile(dst):
59+
shutil.copyfile(os.path.join(testDataPath, 'custom', 'grass7', 'weighted.csv'), dst)
7260

73-
# URI from OGR provider
74-
linkTestfile('geom_data.csv', 'a.csv')
75-
name = vector.ogrLayerName(tmpdir)
61+
# OGR provider - single layer
62+
_copyFile(os.path.join(outdir, 'a.csv'))
63+
name = vector.ogrLayerName(outdir)
7664
self.assertEqual(name, 'a')
7765

78-
# URI from OGR provider
79-
linkTestfile('wkt_data.csv', 'b.csv')
80-
name = vector.ogrLayerName(tmpdir + '|layerid=0')
81-
self.assertEqual(name, 'a')
82-
name = vector.ogrLayerName(tmpdir + '|layerid=1')
66+
# OGR provider - multiple layers
67+
_copyFile(os.path.join(outdir, 'b.csv'))
68+
name = vector.ogrLayerName(outdir + '|layerid=0')
8369
self.assertEqual(name, 'b')
70+
name = vector.ogrLayerName(outdir + '|layerid=1')
71+
self.assertEqual(name, 'a')
8472

85-
# URI from OGR provider
86-
name = vector.ogrLayerName(tmpdir + '|layerid=2')
87-
self.assertEqual(name, 'invalid-layerid')
73+
name = vector.ogrLayerName(outdir + '|layerid=2')
74+
self.assertIsNone(name)
8875

89-
# URI from OGR provider
90-
name = vector.ogrLayerName(tmpdir + '|layername=f')
91-
self.assertEqual(name, 'f') # layername takes precedence
76+
# OGR provider - layername takes precedence
77+
name = vector.ogrLayerName(outdir + '|layername=f')
78+
self.assertEqual(name, 'f')
9279

93-
# URI from OGR provider
94-
name = vector.ogrLayerName(tmpdir + '|layerid=0|layername=f2')
95-
self.assertEqual(name, 'f2') # layername takes precedence
80+
name = vector.ogrLayerName(outdir + '|layerid=0|layername=f')
81+
self.assertEqual(name, 'f')
9682

97-
# URI from OGR provider
98-
name = vector.ogrLayerName(tmpdir + '|layername=f2|layerid=0')
99-
self.assertEqual(name, 'f2') # layername takes precedence
83+
name = vector.ogrLayerName(outdir + '|layername=f|layerid=0')
84+
self.assertEqual(name, 'f')
10085

101-
# URI from Sqlite provider
86+
# SQLiite provider
10287
name = vector.ogrLayerName('dbname=\'/tmp/x.sqlite\' table="t" (geometry) sql=')
10388
self.assertEqual(name, 't')
10489

105-
# URI from PostgreSQL provider
90+
# PostgreSQL provider
10691
name = vector.ogrLayerName('port=5493 sslmode=disable key=\'edge_id\' srid=0 type=LineString table="city_data"."edge" (geom) sql=')
10792
self.assertEqual(name, 'city_data.edge')
10893

python/plugins/processing/tools/vector.py

+2-22
Original file line numberDiff line numberDiff line change
@@ -525,26 +525,6 @@ def ogrConnectionString(uri):
525525
return '"' + ogrstr + '"'
526526

527527

528-
#
529-
# The uri parameter is an URI from any QGIS provider,
530-
# so could have different formats.
531-
# Example formats:
532-
#
533-
# -- PostgreSQL provider
534-
# port=5493 sslmode=disable key='edge_id' srid=0 type=LineString table="city_data"."edge" (geom) sql=
535-
#
536-
# -- Spatialite provider
537-
# dbname='/tmp/x.sqlite' table="t" (geometry) sql='
538-
#
539-
# -- OGR provider (single-layer directory)
540-
# /tmp/x.gdb
541-
#
542-
# -- OGR provider (multi-layer directory)
543-
# /tmp/x.gdb|layerid=1
544-
#
545-
# -- OGR provider (multi-layer directory)
546-
# /tmp/x.gdb|layername=thelayer
547-
#
548528
def ogrLayerName(uri):
549529

550530
# handle URIs of database providers
@@ -580,10 +560,10 @@ def ogrLayerName(uri):
580560
# take precedence
581561
ds = ogr.Open(ogruri)
582562
if not ds:
583-
return "invalid-uri"
563+
return None
584564
ly = ds.GetLayer(layerid)
585565
if not ly:
586-
return "invalid-layerid"
566+
return None
587567
name = ly.GetName()
588568
return name
589569

0 commit comments

Comments
 (0)