Derek Sollenberger | 2eb3b4d | 2016-01-11 14:41:40 -0500 | [diff] [blame] | 1 | # Simple implementation of a json test runner to run the test against json-py. |
| 2 | from __future__ import print_function |
| 3 | import sys |
| 4 | import os.path |
| 5 | import json |
| 6 | import types |
| 7 | |
| 8 | if len(sys.argv) != 2: |
| 9 | print("Usage: %s input-json-file", sys.argv[0]) |
| 10 | sys.exit(3) |
| 11 | |
| 12 | input_path = sys.argv[1] |
| 13 | base_path = os.path.splitext(input_path)[0] |
| 14 | actual_path = base_path + '.actual' |
| 15 | rewrite_path = base_path + '.rewrite' |
| 16 | rewrite_actual_path = base_path + '.actual-rewrite' |
| 17 | |
| 18 | def valueTreeToString( fout, value, path = '.' ): |
| 19 | ty = type(value) |
| 20 | if ty is types.DictType: |
| 21 | fout.write( '%s={}\n' % path ) |
| 22 | suffix = path[-1] != '.' and '.' or '' |
| 23 | names = value.keys() |
| 24 | names.sort() |
| 25 | for name in names: |
| 26 | valueTreeToString( fout, value[name], path + suffix + name ) |
| 27 | elif ty is types.ListType: |
| 28 | fout.write( '%s=[]\n' % path ) |
| 29 | for index, childValue in zip( xrange(0,len(value)), value ): |
| 30 | valueTreeToString( fout, childValue, path + '[%d]' % index ) |
| 31 | elif ty is types.StringType: |
| 32 | fout.write( '%s="%s"\n' % (path,value) ) |
| 33 | elif ty is types.IntType: |
| 34 | fout.write( '%s=%d\n' % (path,value) ) |
| 35 | elif ty is types.FloatType: |
| 36 | fout.write( '%s=%.16g\n' % (path,value) ) |
| 37 | elif value is True: |
| 38 | fout.write( '%s=true\n' % path ) |
| 39 | elif value is False: |
| 40 | fout.write( '%s=false\n' % path ) |
| 41 | elif value is None: |
| 42 | fout.write( '%s=null\n' % path ) |
| 43 | else: |
| 44 | assert False and "Unexpected value type" |
| 45 | |
| 46 | def parseAndSaveValueTree( input, actual_path ): |
| 47 | root = json.loads( input ) |
| 48 | fout = file( actual_path, 'wt' ) |
| 49 | valueTreeToString( fout, root ) |
| 50 | fout.close() |
| 51 | return root |
| 52 | |
| 53 | def rewriteValueTree( value, rewrite_path ): |
| 54 | rewrite = json.dumps( value ) |
| 55 | #rewrite = rewrite[1:-1] # Somehow the string is quoted ! jsonpy bug ? |
| 56 | file( rewrite_path, 'wt').write( rewrite + '\n' ) |
| 57 | return rewrite |
| 58 | |
| 59 | input = file( input_path, 'rt' ).read() |
| 60 | root = parseAndSaveValueTree( input, actual_path ) |
| 61 | rewrite = rewriteValueTree( json.write( root ), rewrite_path ) |
| 62 | rewrite_root = parseAndSaveValueTree( rewrite, rewrite_actual_path ) |
| 63 | |
| 64 | sys.exit( 0 ) |