2727
2828sys .path .append ('/usr/share/qgis/python/plugins' )
2929
30+ import itertools
3031from qgis .gui import QgsMapCanvas
3132from qgis .core import *
3233from qgis_interface import QgisInterface
3839from sextante .parameters .ParameterRaster import ParameterRaster
3940from sextante .parameters .ParameterVector import ParameterVector
4041from sextante .parameters .ParameterNumber import ParameterNumber
42+ from sextante .parameters .ParameterString import ParameterString
43+ from sextante .parameters .ParameterBoolean import ParameterBoolean
4144from sextante .outputs .OutputRaster import OutputRaster
4245from sextante .outputs .OutputVector import OutputVector
46+ from sextante .core .SextanteConfig import SextanteConfig
4347QGISAPP , CANVAS , IFACE , PARENT = getQgisTestApp ()
4448
4549class DataProviderStub :
@@ -48,57 +52,92 @@ def __init__(self, uri):
4852
4953class 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
103136if __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