Skip to content

Commit c119c28

Browse files
committed
Add basic unit tests for constructing processing widget wrappers
1 parent 9882e4f commit c119c28

File tree

3 files changed

+95
-8
lines changed

3 files changed

+95
-8
lines changed

python/plugins/processing/gui/ExtentSelectionPanel.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,14 @@ def __init__(self, dialog, param):
6161

6262
self.btnSelect.clicked.connect(self.selectExtent)
6363

64-
canvas = iface.mapCanvas()
65-
self.prevMapTool = canvas.mapTool()
66-
self.tool = RectangleMapTool(canvas)
67-
self.tool.rectangleCreated.connect(self.updateExtent)
64+
if iface is not None:
65+
canvas = iface.mapCanvas()
66+
self.prevMapTool = canvas.mapTool()
67+
self.tool = RectangleMapTool(canvas)
68+
self.tool.rectangleCreated.connect(self.updateExtent)
69+
else:
70+
self.prevMapTool = None
71+
self.tool = None
6872

6973
if param.defaultValue() is not None:
7074
context = createContext()

python/plugins/processing/gui/PointSelectionPanel.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,15 @@ def __init__(self, dialog, default=None):
4949

5050
self.dialog = dialog
5151

52-
canvas = iface.mapCanvas()
53-
self.prevMapTool = canvas.mapTool()
52+
if iface is not None:
53+
canvas = iface.mapCanvas()
54+
self.prevMapTool = canvas.mapTool()
5455

55-
self.tool = PointMapTool(canvas)
56-
self.tool.canvasClicked.connect(self.updatePoint)
56+
self.tool = PointMapTool(canvas)
57+
self.tool.canvasClicked.connect(self.updatePoint)
58+
else:
59+
self.prevMapTool = None
60+
self.tool = None
5761

5862
if default:
5963
tokens = str(default).split(',')

python/plugins/processing/tests/GuiTest.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
from qgis.core import QgsApplication
3030

3131
from processing.gui.AlgorithmDialog import AlgorithmDialog
32+
from processing.gui.BatchAlgorithmDialog import BatchAlgorithmDialog
33+
from processing.modeler.ModelerParametersDialog import ModelerParametersDialog
34+
from processing.gui.wrappers import *
3235

3336
start_app()
3437

@@ -41,5 +44,81 @@ def testCreation(self):
4144
self.assertEqual(a.mainWidget.alg, alg)
4245

4346

47+
class WrappersTest(unittest.TestCase):
48+
49+
def checkConstructWrapper(self, param, expected_wrapper_class):
50+
alg = QgsApplication.processingRegistry().algorithmById('native:centroids')
51+
52+
# algorithm dialog
53+
dlg = AlgorithmDialog(alg)
54+
wrapper = WidgetWrapperFactory.create_wrapper_from_class(param, dlg)
55+
self.assertIsNotNone(wrapper)
56+
self.assertIsInstance(wrapper, expected_wrapper_class)
57+
self.assertEqual(wrapper.dialog, dlg)
58+
self.assertIsNotNone(wrapper.widget)
59+
60+
# batch dialog
61+
dlg = BatchAlgorithmDialog(alg)
62+
wrapper = WidgetWrapperFactory.create_wrapper_from_class(param, dlg)
63+
self.assertIsNotNone(wrapper)
64+
self.assertIsInstance(wrapper, expected_wrapper_class)
65+
self.assertEqual(wrapper.dialog, dlg)
66+
self.assertIsNotNone(wrapper.widget)
67+
68+
# modeler dialog
69+
model = QgsProcessingModelAlgorithm()
70+
dlg = ModelerParametersDialog(alg, model)
71+
wrapper = WidgetWrapperFactory.create_wrapper_from_class(param, dlg)
72+
self.assertIsNotNone(wrapper)
73+
self.assertIsInstance(wrapper, expected_wrapper_class)
74+
self.assertEqual(wrapper.dialog, dlg)
75+
self.assertIsNotNone(wrapper.widget)
76+
77+
def testBoolean(self):
78+
self.checkConstructWrapper(QgsProcessingParameterBoolean('test'), BooleanWidgetWrapper)
79+
80+
def testCrs(self):
81+
self.checkConstructWrapper(QgsProcessingParameterCrs('test'), CrsWidgetWrapper)
82+
83+
def testExtent(self):
84+
self.checkConstructWrapper(QgsProcessingParameterExtent('test'), ExtentWidgetWrapper)
85+
86+
def testPoint(self):
87+
self.checkConstructWrapper(QgsProcessingParameterPoint('test'), PointWidgetWrapper)
88+
89+
def testFile(self):
90+
self.checkConstructWrapper(QgsProcessingParameterFile('test'), FileWidgetWrapper)
91+
92+
def testMultiInput(self):
93+
self.checkConstructWrapper(QgsProcessingParameterMultipleLayers('test'), MultipleInputWidgetWrapper)
94+
95+
def testRasterInput(self):
96+
self.checkConstructWrapper(QgsProcessingParameterRasterLayer('test'), RasterWidgetWrapper)
97+
98+
def testEnum(self):
99+
self.checkConstructWrapper(QgsProcessingParameterEnum('test'), SelectionWidgetWrapper)
100+
101+
def testString(self):
102+
self.checkConstructWrapper(QgsProcessingParameterString('test'), StringWidgetWrapper)
103+
104+
def testExpression(self):
105+
self.checkConstructWrapper(QgsProcessingParameterExpression('test'), ExpressionWidgetWrapper)
106+
107+
def testVector(self):
108+
self.checkConstructWrapper(QgsProcessingParameterVectorLayer('test'), TableWidgetWrapper)
109+
110+
def testField(self):
111+
self.checkConstructWrapper(QgsProcessingParameterField('test'), TableFieldWidgetWrapper)
112+
113+
def testSource(self):
114+
self.checkConstructWrapper(QgsProcessingParameterFeatureSource('test'), VectorWidgetWrapper)
115+
116+
def testSource(self):
117+
self.checkConstructWrapper(QgsProcessingParameterBand('test'), BandWidgetWrapper)
118+
119+
def testMapLayer(self):
120+
self.checkConstructWrapper(QgsProcessingParameterMapLayer('test'), MapLayerWidgetWrapper)
121+
122+
44123
if __name__ == '__main__':
45124
unittest.main()

0 commit comments

Comments
 (0)