Skip to content

Commit

Permalink
Test for issue GH #52667
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Apr 19, 2023
1 parent 6d07aac commit f1b1007
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions tests/src/python/test_qgsvectorfilewriter.py
Expand Up @@ -12,6 +12,7 @@

import os
import tempfile
import json

import osgeo.gdal # NOQA
import qgis # NOQA
Expand Down Expand Up @@ -1602,6 +1603,47 @@ def testWriteUnsetAttributeToGpkg(self):
f = next(features)
self.assertEqual(f['int'], 12345)

def testWriteJsonMapToGpkg(self):

tmp_dir = QTemporaryDir()
tmp_path = tmp_dir.path()
dest_file_name = os.path.join(tmp_path, 'test.gpkg')
ds = ogr.GetDriverByName('GPKG').CreateDataSource(dest_file_name)
lyr = ds.CreateLayer('testLayer', geom_type=ogr.wkbLineString, options=['SPATIAL_INDEX=NO'])
field_def = ogr.FieldDefn('text_field', ogr.OFTString)
field_def.SetSubType(ogr.OFSTJSON)
lyr.CreateField(field_def)
f = ogr.Feature(lyr.GetLayerDefn())
attr_val = {'my_int': 1, 'my_str': 'str', 'my_list': [1, 2, 3]}
f['text_field'] = json.dumps(attr_val)
f.SetGeometry(ogr.CreateGeometryFromWkt('LINESTRING(1 2,3 4)'))
lyr.CreateFeature(f)
f = None
ds = None

layer = QgsVectorLayer(dest_file_name)
fields = layer.fields()
field = fields.at(1)
self.assertEqual(field.type(), QVariant.Map)
f = next(layer.getFeatures())
self.assertEqual(f.attributes()[1], attr_val)

dest_file_name_exported = os.path.join(tmp_path, 'test_exported.gpkg')
write_result, error_message = QgsVectorFileWriter.writeAsVectorFormat(
layer,
dest_file_name_exported,
'utf-8',
layer.crs(),
'GPKG')
self.assertEqual(write_result, QgsVectorFileWriter.NoError, error_message)

layer = QgsVectorLayer(dest_file_name_exported)
fields = layer.fields()
field = fields.at(1)
self.assertEqual(field.type(), QVariant.Map)
f = next(layer.getFeatures())
self.assertEqual(f.attributes()[1], attr_val)


if __name__ == '__main__':
unittest.main()

0 comments on commit f1b1007

Please sign in to comment.