[sextante] more tests

This commit is contained in:
Victor Olaya 2013-03-27 00:55:38 +01:00
parent 91fa06265c
commit 72037dc9be
6 changed files with 363 additions and 75 deletions

View File

@ -45,7 +45,7 @@ class AutoincrementalField(GeoAlgorithm):
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT)) vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
vprovider = vlayer.dataProvider() vprovider = vlayer.dataProvider()
fields = vprovider.fields() fields = vprovider.fields()
fields[len(fields)] = QgsField("AUTO", QVariant.Int) fields.append(QgsField("AUTO", QVariant.Int))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs() ) writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs() )
inFeat = QgsFeature() inFeat = QgsFeature()
outFeat = QgsFeature() outFeat = QgsFeature()
@ -58,10 +58,10 @@ class AutoincrementalField(GeoAlgorithm):
nElement += 1 nElement += 1
inGeom = inFeat.geometry() inGeom = inFeat.geometry()
outFeat.setGeometry( inGeom ) outFeat.setGeometry( inGeom )
atMap = inFeat.attributeMap() attrs = inFeat.attributes()
atMap.append(QVariant(nElement)) attrs.append(QVariant(nElement))
outFeat.setAttributeMap( atMap ) outFeat.setAttributes(attrs)
writer.addFeature( outFeat ) writer.addFeature(outFeat)
del writer del writer
def defineCharacteristics(self): def defineCharacteristics(self):

View File

@ -56,7 +56,6 @@ class Dissolve(GeoAlgorithm):
vproviderA = vlayerA.dataProvider() vproviderA = vlayerA.dataProvider()
fields = vproviderA.fields() fields = vproviderA.fields()
writer = self.getOutputFromName(Dissolve.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() ) writer = self.getOutputFromName(Dissolve.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
#inFeat = QgsFeature()
outFeat = QgsFeature() outFeat = QgsFeature()
nElement = 0 nElement = 0
nFeat = vproviderA.featureCount() nFeat = vproviderA.featureCount()

View File

@ -204,12 +204,10 @@ class ScriptAlgorithm(GeoAlgorithm):
ns['progress'] = progress ns['progress'] = progress
for param in self.parameters: for param in self.parameters:
#script += param.name + "=" + param.getValueAsCommandLineParameter() + "\n"
ns[param.name] = param.value ns[param.name] = param.value
for out in self.outputs: for out in self.outputs:
ns[out.name] = out.value ns[out.name] = out.value
#script += out.name + "=" + out.getValueAsCommandLineParameter() + "\n"
script+=self.script script+=self.script
exec(script) in ns exec(script) in ns

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,64 @@
import sextante
import unittest
from sextante.tests.TestData import points, points2, polygons, polygons2, lines, union,\
table
from sextante.core.QGisLayers import QGisLayers
from sextante.core.SextanteUtils import SextanteUtils
class ParametrizedTestCase(unittest.TestCase):
def __init__(self, methodName='runTest', useTempFiles=False):
super(ParametrizedTestCase, self).__init__(methodName)
self.useTempFiles = useTempFiles
@staticmethod
def parametrize(testcase_klass, useTempFiles):
testloader = unittest.TestLoader()
testnames = testloader.getTestCaseNames(testcase_klass)
suite = unittest.TestSuite()
for name in testnames:
suite.addTest(testcase_klass(name, useTempFiles=useTempFiles))
return suite
class RunAlgTest(ParametrizedTestCase):
'''This test takes a reduced set of algorithms and executes them in different ways, changing
parameters such as whether to use thread or not, the output file format, etc.
Basically, it uses some algorithms to test other parts of SEXTANTE, not the algorithms themselves'''
def getOutputFile(self):
if self.useTempFiles:
return None
else:
return SextanteUtils.getTempFilename('shp')
def test_qgiscountpointsinpolygon(self):
outputs=sextante.runalg("qgis:countpointsinpolygon",polygons(),points(),"NUMPOINTS", self.getOutputFile())
output=outputs['OUTPUT']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['ID','POLY_NUM_A','POLY_ST_A','NUMPOINTS']
expectedtypes=['Integer','Real','String','Real']
names=[str(f.name()) for f in fields]
types=[str(f.typeName()) for f in fields]
self.assertEqual(expectednames, names)
self.assertEqual(expectedtypes, types)
features=sextante.getfeatures(layer)
self.assertEqual(2, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["1","1.1","string a","6"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
def suite():
suite = unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(RunAlgTest, False))
suite.addTest(ParametrizedTestCase.parametrize(RunAlgTest, True))
return suite
def runtests():
result = unittest.TestResult()
testsuite = suite()
testsuite.run(result)
return result

View File

@ -0,0 +1,59 @@
import sextante
import unittest
from sextante.tests.TestData import points, points2, polygons, polygons2, lines, union,\
table
from sextante.core.QGisLayers import QGisLayers
class ScriptTest(unittest.TestCase):
def test_scriptcreatetilingfromvectorlayer(self):
outputs=sextante.runalg("script:createtilingfromvectorlayer",union(),10,None)
output=outputs['polygons']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['longitude','latitude']
expectedtypes=['Real','Real']
names=[str(f.name()) for f in fields]
types=[str(f.typeName()) for f in fields]
self.assertEqual(expectednames, names)
self.assertEqual(expectedtypes, types)
features=sextante.getfeatures(layer)
self.assertEqual(10, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["270761.415396242","4458948.29588823"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
wkt='POLYGON((270755.54427424 4458901.23378639,270755.54427424 4458995.35799007,270767.28651824 4458995.35799007,270767.28651824 4458901.23378639,270755.54427424 4458901.23378639))'
self.assertEqual(wkt, str(feature.geometry().exportToWkt()))
def test_scripthexgridfromlayerbounds(self):
outputs=sextante.runalg("script:hexgridfromlayerbounds",polygons(),10,None)
output=outputs['grid']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['longitude','latitude']
expectedtypes=['Real','Real']
names=[str(f.name()) for f in fields]
types=[str(f.typeName()) for f in fields]
self.assertEqual(expectednames, names)
self.assertEqual(expectedtypes, types)
features=sextante.getfeatures(layer)
self.assertEqual(117, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["270765.621834001","4458907.27146471"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
wkt='POLYGON((270771.39533669 4458907.27146471,270768.50858535 4458902.27146471,270762.73508265 4458902.27146471,270759.84833131 4458907.27146471,270762.73508265 4458912.27146471,270768.50858535 4458912.27146471,270771.39533669 4458907.27146471))'
self.assertEqual(wkt, str(feature.geometry().exportToWkt()))
def suite():
suite = unittest.makeSuite(ScriptTest, 'test')
return suite
def runtests():
result = unittest.TestResult()
testsuite = suite()
testsuite.run(result)
return result