You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
4 months ago
|
# Copyright 2007 Baptiste Lepilleur and The JsonCpp Authors
|
||
|
# Distributed under MIT license, or public domain if desired and
|
||
|
# recognized in your jurisdiction.
|
||
|
# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
|
||
|
|
||
|
"""Simple implementation of a json test runner to run the test against
|
||
|
json-py."""
|
||
|
|
||
|
from __future__ import print_function
|
||
|
import sys
|
||
|
import os.path
|
||
|
import json
|
||
|
import types
|
||
|
|
||
|
if len(sys.argv) != 2:
|
||
|
print("Usage: %s input-json-file", sys.argv[0])
|
||
|
sys.exit(3)
|
||
|
|
||
|
input_path = sys.argv[1]
|
||
|
base_path = os.path.splitext(input_path)[0]
|
||
|
actual_path = base_path + '.actual'
|
||
|
rewrite_path = base_path + '.rewrite'
|
||
|
rewrite_actual_path = base_path + '.actual-rewrite'
|
||
|
|
||
|
def valueTreeToString(fout, value, path = '.'):
|
||
|
ty = type(value)
|
||
|
if ty is types.DictType:
|
||
|
fout.write('%s={}\n' % path)
|
||
|
suffix = path[-1] != '.' and '.' or ''
|
||
|
names = value.keys()
|
||
|
names.sort()
|
||
|
for name in names:
|
||
|
valueTreeToString(fout, value[name], path + suffix + name)
|
||
|
elif ty is types.ListType:
|
||
|
fout.write('%s=[]\n' % path)
|
||
|
for index, childValue in zip(xrange(0,len(value)), value):
|
||
|
valueTreeToString(fout, childValue, path + '[%d]' % index)
|
||
|
elif ty is types.StringType:
|
||
|
fout.write('%s="%s"\n' % (path,value))
|
||
|
elif ty is types.IntType:
|
||
|
fout.write('%s=%d\n' % (path,value))
|
||
|
elif ty is types.FloatType:
|
||
|
fout.write('%s=%.16g\n' % (path,value))
|
||
|
elif value is True:
|
||
|
fout.write('%s=true\n' % path)
|
||
|
elif value is False:
|
||
|
fout.write('%s=false\n' % path)
|
||
|
elif value is None:
|
||
|
fout.write('%s=null\n' % path)
|
||
|
else:
|
||
|
assert False and "Unexpected value type"
|
||
|
|
||
|
def parseAndSaveValueTree(input, actual_path):
|
||
|
root = json.loads(input)
|
||
|
fout = file(actual_path, 'wt')
|
||
|
valueTreeToString(fout, root)
|
||
|
fout.close()
|
||
|
return root
|
||
|
|
||
|
def rewriteValueTree(value, rewrite_path):
|
||
|
rewrite = json.dumps(value)
|
||
|
#rewrite = rewrite[1:-1] # Somehow the string is quoted ! jsonpy bug ?
|
||
|
file(rewrite_path, 'wt').write(rewrite + '\n')
|
||
|
return rewrite
|
||
|
|
||
|
input = file(input_path, 'rt').read()
|
||
|
root = parseAndSaveValueTree(input, actual_path)
|
||
|
rewrite = rewriteValueTree(json.write(root), rewrite_path)
|
||
|
rewrite_root = parseAndSaveValueTree(rewrite, rewrite_actual_path)
|
||
|
|
||
|
sys.exit(0)
|