195 changes: 195 additions & 0 deletions python/plugins/sextante/tests/AlgTests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
import sextante
import unittest
from sextante.tests.TestData import points, points2, polygons, polygons2, lines, union,\
table
from sextante.core.QGisLayers import QGisLayers

class AlgTests(unittest.TestCase):

def test_qgiscountpointsinpolygon(self):
outputs=sextante.runalg("qgis:countpointsinpolygon",polygons(),points(),"NUMPOINTS",None)
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 test_qgiscountpointsinpolygonweighted(self):
outputs=sextante.runalg("qgis:countpointsinpolygonweighted",polygons(),points(),"PT_NUM_A","NUMPOINTS",None)
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","48.4"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)

def test_qgiscountuniquepointsinpolygon(self):
outputs=sextante.runalg("qgis:countuniquepointsinpolygon", polygons(),points(),"PT_ST_A","NUMPOINTS",None)
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","3"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)

def test_qgisdistancetonearesthub(self):
outputs=sextante.runalg("qgis:distancetonearesthub",points(),points2(),"ID",1,0,None)
output=outputs['SAVENAME']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['ID','PT_NUM_A','PT_ST_A','HubName','HubDist']
expectedtypes=['Integer','Real','String','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(12, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["1","1.1","a","8","16.449754410816"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)

def test_qgismeancoordinates(self):
outputs=sextante.runalg("qgis:meancoordinates",union(),"POLY_NUM_A","ID_2",None)
output=outputs['OUTPUT']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['MEAN_X','MEAN_Y','UID']
expectedtypes=['Real','Real','String']
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(3, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["270814.229197286","4458944.20935905","0"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)

def test_qgissumlinelengths(self):
outputs=sextante.runalg("qgis:sumlinelengths",lines(),polygons(),"LENGTH","COUNT",None)
output=outputs['OUTPUT']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['ID','POLY_NUM_A','POLY_ST_A','LENGTH','COUNT']
expectedtypes=['Integer','Real','String','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(2, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["1","1.1","string a","56.4157223602428","1"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)

def test_qgiscreategrid(self):
outputs=sextante.runalg("qgis:creategrid",10,10,360,180,0,0,0,None)
output=outputs['SAVENAME']
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(56, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["-180","0"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
wkt='LINESTRING(-180.0 -90.0, -180.0 -80.0, -180.0 -70.0, -180.0 -60.0, -180.0 -50.0, -180.0 -40.0, -180.0 -30.0, -180.0 -20.0, -180.0 -10.0, -180.0 0.0, -180.0 10.0, -180.0 20.0, -180.0 30.0, -180.0 40.0, -180.0 50.0, -180.0 60.0, -180.0 70.0, -180.0 80.0, -180.0 90.0)'
self.assertEqual(wkt, str(feature.geometry().exportToWkt()))

def test_qgiscreategridhex(self):
outputs=sextante.runalg("qgis:creategrid",10,10,360,180,0,0,3,None)
output=outputs['SAVENAME']
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(718, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["-174.226497308104","-85"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
wkt='POLYGON((-168.45299462 -85.0,-171.33974596 -90.0,-177.11324865 -90.0,-180.0 -85.0,-177.11324865 -80.0,-171.33974596 -80.0,-168.45299462 -85.0))'
self.assertEqual(wkt, str(feature.geometry().exportToWkt()))

def test_qgispointslayerfromtable(self):
outputs=sextante.runalg("qgis:pointslayerfromtable",table(),"NUM_A","NUM_A",None)
output=outputs['OUTPUT']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['ID','NUM_A','ST_A']
expectedtypes=['Integer','Real','String']
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(8, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["1","1.1","string a"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
wkt='POINT(1.1 1.1)'
self.assertEqual(wkt, str(feature.geometry().exportToWkt()))

def suite():
suite = unittest.makeSuite(AlgTests, 'test')
return suite

def runtests():
result = unittest.TestResult()
testsuite = suite()
testsuite.run(result)
return result

70 changes: 70 additions & 0 deletions python/plugins/sextante/tests/ModelerAlgorithmTest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import unittest
import sextante
from sextante.tests.TestData import points, points2, polygons, polygons2, lines, union,\
table, raster
from sextante.core.QGisLayers import QGisLayers
import os
from osgeo import gdal
from osgeo.gdalconst import GA_ReadOnly

class ModelerAlgorithmTest(unittest.TestCase):

def testCreateModel(self):
pass

def testRemoveParameter(self):
pass

def testRemoveAlgorithm(self):
pass


def test_modelersagagrass(self):
outputs=sextante.runalg("modeler:sagagrass",points(),None)
output=outputs['CENTROIDS_ALG1']
layer=QGisLayers.getObjectFromUri(output, True)
fields=layer.pendingFields()
expectednames=['CAT']
expectedtypes=['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(12, len(features))
feature=features.next()
attrs=feature.attributes()
expectedvalues=["1"]
values=[str(attr.toString()) for attr in attrs]
self.assertEqual(expectedvalues, values)
wkt='POINT(270839.65586926 4458983.16267036)'
self.assertEqual(wkt, str(feature.geometry().exportToWkt()))

def test_modelersimplemodel(self):
outputs=sextante.runalg("modeler:simplemodel",raster(),None)
output=outputs['SLOPE_ALG0']
self.assertTrue(os.path.isfile(output))
dataset=gdal.Open(output, GA_ReadOnly)
strhash=hash(str(dataset.ReadAsArray(0).tolist()))
self.assertEqual(strhash,1891122097)

def test_modelerfieldautoextent(self):
outputs=sextante.runalg("modeler:fieldautoextent",polygons(),"POLY_NUM_A",None)
output=outputs['USER_GRID_ALG0']
self.assertTrue(os.path.isfile(output))
dataset=gdal.Open(output, GA_ReadOnly)
strhash=hash(str(dataset.ReadAsArray(0).tolist()))
self.assertEqual(strhash,2026100494)



def suite():
suite = unittest.makeSuite(ModelerAlgorithmTest, 'test')
return suite

def runtests():
result = unittest.TestResult()
testsuite = suite()
testsuite.run(result)
return result

Empty file.
15 changes: 9 additions & 6 deletions python/plugins/sextante/tests/ParametersTest.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import unittest
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterCrs import ParameterCrs
from sextante.parameters.ParameterExtent import ParameterExtent

class ParametersTest(unittest.TestCase):

def testParameterNumbert(self):
def testParameterNumber(self):
param = ParameterNumber("name", "desc", 0, 10)
assert not param.setValue("wrongvalue")
assert param.value is None
Expand All @@ -25,7 +26,7 @@ def testParameterNumbert(self):

def testParameterCRS(self):
param = ParameterCrs("name", "desc")
assert not param.setValue("EPSG:12003")
assert param.setValue("EPSG:12003")
assert param.value == "EPSG:12003"
assert param.setValue(None)
assert param.value == param.default
Expand All @@ -37,13 +38,15 @@ def testParameterCRS(self):
assert param.name == param2.name

def testParameterExtent(self):
param = ParameterCrs("name", "desc")
assert not param.setValue("EPSG:12003")
assert param.value == "EPSG:12003"
param = ParameterExtent("name", "desc")
assert not param.setValue("0,2,0")
assert not param.setValue("0,2,0,a")
assert not param.setValue("0,2,2,4")
assert param.value == "0,2,2,4"
assert param.setValue(None)
assert param.value == param.default
s = param.serialize()
param2 = ParameterCrs()
param2 = ParameterExtent()
param2.deserialize(s)
assert param.default == param2.default
assert param.description == param2.description
Expand Down
9 changes: 9 additions & 0 deletions python/plugins/sextante/tests/TestData.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@

dataFolder = os.path.join(os.path.dirname(__file__), 'data')


def table():
return os.path.join(dataFolder, "table.dbf")

def points():
return os.path.join(dataFolder, "points.shp")

def points2():
return os.path.join(dataFolder, "points2.shp")

def raster():
return os.path.join(dataFolder, "raster.tif")

Expand All @@ -23,8 +30,10 @@ def union():

def loadTestData():
QGisLayers.load(points(), "points");
QGisLayers.load(points(), "points2");
QGisLayers.load(polygons(), "polygons");
QGisLayers.load(polygons2(), "polygons2");
QGisLayers.load(lines(), "lines");
QGisLayers.load(raster(), "raster");
QGisLayers.load(table(), "table");
QGisLayers.load(union(), "union");
5 changes: 0 additions & 5 deletions python/plugins/sextante/tests/WritersTest.py

This file was deleted.

Binary file added python/plugins/sextante/tests/data/points2.dbf
Binary file not shown.
1 change: 1 addition & 0 deletions python/plugins/sextante/tests/data/points2.prj
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PROJCS["ED50_UTM_zone_30N",GEOGCS["GCS_European_1950",DATUM["D_European_1950",SPHEROID["International_1924",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
1 change: 1 addition & 0 deletions python/plugins/sextante/tests/data/points2.qpj
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
PROJCS["ED50 / UTM zone 30N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY["EPSG","6230"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","23030"]]
Binary file added python/plugins/sextante/tests/data/points2.shp
Binary file not shown.
Binary file added python/plugins/sextante/tests/data/points2.shx
Binary file not shown.
Binary file added python/plugins/sextante/tests/data/table.dbf
Binary file not shown.
Binary file modified python/plugins/sextante/tests/data/union.dbf
Binary file not shown.