@@ -498,6 +498,44 @@ void TestQgsField::convertCompatible()
498
498
QCOMPARE ( longlong.type (), QVariant::LongLong );
499
499
QCOMPARE ( longlong, QVariant ( 99999999999999999LL ) );
500
500
501
+ // string representation of an int
502
+ QVariant stringInt ( " 123456" );
503
+ QVERIFY ( intField.convertCompatible ( stringInt ) );
504
+ QCOMPARE ( stringInt.type (), QVariant::Int );
505
+ QCOMPARE ( stringInt, QVariant ( 123456 ) );
506
+ // now with group separator for english locale
507
+ stringInt = QVariant ( " 123,456" );
508
+ QVERIFY ( intField.convertCompatible ( stringInt ) );
509
+ QCOMPARE ( stringInt.type (), QVariant::Int );
510
+ QCOMPARE ( stringInt, QVariant ( " 123456" ) );
511
+
512
+ // string representation of a longlong
513
+ QVariant stringLong ( " 99999999999999999" );
514
+ QVERIFY ( longlongField.convertCompatible ( stringLong ) );
515
+ QCOMPARE ( stringLong.type (), QVariant::LongLong );
516
+ QCOMPARE ( stringLong, QVariant ( 99999999999999999LL ) );
517
+ // now with group separator for english locale
518
+ stringLong = QVariant ( " 99,999,999,999,999,999" );
519
+ QVERIFY ( longlongField.convertCompatible ( stringLong ) );
520
+ QCOMPARE ( stringLong.type (), QVariant::LongLong );
521
+ QCOMPARE ( stringLong, QVariant ( 99999999999999999LL ) );
522
+
523
+
524
+ // string representation of a double
525
+ QVariant stringDouble ( " 123456.012345" );
526
+ QVERIFY ( doubleField.convertCompatible ( stringDouble ) );
527
+ QCOMPARE ( stringDouble.type (), QVariant::Double );
528
+ QCOMPARE ( stringDouble, QVariant ( 123456.012345 ) );
529
+ // now with group separator for english locale
530
+ stringDouble = QVariant ( " 1,223,456.012345" );
531
+ QVERIFY ( doubleField.convertCompatible ( stringDouble ) );
532
+ QCOMPARE ( stringDouble.type (), QVariant::Double );
533
+ QCOMPARE ( stringDouble, QVariant ( 1223456.012345 ) );
534
+ // This should not convert
535
+ stringDouble = QVariant ( " 1.223.456,012345" );
536
+ QVERIFY ( ! doubleField.convertCompatible ( stringDouble ) );
537
+
538
+
501
539
// double with precision
502
540
QgsField doubleWithPrecField ( QStringLiteral ( " double" ), QVariant::Double, QStringLiteral ( " double" ), 10 , 3 );
503
541
doubleVar = QVariant ( 10.12345678 );
@@ -513,12 +551,61 @@ void TestQgsField::convertCompatible()
513
551
QCOMPARE ( stringVar.type (), QVariant::String );
514
552
QCOMPARE ( stringVar.toString (), QString ( " lon" ) );
515
553
554
+
555
+ // ///////////////////////////////////////////////////////
556
+ // German locale tests
557
+
516
558
// double with ',' as decimal separator for German locale
517
559
QLocale::setDefault ( QLocale::German );
518
560
QVariant doubleCommaVar ( " 1,2345" );
519
561
QVERIFY ( doubleField.convertCompatible ( doubleCommaVar ) );
520
562
QCOMPARE ( doubleCommaVar.type (), QVariant::Double );
521
563
QCOMPARE ( doubleCommaVar.toString (), QString ( " 1.2345" ) );
564
+
565
+ // string representation of an int
566
+ stringInt = QVariant ( " 123456" );
567
+ QVERIFY ( intField.convertCompatible ( stringInt ) );
568
+ QCOMPARE ( stringInt.type (), QVariant::Int );
569
+ QCOMPARE ( stringInt, QVariant ( 123456 ) );
570
+ // now with group separator for german locale
571
+ stringInt = QVariant ( " 123.456" );
572
+ QVERIFY ( intField.convertCompatible ( stringInt ) );
573
+ QCOMPARE ( stringInt.type (), QVariant::Int );
574
+ QCOMPARE ( stringInt, QVariant ( " 123456" ) );
575
+
576
+ // string representation of a longlong
577
+ stringLong = QVariant ( " 99999999999999999" );
578
+ QVERIFY ( longlongField.convertCompatible ( stringLong ) );
579
+ QCOMPARE ( stringLong.type (), QVariant::LongLong );
580
+ QCOMPARE ( stringLong, QVariant ( 99999999999999999LL ) );
581
+ // now with group separator for german locale
582
+ stringLong = QVariant ( " 99.999.999.999.999.999" );
583
+ QVERIFY ( longlongField.convertCompatible ( stringLong ) );
584
+ QCOMPARE ( stringLong.type (), QVariant::LongLong );
585
+ QCOMPARE ( stringLong, QVariant ( 99999999999999999LL ) );
586
+
587
+ // string representation of a double
588
+ stringDouble = QVariant ( " 123456,012345" );
589
+ QVERIFY ( doubleField.convertCompatible ( stringDouble ) );
590
+ QCOMPARE ( stringDouble.type (), QVariant::Double );
591
+ QCOMPARE ( stringDouble, QVariant ( 123456.012345 ) );
592
+ // For doubles we also want to accept dot as a decimal point
593
+ stringDouble = QVariant ( " 123456.012345" );
594
+ QVERIFY ( doubleField.convertCompatible ( stringDouble ) );
595
+ QCOMPARE ( stringDouble.type (), QVariant::Double );
596
+ QCOMPARE ( stringDouble, QVariant ( 123456.012345 ) );
597
+ // now with group separator for german locale
598
+ stringDouble = QVariant ( " 1.223.456,012345" );
599
+ QVERIFY ( doubleField.convertCompatible ( stringDouble ) );
600
+ QCOMPARE ( stringDouble.type (), QVariant::Double );
601
+ QCOMPARE ( stringDouble, QVariant ( 1223456.012345 ) );
602
+ // Be are good citizens and we also accept english locale
603
+ stringDouble = QVariant ( " 1,223,456.012345" );
604
+ QVERIFY ( doubleField.convertCompatible ( stringDouble ) );
605
+ QCOMPARE ( stringDouble.type (), QVariant::Double );
606
+ QCOMPARE ( stringDouble, QVariant ( 1223456.012345 ) );
607
+
608
+
522
609
}
523
610
524
611
void TestQgsField::dataStream ()
0 commit comments