mirror of
				https://github.com/open-source-parsers/jsoncpp.git
				synced 2025-11-04 02:32:19 -05:00 
			
		
		
		
	Requested/noticed in https://github.com/open-source-parsers/jsoncpp/pull/610, and a followup to https://github.com/open-source-parsers/jsoncpp/pull/607 .
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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)
 |