Skip to content

Commit 425f672

Browse files
committed
Fix json comparison with indented reference files
1 parent ea0a70b commit 425f672

File tree

3 files changed

+52
-19
lines changed

3 files changed

+52
-19
lines changed

src/server/services/wms/qgswmsrenderer.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -2305,6 +2305,7 @@ namespace QgsWms
23052305
}
23062306
}
23072307
#ifdef QGISDEBUG
2308+
// This is only useful to generate human readable reference files for tests
23082309
return QByteArray::fromStdString( json.dump( 2 ) );
23092310
#else
23102311
return QByteArray::fromStdString( json.dump() );

tests/src/python/test_qgsserver_wms.py

+15-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
__revision__ = '$Format:%H$'
1818

1919
import os
20+
import json
2021

2122
# Needed on Qt 5 so that the serialization of XML is consistent among all executions
2223
os.environ['QT_HASH_SEED'] = '1'
@@ -57,13 +58,26 @@ def wms_request(self, request, extra=None, project='test_project.qgs', version='
5758
header, body = self._execute_request(query_string)
5859
return (header, body, query_string)
5960

60-
def wms_request_compare(self, request, extra=None, reference_file=None, project='test_project.qgs', version='1.3.0', ignoreExtent=False):
61+
def wms_request_compare(self, request, extra=None, reference_file=None, project='test_project.qgs', version='1.3.0', ignoreExtent=False, normalizeJson=False):
6162
response_header, response_body, query_string = self.wms_request(request, extra, project, version)
6263
response = response_header + response_body
6364
reference_path = self.testdata_path + (request.lower() if not reference_file else reference_file) + '.txt'
6465
self.store_reference(reference_path, response)
6566
f = open(reference_path, 'rb')
6667
expected = f.read()
68+
69+
def _n(r):
70+
lines = r.split(b'\n')
71+
b = lines[2:]
72+
h = lines[:2]
73+
try:
74+
return b'\n'.join(h) + json.dumps(json.loads(b'\n'.join(b))).encode('utf8')
75+
except:
76+
return r
77+
78+
response = _n(response)
79+
expected = _n(expected)
80+
6781
f.close()
6882
response = re.sub(RE_STRIP_UNCHECKABLE, b'*****', response)
6983
expected = re.sub(RE_STRIP_UNCHECKABLE, b'*****', expected)

tests/src/python/test_qgsserver_wms_getfeatureinfo.py

+36-18
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ def testGetFeatureInfoJSON(self):
451451
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
452452
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
453453
'query_layers=testlayer%20%C3%A8%C3%A9&X=190&Y=320',
454-
'wms_getfeatureinfo_json')
454+
'wms_getfeatureinfo_json',
455+
normalizeJson=True)
455456

456457
# simple test without geometry and info_format=application/geo+json
457458
self.wms_request_compare('GetFeatureInfo',
@@ -460,7 +461,8 @@ def testGetFeatureInfoJSON(self):
460461
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
461462
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
462463
'query_layers=testlayer%20%C3%A8%C3%A9&X=190&Y=320',
463-
'wms_getfeatureinfo_geojson')
464+
'wms_getfeatureinfo_geojson',
465+
normalizeJson=True)
464466

465467
# test with several features and several layers
466468
self.wms_request_compare('GetFeatureInfo',
@@ -470,7 +472,8 @@ def testGetFeatureInfoJSON(self):
470472
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
471473
'query_layers=testlayer%20%C3%A8%C3%A9,fields_alias,exclude_attribute&' +
472474
'X=190&Y=320&FEATURE_COUNT=2&FI_POINT_TOLERANCE=200',
473-
'wms_getfeatureinfo_multiple_json')
475+
'wms_getfeatureinfo_multiple_json',
476+
normalizeJson=True)
474477

475478
# simple test with geometry
476479
self.wms_request_compare('GetFeatureInfo',
@@ -480,7 +483,8 @@ def testGetFeatureInfoJSON(self):
480483
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
481484
'query_layers=testlayer%20%C3%A8%C3%A9&X=190&Y=320&' +
482485
'with_geometry=true',
483-
'wms_getfeatureinfo_geometry_json')
486+
'wms_getfeatureinfo_geometry_json',
487+
normalizeJson=True)
484488

485489
# test with alias
486490
self.wms_request_compare('GetFeatureInfo',
@@ -489,7 +493,8 @@ def testGetFeatureInfoJSON(self):
489493
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
490494
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
491495
'query_layers=fields_alias&X=190&Y=320',
492-
'wms_getfeatureinfo_alias_json')
496+
'wms_getfeatureinfo_alias_json',
497+
normalizeJson=True)
493498

494499
# test with excluded attributes
495500
self.wms_request_compare('GetFeatureInfo',
@@ -498,7 +503,8 @@ def testGetFeatureInfoJSON(self):
498503
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
499504
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
500505
'query_layers=exclude_attribute&X=190&Y=320',
501-
'wms_getfeatureinfo_exclude_attribute_json')
506+
'wms_getfeatureinfo_exclude_attribute_json',
507+
normalizeJson=True)
502508

503509
# test with raster layer
504510
self.wms_request_compare('GetFeatureInfo',
@@ -507,7 +513,8 @@ def testGetFeatureInfoJSON(self):
507513
'width=500&height=500&srs=EPSG%3A3857&' +
508514
'bbox=1989139.6,3522745.0,2015014.9,3537004.5&' +
509515
'query_layers=landsat&X=250&Y=250',
510-
'wms_getfeatureinfo_raster_json')
516+
'wms_getfeatureinfo_raster_json',
517+
normalizeJson=True)
511518

