-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[sextante] added tools to ease creating unit test for algorithms
- Loading branch information
Showing
3 changed files
with
114 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
from sextante.core.Sextante import Sextante | ||
from sextante.outputs.OutputNumber import OutputNumber | ||
from sextante.outputs.OutputString import OutputString | ||
from sextante.outputs.OutputRaster import OutputRaster | ||
from osgeo import gdal | ||
from osgeo.gdalconst import GA_ReadOnly | ||
from sextante.core.QGisLayers import QGisLayers | ||
from sextante.outputs.OutputVector import OutputVector | ||
|
||
def createTest(item): | ||
s = "" | ||
tokens = item.entry.text[len("sextante.runalg("):-1].split(",") | ||
cmdname = tokens[0][1:-1]; | ||
methodname = "test_" + cmdname.replace(":","") | ||
s += "def " + methodname + "():\n" | ||
alg = Sextante.getAlgorithm(cmdname) | ||
execcommand = "sextante.runalg(" | ||
i = 0 | ||
for token in tokens: | ||
if i < alg.getVisibleParametersCount(): | ||
execcommand+=token + "," | ||
else: | ||
execcommand+="None," | ||
i+=1 | ||
s += "\toutputs=" + execcommand[:-1] + ")\n" | ||
|
||
i = -1 * len(alg.outputs) | ||
for out in alg.outputs: | ||
filename = tokens[i][1:-1] | ||
s+="\toutput=outputs['" + out.name + "']\n" | ||
if isinstance(out, (OutputNumber, OutputString)): | ||
s+="self.assertTrue(" + str(out) + ", output)\n" | ||
if isinstance(out, OutputRaster): | ||
dataset = gdal.Open(filename, GA_ReadOnly) | ||
array = dataset.ReadAsArray(1) | ||
s+="\tself.assertTrue(os.path.isfile(output))\n" | ||
s+="\tself.assertEqual(hashraster(output)," + str(hash(array)) + ")\n" | ||
if isinstance(out, OutputVector): | ||
layer = Sextante.getObject(filename) | ||
fields = layer.pendingFields() | ||
s+="\tlayer=sextante.getobject(output)\n" | ||
s+="\tfields=layer.pendingFields()\n" | ||
s+="\texpectednames=[" + ",".join([str(f.name()) for f in fields]) + "]\n" | ||
s+="\texpectedtypes=[" + ",".join([str(f.typeName()) for f in fields]) + "]\n" | ||
s+="\tnames=[str(f.name()) for f in fields]\n" | ||
s+="\ttypes=[str(f.typeName()) for f in fields]\n" | ||
s+="\tself.assertEqual(exceptednames, names)\n" | ||
s+="\tself.assertEqual(exceptedtypes, types)\n" | ||
features = QGisLayers.features(layer) | ||
numfeat = len(features) | ||
s+="\tfeatures=sextante.getfeatures(layer))\n" | ||
s+="\tself.assertEqual(" + str(numfeat) + ", len(features)\n" | ||
if numfeat > 0: | ||
feature = features.next() | ||
attrs = feature.attributes() | ||
s+="\tfeature=features.next()\n" | ||
s+="\tattrs=feature.attributes()\n" | ||
s+="\texpectedvalues=[" + ",".join([str(attr.toString()) for attr in attrs]) + "]\n" | ||
s+="\tvalues=[str(attr.toString()) for attr in attrs]\n" | ||
s+="\tself.assertEqual(exceptedtypes, types)\n" | ||
|
||
dlg = ShowTestDialog(s) | ||
dlg.exec_() | ||
|
||
from PyQt4 import QtCore, QtGui | ||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
|
||
class ShowTestDialog(QtGui.QDialog): | ||
def __init__(self, s): | ||
QtGui.QDialog.__init__(self) | ||
self.setModal(True) | ||
self.resize(600,400) | ||
self.setWindowTitle("Unit test") | ||
layout = QVBoxLayout() | ||
self.text = QtGui.QTextEdit() | ||
self.text.setEnabled(True) | ||
self.text.setText(s) | ||
layout.addWidget(self.text) | ||
self.setLayout(layout) | ||
QtCore.QMetaObject.connectSlotsByName(self) | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters