fixup json escaping test
This commit is contained in:
parent
8888f8bc89
commit
52c180aebc
1 changed files with 99 additions and 0 deletions
99
tests/python_tests/json_feature_properties_test.py
Normal file
99
tests/python_tests/json_feature_properties_test.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
#encoding: utf8
|
||||
|
||||
from nose.tools import *
|
||||
import os,sys
|
||||
import mapnik
|
||||
import json
|
||||
|
||||
chars = [
|
||||
{
|
||||
"name":"single_quote",
|
||||
"test": "string with ' quote",
|
||||
"json": '{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \' quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"escaped_single_quote",
|
||||
"test":"string with \' quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \' quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"double_quote",
|
||||
"test":'string with " quote',
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\" quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"double_quote2",
|
||||
"test":"string with \" quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\" quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"reverse_solidus", # backslash
|
||||
"test":"string with \\ quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\\ quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"solidus", # forward slash
|
||||
"test":"string with / quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with / quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"backspace",
|
||||
"test":"string with \b quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\b quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"formfeed",
|
||||
"test":"string with \f quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\f quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"newline",
|
||||
"test":"string with \n quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\n quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"carriage_return",
|
||||
"test":"string with \r quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\r quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"horiztonal_tab",
|
||||
"test":"string with \t quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\t quote"}}'
|
||||
},
|
||||
# remainder are c++ reserved, but not json
|
||||
{
|
||||
"name":"vert_tab",
|
||||
"test":"string with \v quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \\u000b quote"}}'
|
||||
},
|
||||
{
|
||||
"name":"alert",
|
||||
"test":"string with \a quote",
|
||||
"json":'{"type":"Feature","id":1,"geometry":null,"properties":{"name":"string with \u0007 quote"}}'
|
||||
}
|
||||
]
|
||||
|
||||
ctx = mapnik.Context()
|
||||
ctx.push('name')
|
||||
|
||||
def test_char_escaping():
|
||||
for char in chars:
|
||||
feat = mapnik.Feature(ctx,1)
|
||||
expected = char['test']
|
||||
feat["name"] = expected
|
||||
eq_(feat["name"],expected)
|
||||
# confirm the python json module
|
||||
# is working as we would expect
|
||||
pyjson2 = json.loads(char['json'])
|
||||
eq_(pyjson2['properties']['name'],expected)
|
||||
# confirm our behavior is the same as python json module
|
||||
# for the original string
|
||||
geojson_feat_string = feat.to_geojson()
|
||||
eq_(geojson_feat_string,char['json'],"Mapnik's json escaping is not to spec: actual(%s) and expected(%s)" % (geojson_feat_string,char['json']))
|
||||
# and the round tripped string
|
||||
pyjson = json.loads(geojson_feat_string)
|
||||
eq_(pyjson['properties']['name'],expected)
|
||||
|
||||
if __name__ == "__main__":
|
||||
[eval(run)() for run in dir() if 'test_' in run]
|
Loading…
Reference in a new issue