summaryrefslogtreecommitdiff
path: root/src/3rd_party-static/jsoncpp/test/pyjsontestrunner.py
blob: 504f3db2e79a281174122fec38517ce582120339 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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.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 )