Skip to content

Commit 21ac922

Browse files
author
cpolymeris@gmail.com
committedJul 4, 2012
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
1 parent 08aaa2b commit 21ac922

File tree

1 file changed

+69
-30
lines changed

1 file changed

+69
-30
lines changed
 

‎src/sextante/tests/test.py

Lines changed: 69 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
sys.path.append('/usr/share/qgis/python/plugins')
2929

30+
import itertools
3031
from qgis.gui import QgsMapCanvas
3132
from qgis.core import *
3233
from qgis_interface import QgisInterface
@@ -38,8 +39,11 @@
3839
from sextante.parameters.ParameterRaster import ParameterRaster
3940
from sextante.parameters.ParameterVector import ParameterVector
4041
from sextante.parameters.ParameterNumber import ParameterNumber
42+
from sextante.parameters.ParameterString import ParameterString
43+
from sextante.parameters.ParameterBoolean import ParameterBoolean
4144
from sextante.outputs.OutputRaster import OutputRaster
4245
from sextante.outputs.OutputVector import OutputVector
46+
from sextante.core.SextanteConfig import SextanteConfig
4347
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
4448

4549
class DataProviderStub:
@@ -48,57 +52,92 @@ def __init__(self, uri):
4852

4953
class SextantePluginTest(unittest.TestCase):
5054
"""Test suite for Sextante QGis plugin"""
55+
56+
def test_createplugin(self):
57+
"""Initialize plugin"""
58+
self.sextanteplugin = SextantePlugin(IFACE)
59+
self.assertIsNotNone(self.sextanteplugin)
60+
61+
def test_sextante_alglist(self):
62+
"""Test alglist"""
63+
self.sextanteplugin = SextantePlugin(IFACE)
64+
self.providerToAlgs = Sextante.algs
65+
self.assertTrue(self.providerToAlgs, "Alg list")
66+
67+
class SextanteProviderTestCase(unittest.TestCase):
68+
def __init__(self, algId, alg, threaded):
69+
self.algId = algId
70+
self.alg = alg
71+
self.threaded = threaded
72+
self.msg = "ALG %s (%s)" % (self.algId, { True: "threaded" , False : "unthreaded"}[threaded])
73+
unittest.TestCase.__init__(self, "test_runalg")
74+
5175
def gen_test_parameters(self, alg):
76+
b = False
5277
for p in alg.parameters:
5378
if isinstance(p, ParameterRaster):
54-
l = QgsRasterLayer('.data/raster', "test raster")
79+
l = QgsRasterLayer('data/raster', "test raster")
5580
l.dataProvider = lambda: DataProviderStub('data/raster')
5681
yield l
5782
elif isinstance(p, ParameterVector):
58-
l = QgsVectorLayer('.data/vector', "test vector")
83+
l = QgsVectorLayer('data/vector', "test vector")
5984
l.dataProvider = lambda: DataProviderStub('data/vector')
6085
yield l
6186
elif isinstance(p, ParameterNumber):
62-
yield p.max
87+
if p.max:
88+
yield p.max
89+
elif p.min:
90+
yield p.min
91+
yield 42
92+
elif isinstance(p, ParameterString):
93+
yield str()
94+
elif isinstance(p, ParameterBoolean):
95+
b = not b
96+
yield b
6397
else:
6498
yield
6599
i = 0;
66100
for o in alg.outputs:
67101
if o.hidden:
68102
continue;
69103
i = i + 1
104+
outbasename = self.msg.replace('/', '-')
70105
if isinstance(o, OutputRaster):
71-
yield 'output%i.tif' % i
106+
yield 'outputs/%s - %i.tif' % (outbasename, i)
72107
elif isinstance(o, OutputVector):
73-
yield 'output%i.shp' % i
108+
yield 'outputs/%s - %i.shp' % (outbasename, i)
74109
else:
75110
yield
76111

77-
def test_0createplugin(self):
78-
"""Initialize plugin"""
79-
self.sextanteplugin = SextantePlugin(IFACE)
80-
self.assertIsNotNone(self.sextanteplugin)
81-
82-
def test_1sextante_alglist(self):
83-
"""Test alglist"""
84-
self.sextanteplugin = SextantePlugin(IFACE)
85-
self.providerToAlgs = Sextante.algs
86-
self.assertTrue(self.providerToAlgs, "Alg list")
87-
88112
def test_runalg(self):
89-
self.sextanteplugin = SextantePlugin(IFACE)
90-
self.providerToAlgs = Sextante.algs
91-
for provider, algs in self.providerToAlgs.items():
92-
if not algs.items():
93-
print "WARINING: %s seems to provide no algs!" % provider
94-
continue
95-
algId, alg = algs.items()[-1]
96-
args = list(self.gen_test_parameters(alg))
97-
print "Alg: ", algId
98-
print alg.parameters, ' => ', args
99-
result = Sextante.runalg(algId, *args)
100-
self.assertIsNotNone(result, "Running directly %s" % algId)
101-
print algId, " ok."
113+
SextanteConfig.setSettingValue(SextanteConfig.USE_THREADS, self.threaded)
114+
args = list(self.gen_test_parameters(self.alg))
115+
print
116+
print self.msg, "Parameters: ", self.alg.parameters, ' => ', args
117+
result = Sextante.runalg(self.algId, *args)
118+
self.assertIsNotNone(result, self.msg)
119+
if not result:
120+
return
121+
for p in result.values():
122+
if isinstance(p, str):
123+
self.assertTrue(os.path.exists(p), "Output %s exists" % p)
124+
125+
def algSuite():
126+
s = unittest.TestSuite()
127+
for provider, algs in Sextante.algs.items():
128+
if not algs.items():
129+
print "WARNING: %s seems to provide no algs!" % provider
130+
continue
131+
algId, alg = algs.items()[-1]
132+
s.addTest(SextanteProviderTestCase(algId, alg, True))
133+
s.addTest(SextanteProviderTestCase(algId, alg, False))
134+
return s
102135

103136
if __name__ == '__main__':
104-
unittest.main()
137+
if not os.path.exists("data/raster") or not os.path.exists("data/vector"):
138+
print "Please install test data under ./data/raster and ./data/vector."
139+
exit(1)
140+
loadSuite = unittest.TestLoader().loadTestsFromTestCase(SextantePluginTest)
141+
unittest.TextTestRunner(verbosity=2).run(loadSuite)
142+
unittest.TextTestRunner(verbosity=2).run(algSuite())
143+

0 commit comments

Comments
 (0)
Please sign in to comment.