123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # 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)
|