mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2024-12-27 11:21:02 +08:00
65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
# Simple implementation of a json test runner to run the test against json-py.
|
|
|
|
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.read( input )
|
|
fout = file( actual_path, 'wt' )
|
|
valueTreeToString( fout, root )
|
|
fout.close()
|
|
return root
|
|
|
|
def rewriteValueTree( value, rewrite_path ):
|
|
rewrite = json.write( 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 )
|