512519
def testGetFeatureInfoPostgresTypes(self):
513520
# compare json list output with file
@@ -519,7 +526,8 @@ def testGetFeatureInfoPostgresTypes(self):
519526
'&FILTER=json' +
520527
urllib.parse.quote(':"pk" = 1'),
521528
'get_postgres_types_json_list',
522-
'test_project_postgres_types.qgs')
529+
'test_project_postgres_types.qgs',
530+
normalizeJson=True)
523531

524532
# compare dict output with file
525533
self.wms_request_compare('GetFeatureInfo',
@@ -530,7 +538,8 @@ def testGetFeatureInfoPostgresTypes(self):
530538
'&FILTER=json' +
531539
urllib.parse.quote(':"pk" = 2'),
532540
'get_postgres_types_json_dict',
533-
'test_project_postgres_types.qgs')
541+
'test_project_postgres_types.qgs',
542+
normalizeJson=True)
534543

535544
# compare decoded json field list
536545
response_header, response_body, query_string = self.wms_request('GetFeatureInfo',
@@ -605,7 +614,8 @@ def testGetFeatureInfoGroupedLayers(self):
605614
'&I=0&J=1' +
606615
'&FEATURE_COUNT=10',
607616
'wms_getfeatureinfo_group_name_areas',
608-
'test_project_wms_grouped_layers.qgs')
617+
'test_project_wms_grouped_layers.qgs',
618+
normalizeJson=True)
609619

610620
# areas+and+symbols (nested)
611621
self.wms_request_compare('GetFeatureInfo',
@@ -617,7 +627,8 @@ def testGetFeatureInfoGroupedLayers(self):
617627
'&I=0&J=1' +
618628
'&FEATURE_COUNT=10',
619629
'wms_getfeatureinfo_group_name_areas',
620-
'test_project_wms_grouped_nested_layers.qgs')
630+
'test_project_wms_grouped_nested_layers.qgs',
631+
normalizeJson=True)
621632

622633
# as-areas-short-name
623634
self.wms_request_compare('GetFeatureInfo',
@@ -629,7 +640,8 @@ def testGetFeatureInfoGroupedLayers(self):
629640
'&I=0&J=1' +
630641
'&FEATURE_COUNT=10',
631642
'wms_getfeatureinfo_group_name_areas',
632-
'test_project_wms_grouped_nested_layers.qgs')
643+
'test_project_wms_grouped_nested_layers.qgs',
644+
normalizeJson=True)
633645

634646
# Top level: QGIS Server - Grouped Layer
635647
self.wms_request_compare('GetFeatureInfo',
@@ -641,7 +653,8 @@ def testGetFeatureInfoGroupedLayers(self):
641653
'&I=0&J=1' +
642654
'&FEATURE_COUNT=10',
643655
'wms_getfeatureinfo_group_name_top',
644-
'test_project_wms_grouped_nested_layers.qgs')
656+
'test_project_wms_grouped_nested_layers.qgs',
657+
normalizeJson=True)
645658

646659
# Multiple matches from 2 layer groups
647660
self.wms_request_compare('GetFeatureInfo',
@@ -653,7 +666,8 @@ def testGetFeatureInfoGroupedLayers(self):
653666
'&I=0&J=1' +
654667
'&FEATURE_COUNT=10',
655668
'wms_getfeatureinfo_group_name_areas_cities',
656-
'test_project_wms_grouped_nested_layers.qgs')
669+
'test_project_wms_grouped_nested_layers.qgs',
670+
normalizeJson=True)
657671

658672
# no_query group (nested)
659673
self.wms_request_compare('GetFeatureInfo',
@@ -665,7 +679,8 @@ def testGetFeatureInfoGroupedLayers(self):
665679
'&I=0&J=1' +
666680
'&FEATURE_COUNT=10',
667681
'wms_getfeatureinfo_group_no_query',
668-
'test_project_wms_grouped_nested_layers.qgs')
682+
'test_project_wms_grouped_nested_layers.qgs',
683+
normalizeJson=True)
669684

670685
# query_child group (nested)
671686
self.wms_request_compare('GetFeatureInfo',
@@ -677,7 +692,8 @@ def testGetFeatureInfoGroupedLayers(self):
677692
'&I=0&J=1' +
678693
'&FEATURE_COUNT=10',
679694
'wms_getfeatureinfo_group_query_child',
680-
'test_project_wms_grouped_nested_layers.qgs')
695+
'test_project_wms_grouped_nested_layers.qgs',
696+
normalizeJson=True)
681697

682698
# child_ok group (nested)
683699
self.wms_request_compare('GetFeatureInfo',
@@ -689,7 +705,8 @@ def testGetFeatureInfoGroupedLayers(self):
689705
'&I=0&J=1' +
690706
'&FEATURE_COUNT=10',
691707
'wms_getfeatureinfo_group_query_child',
692-
'test_project_wms_grouped_nested_layers.qgs')
708+
'test_project_wms_grouped_nested_layers.qgs',
709+
normalizeJson=True)
693710

694711
# as_areas_query_copy == as-areas-short-name-query-copy (nested)
695712
self.wms_request_compare('GetFeatureInfo',
@@ -701,7 +718,8 @@ def testGetFeatureInfoGroupedLayers(self):
701718
'&I=0&J=1' +
702719
'&FEATURE_COUNT=10',
703720
'wms_getfeatureinfo_group_query_child',
704-
'test_project_wms_grouped_nested_layers.qgs')
721+
'test_project_wms_grouped_nested_layers.qgs',
722+
normalizeJson=True)
705723

706724

707725
if __name__ == '__main__':

0 commit comments

Comments
 (0)