mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
Test cases for threaded & unthread algorithms. Check outputs exist.
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@281 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
This commit is contained in:
parent
08aaa2b2ec
commit
21ac92210b
@ -27,6 +27,7 @@ sys.path.append(pardir)
|
||||
|
||||
sys.path.append('/usr/share/qgis/python/plugins')
|
||||
|
||||
import itertools
|
||||
from qgis.gui import QgsMapCanvas
|
||||
from qgis.core import *
|
||||
from qgis_interface import QgisInterface
|
||||
@ -38,8 +39,11 @@ from sextante.core.Sextante import Sextante
|
||||
from sextante.parameters.ParameterRaster import ParameterRaster
|
||||
from sextante.parameters.ParameterVector import ParameterVector
|
||||
from sextante.parameters.ParameterNumber import ParameterNumber
|
||||
from sextante.parameters.ParameterString import ParameterString
|
||||
from sextante.parameters.ParameterBoolean import ParameterBoolean
|
||||
from sextante.outputs.OutputRaster import OutputRaster
|
||||
from sextante.outputs.OutputVector import OutputVector
|
||||
from sextante.core.SextanteConfig import SextanteConfig
|
||||
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
|
||||
|
||||
class DataProviderStub:
|
||||
@ -48,18 +52,48 @@ class DataProviderStub:
|
||||
|
||||
class SextantePluginTest(unittest.TestCase):
|
||||
"""Test suite for Sextante QGis plugin"""
|
||||
|
||||
def test_createplugin(self):
|
||||
"""Initialize plugin"""
|
||||
self.sextanteplugin = SextantePlugin(IFACE)
|
||||
self.assertIsNotNone(self.sextanteplugin)
|
||||
|
||||
def test_sextante_alglist(self):
|
||||
"""Test alglist"""
|
||||
self.sextanteplugin = SextantePlugin(IFACE)
|
||||
self.providerToAlgs = Sextante.algs
|
||||
self.assertTrue(self.providerToAlgs, "Alg list")
|
||||
|
||||
class SextanteProviderTestCase(unittest.TestCase):
|
||||
def __init__(self, algId, alg, threaded):
|
||||
self.algId = algId
|
||||
self.alg = alg
|
||||
self.threaded = threaded
|
||||
self.msg = "ALG %s (%s)" % (self.algId, { True: "threaded" , False : "unthreaded"}[threaded])
|
||||
unittest.TestCase.__init__(self, "test_runalg")
|
||||
|
||||
def gen_test_parameters(self, alg):
|
||||
b = False
|
||||
for p in alg.parameters:
|
||||
if isinstance(p, ParameterRaster):
|
||||
l = QgsRasterLayer('.data/raster', "test raster")
|
||||
l = QgsRasterLayer('data/raster', "test raster")
|
||||
l.dataProvider = lambda: DataProviderStub('data/raster')
|
||||
yield l
|
||||
elif isinstance(p, ParameterVector):
|
||||
l = QgsVectorLayer('.data/vector', "test vector")
|
||||
l = QgsVectorLayer('data/vector', "test vector")
|
||||
l.dataProvider = lambda: DataProviderStub('data/vector')
|
||||
yield l
|
||||
elif isinstance(p, ParameterNumber):
|
||||
yield p.max
|
||||
if p.max:
|
||||
yield p.max
|
||||
elif p.min:
|
||||
yield p.min
|
||||
yield 42
|
||||
elif isinstance(p, ParameterString):
|
||||
yield str()
|
||||
elif isinstance(p, ParameterBoolean):
|
||||
b = not b
|
||||
yield b
|
||||
else:
|
||||
yield
|
||||
i = 0;
|
||||
@ -67,38 +101,43 @@ class SextantePluginTest(unittest.TestCase):
|
||||
if o.hidden:
|
||||
continue;
|
||||
i = i + 1
|
||||
outbasename = self.msg.replace('/', '-')
|
||||
if isinstance(o, OutputRaster):
|
||||
yield 'output%i.tif' % i
|
||||
yield 'outputs/%s - %i.tif' % (outbasename, i)
|
||||
elif isinstance(o, OutputVector):
|
||||
yield 'output%i.shp' % i
|
||||
yield 'outputs/%s - %i.shp' % (outbasename, i)
|
||||
else:
|
||||
yield
|
||||
|
||||
def test_0createplugin(self):
|
||||
"""Initialize plugin"""
|
||||
self.sextanteplugin = SextantePlugin(IFACE)
|
||||
self.assertIsNotNone(self.sextanteplugin)
|
||||
|
||||
def test_1sextante_alglist(self):
|
||||
"""Test alglist"""
|
||||
self.sextanteplugin = SextantePlugin(IFACE)
|
||||
self.providerToAlgs = Sextante.algs
|
||||
self.assertTrue(self.providerToAlgs, "Alg list")
|
||||
|
||||
def test_runalg(self):
|
||||
self.sextanteplugin = SextantePlugin(IFACE)
|
||||
self.providerToAlgs = Sextante.algs
|
||||
for provider, algs in self.providerToAlgs.items():
|
||||
if not algs.items():
|
||||
print "WARINING: %s seems to provide no algs!" % provider
|
||||
continue
|
||||
algId, alg = algs.items()[-1]
|
||||
args = list(self.gen_test_parameters(alg))
|
||||
print "Alg: ", algId
|
||||
print alg.parameters, ' => ', args
|
||||
result = Sextante.runalg(algId, *args)
|
||||
self.assertIsNotNone(result, "Running directly %s" % algId)
|
||||
print algId, " ok."
|
||||
SextanteConfig.setSettingValue(SextanteConfig.USE_THREADS, self.threaded)
|
||||
args = list(self.gen_test_parameters(self.alg))
|
||||
print
|
||||
print self.msg, "Parameters: ", self.alg.parameters, ' => ', args
|
||||
result = Sextante.runalg(self.algId, *args)
|
||||
self.assertIsNotNone(result, self.msg)
|
||||
if not result:
|
||||
return
|
||||
for p in result.values():
|
||||
if isinstance(p, str):
|
||||
self.assertTrue(os.path.exists(p), "Output %s exists" % p)
|
||||
|
||||
def algSuite():
|
||||
s = unittest.TestSuite()
|
||||
for provider, algs in Sextante.algs.items():
|
||||
if not algs.items():
|
||||
print "WARNING: %s seems to provide no algs!" % provider
|
||||
continue
|
||||
algId, alg = algs.items()[-1]
|
||||
s.addTest(SextanteProviderTestCase(algId, alg, True))
|
||||
s.addTest(SextanteProviderTestCase(algId, alg, False))
|
||||
return s
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
if not os.path.exists("data/raster") or not os.path.exists("data/vector"):
|
||||
print "Please install test data under ./data/raster and ./data/vector."
|
||||
exit(1)
|
||||
loadSuite = unittest.TestLoader().loadTestsFromTestCase(SextantePluginTest)
|
||||
unittest.TextTestRunner(verbosity=2).run(loadSuite)
|
||||
unittest.TextTestRunner(verbosity=2).run(algSuite())
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user