@@ -36,12 +36,18 @@ class TestQgsField: public QObject
36
36
void gettersSetters (); // test getters and setters
37
37
void equality (); // test equality operators
38
38
void asVariant (); // test conversion to and from a QVariant
39
+ void displayString ();
40
+ void convertCompatible ();
41
+
39
42
private:
40
43
};
41
44
42
45
void TestQgsField::initTestCase ()
43
46
{
44
-
47
+ // Set up the QSettings environment
48
+ QCoreApplication::setOrganizationName ( " QGIS" );
49
+ QCoreApplication::setOrganizationDomain ( " qgis.org" );
50
+ QCoreApplication::setApplicationName ( " QGIS-TEST" );
45
51
}
46
52
47
53
void TestQgsField::cleanupTestCase ()
@@ -160,5 +166,123 @@ void TestQgsField::asVariant()
160
166
QCOMPARE ( fromVar, original );
161
167
}
162
168
169
+ void TestQgsField::displayString ()
170
+ {
171
+ QgsField stringField ( " string" , QVariant::String, " string" );
172
+
173
+ // test string value
174
+ QString test ( " test string" );
175
+ QCOMPARE ( stringField.displayString ( test ), test );
176
+
177
+ // test NULL
178
+ QSettings s;
179
+ s.setValue ( " qgis/nullValue" , " TEST NULL" );
180
+ QVariant nullString = QVariant ( QVariant::String );
181
+ QCOMPARE ( stringField.displayString ( nullString ), QString ( " TEST NULL" ) );
182
+
183
+ // test int value
184
+ QgsField intField ( " int" , QVariant::String, " int" );
185
+ QCOMPARE ( intField.displayString ( 5 ), QString ( " 5" ) );
186
+ // test NULL int
187
+ QVariant nullInt = QVariant ( QVariant::Int );
188
+ QCOMPARE ( intField.displayString ( nullInt ), QString ( " TEST NULL" ) );
189
+
190
+ // test double value
191
+ QgsField doubleField ( " double" , QVariant::Double, " double" , 10 , 3 );
192
+ QCOMPARE ( doubleField.displayString ( 5.005005 ), QString ( " 5.005" ) );
193
+ // test NULL double
194
+ QVariant nullDouble = QVariant ( QVariant::Double );
195
+ QCOMPARE ( doubleField.displayString ( nullDouble ), QString ( " TEST NULL" ) );
196
+
197
+ }
198
+
199
+ void TestQgsField::convertCompatible ()
200
+ {
201
+ // test string field
202
+ QgsField stringField ( " string" , QVariant::String, " string" );
203
+
204
+ QVariant stringVar ( " test string" );
205
+ QVERIFY ( stringField.convertCompatible ( stringVar ) );
206
+ QCOMPARE ( stringVar.toString ( ), QString ( " test string" ) );
207
+ QVariant nullString = QVariant ( QVariant::String );
208
+ QVERIFY ( stringField.convertCompatible ( nullString ) );
209
+ QCOMPARE ( nullString.type (), QVariant::String );
210
+ QVERIFY ( nullString.isNull () );
211
+ QVariant intVar ( 5 );
212
+ QVERIFY ( stringField.convertCompatible ( intVar ) );
213
+ QCOMPARE ( intVar.type (), QVariant::String );
214
+ QCOMPARE ( intVar, QVariant ( " 5" ) );
215
+ QVariant nullInt = QVariant ( QVariant::Int );
216
+ QVERIFY ( stringField.convertCompatible ( nullInt ) );
217
+ QCOMPARE ( nullInt.type (), QVariant::String );
218
+ QVERIFY ( nullInt.isNull () );
219
+ QVariant doubleVar ( 9.7 );
220
+ QVERIFY ( stringField.convertCompatible ( doubleVar ) );
221
+ QCOMPARE ( doubleVar.type (), QVariant::String );
222
+ QCOMPARE ( doubleVar, QVariant ( " 9.7" ) );
223
+ QVariant nullDouble = QVariant ( QVariant::Double );
224
+ QVERIFY ( stringField.convertCompatible ( nullDouble ) );
225
+ QCOMPARE ( nullDouble.type (), QVariant::String );
226
+ QVERIFY ( nullDouble.isNull () );
227
+
228
+ // test double
229
+ QgsField doubleField ( " double" , QVariant::Double, " double" );
230
+
231
+ stringVar = QVariant ( " test string" );
232
+ QVERIFY ( !doubleField.convertCompatible ( stringVar ) );
233
+ QCOMPARE ( stringVar.type (), QVariant::Double );
234
+ QVERIFY ( stringVar.isNull ( ) );
235
+ nullString = QVariant ( QVariant::String );
236
+ QVERIFY ( doubleField.convertCompatible ( nullString ) );
237
+ QCOMPARE ( nullString.type (), QVariant::Double );
238
+ QVERIFY ( nullString.isNull () );
239
+ intVar = QVariant ( 5 );
240
+ QVERIFY ( doubleField.convertCompatible ( intVar ) );
241
+ QCOMPARE ( intVar.type (), QVariant::Double );
242
+ QCOMPARE ( intVar, QVariant ( 5.0 ) );
243
+ nullInt = QVariant ( QVariant::Int );
244
+ QVERIFY ( doubleField.convertCompatible ( nullInt ) );
245
+ QCOMPARE ( nullInt.type (), QVariant::Double );
246
+ QVERIFY ( nullInt.isNull () );
247
+ doubleVar = QVariant ( 9.7 );
248
+ QVERIFY ( doubleField.convertCompatible ( doubleVar ) );
249
+ QCOMPARE ( doubleVar.type (), QVariant::Double );
250
+ QCOMPARE ( doubleVar, QVariant ( 9.7 ) );
251
+ nullDouble = QVariant ( QVariant::Double );
252
+ QVERIFY ( doubleField.convertCompatible ( nullDouble ) );
253
+ QCOMPARE ( nullDouble.type (), QVariant::Double );
254
+ QVERIFY ( nullDouble.isNull () );
255
+
256
+ // test special rules
257
+
258
+ // conversion of longlong to int
259
+ QgsField intField ( " int" , QVariant::Int, " int" );
260
+ QVariant longlong ( 99999999999999999LL );
261
+ QVERIFY ( !intField.convertCompatible ( longlong ) );
262
+ QCOMPARE ( longlong.type (), QVariant::Int );
263
+ QVERIFY ( longlong.isNull ( ) );
264
+ // conversion of longlong to longlong field
265
+ QgsField longlongField ( " long" , QVariant::LongLong, " longlong" );
266
+ longlong = QVariant ( 99999999999999999LL );
267
+ QVERIFY ( longlongField.convertCompatible ( longlong ) );
268
+ QCOMPARE ( longlong.type (), QVariant::LongLong );
269
+ QCOMPARE ( longlong, QVariant ( 99999999999999999LL ) );
270
+
271
+ // double with precision
272
+ QgsField doubleWithPrecField ( " double" , QVariant::Double, " double" , 10 , 3 );
273
+ doubleVar = QVariant ( 10.12345678 );
274
+ // note - this returns true!
275
+ QVERIFY ( doubleWithPrecField.convertCompatible ( doubleVar ) );
276
+ QCOMPARE ( doubleVar.type (), QVariant::Double );
277
+ QCOMPARE ( doubleVar.toDouble (), 10.123 );
278
+
279
+ // truncating string length
280
+ QgsField stringWithLen ( " string" , QVariant::String, " string" , 3 );
281
+ stringVar = QVariant ( " longstring" );
282
+ QVERIFY ( !stringWithLen.convertCompatible ( stringVar ) );
283
+ QCOMPARE ( stringVar.type (), QVariant::String );
284
+ QCOMPARE ( stringVar.toString (), QString ( " lon" ) );
285
+ }
286
+
163
287
QTEST_MAIN ( TestQgsField )
164
288
#include " testqgsfield.moc"
0 commit comments