- reorganized repository to match standard layout
diff --git a/test/jsontestrunner.py b/test/jsontestrunner.py
new file mode 100644
index 0000000..ec05a91
--- /dev/null
+++ b/test/jsontestrunner.py
@@ -0,0 +1,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.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 )