@@ -147,6 +147,7 @@ class TestProcessingGui : public QObject
147
147
void testCrsWrapper ();
148
148
void testNumericWrapperDouble ();
149
149
void testNumericWrapperInt ();
150
+ void testDistanceWrapper ();
150
151
};
151
152
152
153
void TestProcessingGui::initTestCase ()
@@ -1149,5 +1150,166 @@ void TestProcessingGui::testNumericWrapperInt()
1149
1150
testWrapper ( QgsProcessingGui::Modeler );
1150
1151
}
1151
1152
1153
+ void TestProcessingGui::testDistanceWrapper ()
1154
+ {
1155
+ QgsProcessingParameterDistance param ( QStringLiteral ( " distance" ), QStringLiteral ( " distance" ) );
1156
+
1157
+ // standard wrapper
1158
+ QgsProcessingDistanceWidgetWrapper wrapper ( ¶m );
1159
+
1160
+ QgsProcessingContext context;
1161
+ QWidget *w = wrapper.createWrappedWidget ( context );
1162
+
1163
+ QSignalSpy spy ( &wrapper, &QgsProcessingDistanceWidgetWrapper::widgetValueHasChanged );
1164
+ wrapper.setWidgetValue ( 55.5 , context );
1165
+ QCOMPARE ( spy.count (), 1 );
1166
+ QCOMPARE ( wrapper.widgetValue ().toDouble (), 55.5 );
1167
+ QCOMPARE ( wrapper.mDoubleSpinBox ->value (), 55.5 );
1168
+ wrapper.setWidgetValue ( -34.0 , context );
1169
+ QCOMPARE ( spy.count (), 2 );
1170
+ QCOMPARE ( wrapper.widgetValue ().toDouble (), -34.0 );
1171
+ QCOMPARE ( wrapper.mDoubleSpinBox ->value (), -34.0 );
1172
+
1173
+ QLabel *l = wrapper.createWrappedLabel ();
1174
+ QVERIFY ( l );
1175
+ QCOMPARE ( l->text (), QStringLiteral ( " distance" ) );
1176
+ QCOMPARE ( l->toolTip (), param.toolTip () );
1177
+ delete l;
1178
+
1179
+ // check signal
1180
+ wrapper.mDoubleSpinBox ->setValue ( 43.0 );
1181
+ QCOMPARE ( spy.count (), 3 );
1182
+
1183
+ // test unit handling
1184
+ w->show ();
1185
+
1186
+ // crs values
1187
+ wrapper.setUnitParameterValue ( QStringLiteral ( " EPSG:3111" ) );
1188
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " meters" ) );
1189
+ QVERIFY ( !wrapper.mWarningLabel ->isVisible () );
1190
+ QVERIFY ( wrapper.mUnitsCombo ->isVisible () );
1191
+ QVERIFY ( !wrapper.mLabel ->isVisible () );
1192
+ QCOMPARE ( wrapper.mUnitsCombo ->currentData ().toInt (), static_cast < int >( QgsUnitTypes::DistanceMeters ) );
1193
+
1194
+ wrapper.setUnitParameterValue ( QStringLiteral ( " EPSG:4326" ) );
1195
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " degrees" ) );
1196
+ QVERIFY ( wrapper.mWarningLabel ->isVisible () );
1197
+ QVERIFY ( !wrapper.mUnitsCombo ->isVisible () );
1198
+ QVERIFY ( wrapper.mLabel ->isVisible () );
1199
+
1200
+ wrapper.setUnitParameterValue ( QgsCoordinateReferenceSystem ( QStringLiteral ( " EPSG:3111" ) ) );
1201
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " meters" ) );
1202
+ QVERIFY ( !wrapper.mWarningLabel ->isVisible () );
1203
+ QVERIFY ( wrapper.mUnitsCombo ->isVisible () );
1204
+ QVERIFY ( !wrapper.mLabel ->isVisible () );
1205
+ QCOMPARE ( wrapper.mUnitsCombo ->currentData ().toInt (), static_cast < int >( QgsUnitTypes::DistanceMeters ) );
1206
+
1207
+ wrapper.setUnitParameterValue ( QgsCoordinateReferenceSystem ( QStringLiteral ( " EPSG:4326" ) ) );
1208
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " degrees" ) );
1209
+ QVERIFY ( wrapper.mWarningLabel ->isVisible () );
1210
+ QVERIFY ( !wrapper.mUnitsCombo ->isVisible () );
1211
+ QVERIFY ( wrapper.mLabel ->isVisible () );
1212
+
1213
+ // layer values
1214
+ std::unique_ptr< QgsVectorLayer > vl = qgis::make_unique< QgsVectorLayer >( QStringLiteral ( " Polygon?crs=epsg:3111&field=pk:int" ), QStringLiteral ( " vl" ), QStringLiteral ( " memory" ) );
1215
+ wrapper.setUnitParameterValue ( QVariant::fromValue ( vl.get () ) );
1216
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " meters" ) );
1217
+ QVERIFY ( !wrapper.mWarningLabel ->isVisible () );
1218
+ QVERIFY ( wrapper.mUnitsCombo ->isVisible () );
1219
+ QVERIFY ( !wrapper.mLabel ->isVisible () );
1220
+ QCOMPARE ( wrapper.mUnitsCombo ->currentData ().toInt (), static_cast < int >( QgsUnitTypes::DistanceMeters ) );
1221
+
1222
+ std::unique_ptr< QgsVectorLayer > vl2 = qgis::make_unique< QgsVectorLayer >( QStringLiteral ( " Polygon?crs=epsg:4326&field=pk:int" ), QStringLiteral ( " vl" ), QStringLiteral ( " memory" ) );
1223
+ wrapper.setUnitParameterValue ( QVariant::fromValue ( vl2.get () ) );
1224
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " degrees" ) );
1225
+ QVERIFY ( wrapper.mWarningLabel ->isVisible () );
1226
+ QVERIFY ( !wrapper.mUnitsCombo ->isVisible () );
1227
+ QVERIFY ( wrapper.mLabel ->isVisible () );
1228
+
1229
+ // unresolvable values
1230
+ wrapper.setUnitParameterValue ( QStringLiteral ( " blah" ) );
1231
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " <unknown>" ) );
1232
+ QVERIFY ( !wrapper.mWarningLabel ->isVisible () );
1233
+ QVERIFY ( !wrapper.mUnitsCombo ->isVisible () );
1234
+ QVERIFY ( wrapper.mLabel ->isVisible () );
1235
+
1236
+ // resolvable text value
1237
+ const QString id = vl->id ();
1238
+ QgsProject::instance ()->addMapLayer ( vl.release () );
1239
+ context.setProject ( QgsProject::instance () );
1240
+
1241
+ TestProcessingContextGenerator generator ( context );
1242
+ wrapper.registerProcessingContextGenerator ( &generator );
1243
+ wrapper.setUnitParameterValue ( id );
1244
+ QCOMPARE ( wrapper.mLabel ->text (), QStringLiteral ( " meters" ) );
1245
+ QVERIFY ( !wrapper.mWarningLabel ->isVisible () );
1246
+ QVERIFY ( wrapper.mUnitsCombo ->isVisible () );
1247
+ QVERIFY ( !wrapper.mLabel ->isVisible () );
1248
+ QCOMPARE ( wrapper.mUnitsCombo ->currentData ().toInt (), static_cast < int >( QgsUnitTypes::DistanceMeters ) );
1249
+
1250
+ // using unit choice
1251
+ wrapper.setParameterValue ( 5 , context );
1252
+ QCOMPARE ( wrapper.parameterValue ().toDouble (), 5.0 );
1253
+ wrapper.mUnitsCombo ->setCurrentIndex ( wrapper.mUnitsCombo ->findData ( QgsUnitTypes::DistanceKilometers ) );
1254
+ QCOMPARE ( wrapper.parameterValue ().toDouble (), 5000.0 );
1255
+ wrapper.setParameterValue ( 2 , context );
1256
+ QCOMPARE ( wrapper.parameterValue ().toDouble (), 2000.0 );
1257
+
1258
+ wrapper.setUnitParameterValue ( id );
1259
+ QCOMPARE ( wrapper.parameterValue ().toDouble (), 2 );
1260
+ wrapper.setParameterValue ( 5 , context );
1261
+ QCOMPARE ( wrapper.parameterValue ().toDouble (), 5.0 );
1262
+
1263
+ delete w;
1264
+
1265
+ // batch wrapper
1266
+ QgsProcessingDistanceWidgetWrapper wrapperB ( ¶m, QgsProcessingGui::Batch );
1267
+
1268
+ w = wrapperB.createWrappedWidget ( context );
1269
+ QSignalSpy spy2 ( &wrapperB, &QgsProcessingDistanceWidgetWrapper::widgetValueHasChanged );
1270
+ wrapperB.setWidgetValue ( 34 , context );
1271
+ QCOMPARE ( spy2.count (), 1 );
1272
+ QCOMPARE ( wrapperB.widgetValue ().toDouble (), 34.0 );
1273
+ QCOMPARE ( wrapperB.mDoubleSpinBox ->value (), 34.0 );
1274
+ wrapperB.setWidgetValue ( -57 , context );
1275
+ QCOMPARE ( spy2.count (), 2 );
1276
+ QCOMPARE ( wrapperB.widgetValue ().toDouble (), -57.0 );
1277
+ QCOMPARE ( wrapperB.mDoubleSpinBox ->value (), -57.0 );
1278
+
1279
+ // check signal
1280
+ static_cast < QgsDoubleSpinBox * >( w )->setValue ( 29 );
1281
+ QCOMPARE ( spy2.count (), 3 );
1282
+
1283
+ // should be no label in batch mode
1284
+ QVERIFY ( !wrapperB.createWrappedLabel () );
1285
+ delete w;
1286
+
1287
+ // modeler wrapper
1288
+ QgsProcessingDistanceWidgetWrapper wrapperM ( ¶m, QgsProcessingGui::Modeler );
1289
+
1290
+ w = wrapperM.createWrappedWidget ( context );
1291
+ QSignalSpy spy3 ( &wrapperM, &QgsProcessingDistanceWidgetWrapper::widgetValueHasChanged );
1292
+ wrapperM.setWidgetValue ( 29 , context );
1293
+ QCOMPARE ( wrapperM.widgetValue ().toDouble (), 29 );
1294
+ QCOMPARE ( spy3.count (), 1 );
1295
+ QCOMPARE ( wrapperM.mDoubleSpinBox ->value (), 29 );
1296
+ wrapperM.setWidgetValue ( -29 , context );
1297
+ QCOMPARE ( wrapperM.widgetValue ().toDouble (), -29 );
1298
+ QCOMPARE ( spy3.count (), 2 );
1299
+ QCOMPARE ( wrapperM.mDoubleSpinBox ->value (), -29 );
1300
+
1301
+ // check signal
1302
+ wrapperM.mDoubleSpinBox ->setValue ( 33 );
1303
+ QCOMPARE ( spy3.count (), 3 );
1304
+
1305
+ // should be a label in modeler mode
1306
+ l = wrapperM.createWrappedLabel ();
1307
+ QVERIFY ( l );
1308
+ QCOMPARE ( l->text (), QStringLiteral ( " distance" ) );
1309
+ QCOMPARE ( l->toolTip (), param.toolTip () );
1310
+ delete w;
1311
+ delete l;
1312
+ }
1313
+
1152
1314
QGSTEST_MAIN ( TestProcessingGui )
1153
1315
#include " testprocessinggui.moc"
0 commit comments