@@ -65,27 +65,30 @@ void TestQgsGpsInformationWidget::testTimestamp()
65
65
{
66
66
67
67
// create a temporary layer
68
- std::unique_ptr< QgsVectorLayer> tempLayer ( new QgsVectorLayer ( QStringLiteral ( " Point?crs=epsg:4326&field=intf:int" ),
69
- QStringLiteral ( " vl" ),
70
- QStringLiteral ( " memory" ) ) );
71
- std::unique_ptr< QgsVectorLayer> tempLayerString ( new QgsVectorLayer ( QStringLiteral ( " Point?crs=epsg:4326&field=stringf:string&field=intf:int" ),
72
- QStringLiteral ( " vl" ),
73
- QStringLiteral ( " memory" ) ) );
74
- std::unique_ptr< QgsVectorLayer> tempLayerDateTime ( new QgsVectorLayer ( QStringLiteral ( " Point?crs=epsg:4326&field=datetimef:datetime&field=intf:int" ),
75
- QStringLiteral ( " vl" ),
76
- QStringLiteral ( " memory" ) ) );
68
+ QgsVectorLayer *tempLayer ( new QgsVectorLayer ( QStringLiteral ( " Point?crs=epsg:4326&field=intf:int" ),
69
+ QStringLiteral ( " vl" ),
70
+ QStringLiteral ( " memory" ) ) );
71
+ QgsVectorLayer *tempLayerString ( new QgsVectorLayer ( QStringLiteral ( " Point?crs=epsg:4326&field=stringf:string&field=intf:int" ),
72
+ QStringLiteral ( " vl" ),
73
+ QStringLiteral ( " memory" ) ) );
74
+ QgsVectorLayer *tempLayerDateTime ( new QgsVectorLayer ( QStringLiteral ( " Point?crs=epsg:4326&field=datetimef:datetime&field=intf:int" ),
75
+ QStringLiteral ( " vl" ),
76
+ QStringLiteral ( " memory" ) ) );
77
+
78
+ QgsProject::instance ()->addMapLayers ( { tempLayer, tempLayerString, tempLayerDateTime } );
79
+
77
80
QVERIFY ( tempLayer->isValid () );
78
81
QgsMapCanvas *canvas = mQgisApp ->mapCanvas ();
79
82
QgsGpsInformationWidget widget ( canvas );
80
- canvas->setCurrentLayer ( tempLayer. get () );
83
+ canvas->setCurrentLayer ( tempLayer );
81
84
QVERIFY ( ! widget.mGboxTimestamp ->isEnabled () );
82
85
83
- canvas->setCurrentLayer ( tempLayerString. get () );
86
+ canvas->setCurrentLayer ( tempLayerString );
84
87
QVERIFY ( widget.mGboxTimestamp ->isEnabled () );
85
88
QVERIFY ( widget.mCboTimestampField ->findText ( QStringLiteral ( " stringf" ) ) != -1 );
86
89
QVERIFY ( widget.mCboTimestampField ->findText ( QStringLiteral ( " intf" ) ) == -1 );
87
90
88
- canvas->setCurrentLayer ( tempLayerDateTime. get () );
91
+ canvas->setCurrentLayer ( tempLayerDateTime );
89
92
QVERIFY ( widget.mGboxTimestamp ->isEnabled () );
90
93
QVERIFY ( widget.mCboTimestampField ->findText ( QStringLiteral ( " datetimef" ) ) != -1 );
91
94
QVERIFY ( widget.mCboTimestampField ->findText ( QStringLiteral ( " intf" ) ) == -1 );
@@ -98,11 +101,11 @@ void TestQgsGpsInformationWidget::testTimestamp()
98
101
widget.mCboTimestampFormat ->setCurrentIndex ( widget.mCboTimestampFormat ->findData ( Qt::TimeSpec::TimeZone ) );
99
102
QVERIFY ( widget.mCboTimeZones ->isEnabled () );
100
103
101
- canvas->setCurrentLayer ( tempLayer. get () );
104
+ canvas->setCurrentLayer ( tempLayer );
102
105
QVERIFY ( ! widget.mGboxTimestamp ->isEnabled () );
103
106
104
107
// Test timestamp conversions
105
- canvas->setCurrentLayer ( tempLayerDateTime. get () );
108
+ canvas->setCurrentLayer ( tempLayerDateTime );
106
109
// 2019/06/19 12:27:34.543[UTC]
107
110
widget.mLastNmeaTime = { 119 , 5 , 19 , 12 , 27 , 34 , 543 };
108
111
QDateTime dateTime ( QDate ( 2019 , 6 , 19 ), QTime ( 12 , 27 , 34 , 543 ) );
@@ -116,30 +119,43 @@ void TestQgsGpsInformationWidget::testTimestamp()
116
119
QVERIFY ( fieldIdx != -1 );
117
120
// UTC
118
121
widget.mCboTimestampFormat ->setCurrentIndex ( widget.mCboTimestampFormat ->findData ( Qt::TimeSpec::UTC ) );
119
- QVariant dt { widget.timestamp ( tempLayerDateTime. get () , fieldIdx ) };
122
+ QVariant dt { widget.timestamp ( tempLayerDateTime, fieldIdx ) };
120
123
QCOMPARE ( dt.toDateTime (), dateTime );
124
+ QVERIFY ( widget.mPreferredTimestampFields .contains ( tempLayerDateTime->id () ) );
125
+ QCOMPARE ( widget.mPreferredTimestampFields [ tempLayerDateTime->id () ], QStringLiteral ( " datetimef" ) );
121
126
122
- // Test string
123
- canvas->setCurrentLayer ( tempLayerString. get () );
127
+ // Test store preferred fields
128
+ canvas->setCurrentLayer ( tempLayerString );
124
129
fieldIdx = tempLayerString->fields ().indexOf ( QStringLiteral ( " stringf" ) );
125
130
QVERIFY ( fieldIdx != -1 );
126
131
widget.mCboTimestampField ->setCurrentIndex ( widget.mCboTimestampField ->findText ( QStringLiteral ( " stringf" ) ) );
132
+ canvas->setCurrentLayer ( tempLayerDateTime );
133
+ QVERIFY ( widget.mPreferredTimestampFields .contains ( tempLayerDateTime->id () ) );
134
+ QCOMPARE ( widget.mPreferredTimestampFields [ tempLayerString->id () ], QStringLiteral ( " stringf" ) );
135
+ QVERIFY ( widget.mPreferredTimestampFields .contains ( tempLayerDateTime->id () ) );
136
+ QCOMPARE ( widget.mPreferredTimestampFields [ tempLayerDateTime->id () ], QStringLiteral ( " datetimef" ) );
137
+
138
+ // Test string
139
+ canvas->setCurrentLayer ( tempLayerString );
127
140
// UTC
128
141
widget.mCboTimestampFormat ->setCurrentIndex ( widget.mCboTimestampFormat ->findData ( Qt::TimeSpec::UTC ) );
129
- dt = widget.timestamp ( tempLayerString. get () , fieldIdx );
142
+ dt = widget.timestamp ( tempLayerString, fieldIdx );
130
143
QCOMPARE ( dt.toString (), dateTime.toString ( Qt::DateFormat::ISODate ) );
131
144
// Local Time (not very robust because we cannot change the system timezone and it may be GMT)
132
145
widget.mCboTimestampFormat ->setCurrentIndex ( widget.mCboTimestampFormat ->findData ( Qt::TimeSpec::LocalTime ) );
133
- dt = widget.timestamp ( tempLayerString. get () , fieldIdx );
146
+ dt = widget.timestamp ( tempLayerString, fieldIdx );
134
147
QDateTime localTime ( dateTime.toLocalTime () );
135
148
QCOMPARE ( dt.toString (), localTime.toString ( Qt::DateFormat::ISODate ) );
136
149
// Timezone
137
150
widget.mCboTimestampFormat ->setCurrentIndex ( widget.mCboTimestampFormat ->findData ( Qt::TimeSpec::TimeZone ) );
138
151
widget.mCboTimeZones ->setCurrentIndex ( widget.mCboTimeZones ->findText ( QStringLiteral ( " Asia/Colombo" ) ) ) ;
139
152
QDateTime tzTime ( dateTime.toTimeZone ( QTimeZone ( QStringLiteral ( " Asia/Colombo" ).toUtf8 () ) ) );
140
- dt = widget.timestamp ( tempLayerString. get () , fieldIdx );
153
+ dt = widget.timestamp ( tempLayerString, fieldIdx );
141
154
QCOMPARE ( dt.toString (), tzTime.toString ( Qt::DateFormat::ISODate ) );
142
155
156
+ // Test that preferred field is stored
157
+ canvas->setCurrentLayer ( tempLayerDateTime );
158
+ QCOMPARE ( widget.mCboTimestampField ->currentText (), QStringLiteral ( " datetimef" ) );
143
159
}
144
160
145
161
QGSTEST_MAIN ( TestQgsGpsInformationWidget )
0 commit comments