27
27
28
28
sys .path .append ('/usr/share/qgis/python/plugins' )
29
29
30
+ import itertools
30
31
from qgis .gui import QgsMapCanvas
31
32
from qgis .core import *
32
33
from qgis_interface import QgisInterface
38
39
from sextante .parameters .ParameterRaster import ParameterRaster
39
40
from sextante .parameters .ParameterVector import ParameterVector
40
41
from sextante .parameters .ParameterNumber import ParameterNumber
42
+ from sextante .parameters .ParameterString import ParameterString
43
+ from sextante .parameters .ParameterBoolean import ParameterBoolean
41
44
from sextante .outputs .OutputRaster import OutputRaster
42
45
from sextante .outputs .OutputVector import OutputVector
46
+ from sextante .core .SextanteConfig import SextanteConfig
43
47
QGISAPP , CANVAS , IFACE , PARENT = getQgisTestApp ()
44
48
45
49
class DataProviderStub :
@@ -48,57 +52,92 @@ def __init__(self, uri):
48
52
49
53
class SextantePluginTest (unittest .TestCase ):
50
54
"""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
+
51
75
def gen_test_parameters (self , alg ):
76
+ b = False
52
77
for p in alg .parameters :
53
78
if isinstance (p , ParameterRaster ):
54
- l = QgsRasterLayer ('. data/raster' , "test raster" )
79
+ l = QgsRasterLayer ('data/raster' , "test raster" )
55
80
l .dataProvider = lambda : DataProviderStub ('data/raster' )
56
81
yield l
57
82
elif isinstance (p , ParameterVector ):
58
- l = QgsVectorLayer ('. data/vector' , "test vector" )
83
+ l = QgsVectorLayer ('data/vector' , "test vector" )
59
84
l .dataProvider = lambda : DataProviderStub ('data/vector' )
60
85
yield l
61
86
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
63
97
else :
64
98
yield
65
99
i = 0 ;
66
100
for o in alg .outputs :
67
101
if o .hidden :
68
102
continue ;
69
103
i = i + 1
104
+ outbasename = self .msg .replace ('/' , '-' )
70
105
if isinstance (o , OutputRaster ):
71
- yield 'output% i.tif' % i
106
+ yield 'outputs/%s - % i.tif' % ( outbasename , i )
72
107
elif isinstance (o , OutputVector ):
73
- yield 'output% i.shp' % i
108
+ yield 'outputs/%s - % i.shp' % ( outbasename , i )
74
109
else :
75
110
yield
76
111
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
-
88
112
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
102
135
103
136
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