@@ -83,11 +83,13 @@ class TestQgsGML : public QObject
8383
8484const QString data1 ( " <myns:FeatureCollection "
8585 " xmlns:myns='http://myns' "
86+ " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
8687 " xmlns:gml='http://www.opengis.net/gml'>"
8788 " <gml:boundedBy><gml:null>unknown</gml:null></gml:boundedBy>"
8889 " <gml:featureMember>"
8990 " <myns:mytypename fid='mytypename.1'>"
9091 " <myns:intfield>1</myns:intfield>"
92+ " <myns:nillablefield xsi:nil='true'/>"
9193 " <myns:longfield>1234567890123</myns:longfield>"
9294 " <myns:doublefield>1.23</myns:doublefield>"
9395 " <myns:strfield>foo</myns:strfield>"
@@ -105,6 +107,7 @@ void TestQgsGML::testFromURL()
105107{
106108 QgsFields fields;
107109 fields.append ( QgsField ( QStringLiteral ( " intfield" ), QVariant::Int, QStringLiteral ( " int" ) ) );
110+ fields.append ( QgsField ( QStringLiteral ( " nillablefield" ), QVariant::Int, QStringLiteral ( " nillablefield" ) ) );
108111 QgsGml gmlParser ( QStringLiteral ( " mytypename" ), QStringLiteral ( " mygeom" ), fields );
109112 QgsWkbTypes::Type wkbType;
110113 QTemporaryFile tmpFile;
@@ -117,30 +120,36 @@ void TestQgsGML::testFromURL()
117120 QCOMPARE ( featureMaps.size (), 1 );
118121 QCOMPARE ( gmlParser.idsMap ().size (), 1 );
119122 QCOMPARE ( gmlParser.crs ().authid (), QString ( " EPSG:27700" ) );
123+ QCOMPARE ( featureMaps[0 ]->attribute ( QStringLiteral ( " intfield" ) ).toInt (), 1 );
124+ QVERIFY ( featureMaps[0 ]->attribute ( QStringLiteral ( " nillablefield" ) ).isNull ( ) );
120125 delete featureMaps[ 0 ];
121126}
122127
123128void TestQgsGML::testFromByteArray ()
124129{
125130 QgsFields fields;
126131 fields.append ( QgsField ( QStringLiteral ( " intfield" ), QVariant::Int, QStringLiteral ( " int" ) ) );
132+ fields.append ( QgsField ( QStringLiteral ( " nillablefield" ), QVariant::Int, QStringLiteral ( " nillablefield" ) ) );
127133 QgsGml gmlParser ( QStringLiteral ( " mytypename" ), QStringLiteral ( " mygeom" ), fields );
128134 QgsWkbTypes::Type wkbType;
129135 QCOMPARE ( gmlParser.getFeatures ( data1.toAscii (), &wkbType ), 0 );
130136 QMap<QgsFeatureId, QgsFeature * > featureMaps = gmlParser.featuresMap ();
131137 QCOMPARE ( featureMaps.size (), 1 );
132138 QVERIFY ( featureMaps.constFind ( 0 ) != featureMaps.constEnd () );
133- QCOMPARE ( featureMaps[ 0 ]->attributes ().size (), 1 );
139+ QCOMPARE ( featureMaps[ 0 ]->attributes ().size (), 2 );
134140 QMap<QgsFeatureId, QString > idsMap = gmlParser.idsMap ();
135141 QVERIFY ( idsMap.constFind ( 0 ) != idsMap.constEnd () );
136142 QCOMPARE ( idsMap[ 0 ], QString ( " mytypename.1" ) );
143+ QCOMPARE ( featureMaps[0 ]->attribute ( QStringLiteral ( " intfield" ) ).toInt (), 1 );
144+ QVERIFY ( featureMaps[0 ]->attribute ( QStringLiteral ( " nillablefield" ) ).isNull ( ) );
137145 delete featureMaps[ 0 ];
138146}
139147
140148void TestQgsGML::testStreamingParser ()
141149{
142150 QgsFields fields;
143151 fields.append ( QgsField ( QStringLiteral ( " intfield" ), QVariant::Int, QStringLiteral ( " int" ) ) );
152+ fields.append ( QgsField ( QStringLiteral ( " nillablefield" ), QVariant::Int, QStringLiteral ( " nillablefield" ) ) );
144153 fields.append ( QgsField ( QStringLiteral ( " longfield" ), QVariant::LongLong, QStringLiteral ( " longlong" ) ) );
145154 fields.append ( QgsField ( QStringLiteral ( " doublefield" ), QVariant::Double, QStringLiteral ( " double" ) ) );
146155 fields.append ( QgsField ( QStringLiteral ( " strfield" ), QVariant::String, QStringLiteral ( " string" ) ) );
@@ -152,12 +161,13 @@ void TestQgsGML::testStreamingParser()
152161 QCOMPARE ( gmlParser.isException (), false );
153162 QVector<QgsGmlStreamingParser::QgsGmlFeaturePtrGmlIdPair> features = gmlParser.getAndStealReadyFeatures ();
154163 QCOMPARE ( features.size (), 1 );
155- QCOMPARE ( features[0 ].first ->attributes ().size (), 5 );
164+ QCOMPARE ( features[0 ].first ->attributes ().size (), 6 );
156165 QCOMPARE ( features[0 ].first ->attributes ().at ( 0 ), QVariant ( 1 ) );
157- QCOMPARE ( features[0 ].first ->attributes ().at ( 1 ), QVariant ( Q_INT64_C ( 1234567890123 ) ) );
158- QCOMPARE ( features[0 ].first ->attributes ().at ( 2 ), QVariant ( 1.23 ) );
159- QCOMPARE ( features[0 ].first ->attributes ().at ( 3 ), QVariant ( " foo" ) );
160- QCOMPARE ( features[0 ].first ->attributes ().at ( 4 ), QVariant ( QDateTime ( QDate ( 2016 , 4 , 10 ), QTime ( 12 , 34 , 56 , 789 ), Qt::UTC ) ) );
166+ QCOMPARE ( features[0 ].first ->attributes ().at ( 1 ), QVariant ( ) );
167+ QCOMPARE ( features[0 ].first ->attributes ().at ( 2 ), QVariant ( Q_INT64_C ( 1234567890123 ) ) );
168+ QCOMPARE ( features[0 ].first ->attributes ().at ( 3 ), QVariant ( 1.23 ) );
169+ QCOMPARE ( features[0 ].first ->attributes ().at ( 4 ), QVariant ( " foo" ) );
170+ QCOMPARE ( features[0 ].first ->attributes ().at ( 5 ), QVariant ( QDateTime ( QDate ( 2016 , 4 , 10 ), QTime ( 12 , 34 , 56 , 789 ), Qt::UTC ) ) );
161171 QVERIFY ( features[0 ].first ->hasGeometry () );
162172 QCOMPARE ( features[0 ].first ->geometry ().wkbType (), QgsWkbTypes::Point );
163173 QCOMPARE ( features[0 ].first ->geometry ().asPoint (), QgsPointXY ( 10 , 20 ) );
0 commit comments