Skip to content

Commit

Permalink
Merge pull request #5176 from alexbruy/fix-test
Browse files Browse the repository at this point in the history
[processing] attempt to fix failing test
  • Loading branch information
alexbruy committed Sep 12, 2017
2 parents a45913b + a090d7d commit 592151f
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 69 deletions.
79 changes: 32 additions & 47 deletions python/plugins/processing/tests/ToolsTest.py
Expand Up @@ -25,28 +25,17 @@


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


import os
import shutil
import tempfile

from qgis.testing import start_app, unittest from qgis.testing import start_app, unittest
from processing.tests.TestData import points2 from processing.tests.TestData import points2
from processing.tools import vector from processing.tools import vector
from qgis.core import (QgsVectorLayer, QgsFeatureRequest) from qgis.core import (QgsVectorLayer, QgsFeatureRequest)
from processing.core.ProcessingConfig import ProcessingConfig from processing.core.ProcessingConfig import ProcessingConfig


import os.path testDataPath = os.path.join(os.path.dirname(__file__), 'testdata')
import errno
import shutil

dataFolder = os.path.join(os.path.dirname(__file__), '../../../../tests/testdata/')
tmpBaseFolder = os.path.join(os.sep, 'tmp', 'qgis_test', str(os.getpid()))


def mkDirP(path):
try:
os.makedirs(path)
except OSError as exc:
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else:
raise


start_app() start_app()


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


@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
mkDirP(tmpBaseFolder) cls.cleanup_paths = []


@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
shutil.rmtree(tmpBaseFolder) for path in cls.cleanup_paths:
pass shutil.rmtree(path)


# See http://hub.qgis.org/issues/15698 def testOgrLayerNameExtraction(self):
def test_ogrLayerName(self): outdir = tempfile.mkdtemp()
tmpdir = os.path.join(tmpBaseFolder, 'ogrLayerName') self.cleanup_paths.append(outdir)
os.mkdir(tmpdir)


def linkTestfile(f, t): def _copyFile(dst):
os.link(os.path.join(dataFolder, f), os.path.join(tmpdir, t)) shutil.copyfile(os.path.join(testDataPath, 'custom', 'grass7', 'weighted.csv'), dst)


# URI from OGR provider # OGR provider - single layer
linkTestfile('geom_data.csv', 'a.csv') _copyFile(os.path.join(outdir, 'a.csv'))
name = vector.ogrLayerName(tmpdir) name = vector.ogrLayerName(outdir)
self.assertEqual(name, 'a') self.assertEqual(name, 'a')


# URI from OGR provider # OGR provider - multiple layers
linkTestfile('wkt_data.csv', 'b.csv') _copyFile(os.path.join(outdir, 'b.csv'))
name = vector.ogrLayerName(tmpdir + '|layerid=0') name = vector.ogrLayerName(outdir + '|layerid=0')
self.assertEqual(name, 'a')
name = vector.ogrLayerName(tmpdir + '|layerid=1')
self.assertEqual(name, 'b') self.assertEqual(name, 'b')
name = vector.ogrLayerName(outdir + '|layerid=1')
self.assertEqual(name, 'a')


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


# URI from OGR provider # OGR provider - layername takes precedence
name = vector.ogrLayerName(tmpdir + '|layername=f') name = vector.ogrLayerName(outdir + '|layername=f')
self.assertEqual(name, 'f') # layername takes precedence self.assertEqual(name, 'f')


# URI from OGR provider name = vector.ogrLayerName(outdir + '|layerid=0|layername=f')
name = vector.ogrLayerName(tmpdir + '|layerid=0|layername=f2') self.assertEqual(name, 'f')
self.assertEqual(name, 'f2') # layername takes precedence


# URI from OGR provider name = vector.ogrLayerName(outdir + '|layername=f|layerid=0')
name = vector.ogrLayerName(tmpdir + '|layername=f2|layerid=0') self.assertEqual(name, 'f')
self.assertEqual(name, 'f2') # layername takes precedence


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


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


Expand Down
24 changes: 2 additions & 22 deletions python/plugins/processing/tools/vector.py
Expand Up @@ -525,26 +525,6 @@ def ogrConnectionString(uri):
return '"' + ogrstr + '"' return '"' + ogrstr + '"'




#
# The uri parameter is an URI from any QGIS provider,
# so could have different formats.
# Example formats:
#
# -- PostgreSQL provider
# port=5493 sslmode=disable key='edge_id' srid=0 type=LineString table="city_data"."edge" (geom) sql=
#
# -- Spatialite provider
# dbname='/tmp/x.sqlite' table="t" (geometry) sql='
#
# -- OGR provider (single-layer directory)
# /tmp/x.gdb
#
# -- OGR provider (multi-layer directory)
# /tmp/x.gdb|layerid=1
#
# -- OGR provider (multi-layer directory)
# /tmp/x.gdb|layername=thelayer
#
def ogrLayerName(uri): def ogrLayerName(uri):


# handle URIs of database providers # handle URIs of database providers
Expand Down Expand Up @@ -580,10 +560,10 @@ def ogrLayerName(uri):
# take precedence # take precedence
ds = ogr.Open(ogruri) ds = ogr.Open(ogruri)
if not ds: if not ds:
return "invalid-uri" return None
ly = ds.GetLayer(layerid) ly = ds.GetLayer(layerid)
if not ly: if not ly:
return "invalid-layerid" return None
name = ly.GetName() name = ly.GetName()
return name return name


Expand Down

0 comments on commit 592151f

Please sign in to comment.