- reorganized repository to match standard layout

This commit is contained in:
Baptiste Lepilleur
2007-03-15 22:11:38 +00:00
parent d3a114c906
commit 4cd8bae331
103 changed files with 7722 additions and 0 deletions

10
test/cleantests.py Normal file
View File

@@ -0,0 +1,10 @@
# removes all files created during testing
import glob
import os
paths = []
for pattern in [ '*.actual', '*.actual-rewrite', '*.rewrite', '*.process-output' ]:
paths += glob.glob( pattern )
for path in paths:
os.unlink( path )

11
test/generate_expected.py Normal file
View File

@@ -0,0 +1,11 @@
import glob
import os.path
for path in glob.glob( '*.json' ):
text = file(path,'rt').read()
target = os.path.splitext(path)[0] + '.expected'
if os.path.exists( target ):
print 'skipping:', target
else:
print 'creating:', target
file(target,'wt').write(text)

64
test/jsontestrunner.py Normal file
View File

@@ -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 )

91
test/runjsontests.py Normal file
View File

@@ -0,0 +1,91 @@
import sys
import os
import os.path
import glob
def compareOutputs( expected, actual, message ):
expected = expected.strip().replace('\r','').split('\n')
actual = actual.strip().replace('\r','').split('\n')
diff_line = 0
max_line_to_compare = min( len(expected), len(actual) )
for index in xrange(0,max_line_to_compare):
if expected[index].strip() != actual[index].strip():
diff_line = index + 1
break
if diff_line == 0 and len(expected) != len(actual):
diff_line = max_line_to_compare+1
if diff_line == 0:
return None
def safeGetLine( lines, index ):
index += -1
if index >= len(lines):
return ''
return lines[index].strip()
return """ Difference in %s at line %d:
Expected: '%s'
Actual: '%s'
""" % (message, diff_line,
safeGetLine(expected,diff_line),
safeGetLine(actual,diff_line) )
def safeReadFile( path ):
try:
return file( path, 'rt' ).read()
except IOError, e:
return '<File "%s" is missing: %s>' % (path,e)
def runAllTests( jsontest_executable_path, input_dir = None ):
if not input_dir:
input_dir = os.getcwd()
tests = glob.glob( os.path.join( input_dir, '*.json' ) )
failed_tests = []
for input_path in tests:
print 'TESTING:', input_path,
pipe = os.popen( "%s %s" % (jsontest_executable_path, input_path) )
process_output = pipe.read()
status = pipe.close()
base_path = os.path.splitext(input_path)[0]
actual_output = safeReadFile( base_path + '.actual' )
actual_rewrite_output = safeReadFile( base_path + '.actual-rewrite' )
file(base_path + '.process-output','wt').write( process_output )
if status:
print 'parsing failed'
failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) )
else:
expected_output_path = os.path.splitext(input_path)[0] + '.expected'
expected_output = file( expected_output_path, 'rt' ).read()
detail = ( compareOutputs( expected_output, actual_output, 'input' )
or compareOutputs( expected_output, actual_rewrite_output, 'rewrite' ) )
if detail:
print 'FAILED'
failed_tests.append( (input_path, detail) )
else:
print 'OK'
if failed_tests:
print
print 'Failure details:'
for failed_test in failed_tests:
print '* Test', failed_test[0]
print failed_test[1]
print
print 'Test results: %d passed, %d failed.' % (len(tests)-len(failed_tests),
len(failed_tests) )
return 1
else:
print 'All %d tests passed.' % len(tests)
return 0
if __name__ == '__main__':
if len(sys.argv) < 1 or len(sys.argv) > 2:
print "Usage: %s jsontest-executable-path [input-testcase-directory]" % sys.argv[0]
sys.exit( 1 )
jsontest_executable_path = os.path.normpath( os.path.abspath( sys.argv[1] ) )
if len(sys.argv) > 1:
input_path = os.path.normpath( os.path.abspath( sys.argv[2] ) )
else:
input_path = None
status = runAllTests( jsontest_executable_path, input_path )
sys.exit( status )

View File

@@ -0,0 +1 @@
.=[]

1
test/test_array_01.json Normal file
View File

@@ -0,0 +1 @@
[]

View File

@@ -0,0 +1,2 @@
.=[]
.[0]=1

1
test/test_array_02.json Normal file
View File

@@ -0,0 +1 @@
[1]

View File

@@ -0,0 +1,6 @@
.=[]
.[0]=1
.[1]=2
.[2]=3
.[3]=4
.[4]=5

1
test/test_array_03.json Normal file
View File

@@ -0,0 +1 @@
[ 1, 2 , 3,4,5]

View File

@@ -0,0 +1,5 @@
.=[]
.[0]=1
.[1]="abc"
.[2]=12.3
.[3]=-4

1
test/test_array_04.json Normal file
View File

@@ -0,0 +1 @@
[1, "abc" , 12.3, -4]

100
test/test_array_05.expected Normal file
View File

@@ -0,0 +1,100 @@
.=[]
.[0]=1
.[1]=2
.[2]=3
.[3]=4
.[4]=5
.[5]=6
.[6]=7
.[7]=8
.[8]=9
.[9]=10
.[10]=11
.[11]=12
.[12]=13
.[13]=14
.[14]=15
.[15]=16
.[16]=17
.[17]=18
.[18]=19
.[19]=20
.[20]=21
.[21]=22
.[22]=23
.[23]=24
.[24]=25
.[25]=26
.[26]=27
.[27]=28
.[28]=29
.[29]=30
.[30]=31
.[31]=32
.[32]=33
.[33]=34
.[34]=35
.[35]=36
.[36]=37
.[37]=38
.[38]=39
.[39]=40
.[40]=41
.[41]=42
.[42]=43
.[43]=44
.[44]=45
.[45]=46
.[46]=47
.[47]=48
.[48]=49
.[49]=50
.[50]=51
.[51]=52
.[52]=53
.[53]=54
.[54]=55
.[55]=56
.[56]=57
.[57]=58
.[58]=59
.[59]=60
.[60]=61
.[61]=62
.[62]=63
.[63]=64
.[64]=65
.[65]=66
.[66]=67
.[67]=68
.[68]=69
.[69]=70
.[70]=71
.[71]=72
.[72]=73
.[73]=74
.[74]=75
.[75]=76
.[76]=77
.[77]=78
.[78]=79
.[79]=80
.[80]=81
.[81]=82
.[82]=83
.[83]=84
.[84]=85
.[85]=86
.[86]=87
.[87]=88
.[88]=89
.[89]=90
.[90]=91
.[91]=92
.[92]=93
.[93]=94
.[94]=95
.[95]=96
.[96]=97
.[97]=98
.[98]=99

1
test/test_array_05.json Normal file
View File

@@ -0,0 +1 @@
[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, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

View File

@@ -0,0 +1,5 @@
.=[]
.[0]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
.[1]="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
.[2]="ccccccccccccccccccccccc"
.[3]="dddddddddddddddddddddddddddddddddddddddddddddddddddd"

4
test/test_array_06.json Normal file
View File

@@ -0,0 +1,4 @@
[ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"ccccccccccccccccccccccc",
"dddddddddddddddddddddddddddddddddddddddddddddddddddd" ]

View File

@@ -0,0 +1 @@
.=123456789

1
test/test_basic_01.json Normal file
View File

@@ -0,0 +1 @@
0123456789

View File

@@ -0,0 +1 @@
.=-123456789

1
test/test_basic_02.json Normal file
View File

@@ -0,0 +1 @@
-0123456789

View File

@@ -0,0 +1,3 @@
.=1.2345678

3
test/test_basic_03.json Normal file
View File

@@ -0,0 +1,3 @@
1.2345678

View File

@@ -0,0 +1,2 @@
.="abcdef"

2
test/test_basic_04.json Normal file
View File

@@ -0,0 +1,2 @@
"abcdef"

View File

@@ -0,0 +1,2 @@
.=null

2
test/test_basic_05.json Normal file
View File

@@ -0,0 +1,2 @@
null

View File

@@ -0,0 +1,2 @@
.=true

2
test/test_basic_06.json Normal file
View File

@@ -0,0 +1,2 @@
true

View File

@@ -0,0 +1,2 @@
.=false

2
test/test_basic_07.json Normal file
View File

@@ -0,0 +1,2 @@
false

View File

@@ -0,0 +1,2 @@
.=null

3
test/test_basic_08.json Normal file
View File

@@ -0,0 +1,3 @@
// C++ style comment
null

View File

@@ -0,0 +1,2 @@
.=null

4
test/test_basic_09.json Normal file
View File

@@ -0,0 +1,4 @@
/* C style comment
*/
null

View File

@@ -0,0 +1,20 @@
.={}
.attribute=[]
.attribute[0]="random"
.attribute[1]="short"
.attribute[2]="bold"
.attribute[3]=12
.attribute[4]={}
.attribute[4].height=7
.attribute[4].width=64
.count=1234
.name={}
.name.aka="T.E.S.T."
.name.id=123987
.test={}
.test.1={}
.test.1.2={}
.test.1.2.3={}
.test.1.2.3.coord=[]
.test.1.2.3.coord[0]=1
.test.1.2.3.coord[1]=2

17
test/test_complex_01.json Normal file
View File

@@ -0,0 +1,17 @@
{
"count" : 1234,
"name" : { "aka" : "T.E.S.T.", "id" : 123987 },
"attribute" : [
"random",
"short",
"bold",
12,
{ "height" : 7, "width" : 64 }
],
"test": { "1" :
{ "2" :
{ "3" : { "coord" : [ 1,2] }
}
}
}
}

View File

@@ -0,0 +1 @@
.=2147483647

View File

@@ -0,0 +1,2 @@
// Max signed integer
2147483647

View File

@@ -0,0 +1 @@
.=-2147483648

View File

@@ -0,0 +1,2 @@
// Min signed integer
-2147483648

View File

@@ -0,0 +1 @@
.=4294967295

View File

@@ -0,0 +1,2 @@
// Max unsigned integer
4294967295

View File

@@ -0,0 +1,2 @@
.=0

View File

@@ -0,0 +1,3 @@
// Min unsigned integer
0

View File

@@ -0,0 +1,2 @@
.=1

View File

@@ -0,0 +1,2 @@
1

View File

@@ -0,0 +1 @@
.={}

1
test/test_object_01.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,2 @@
.={}
.count=1234

1
test/test_object_02.json Normal file
View File

@@ -0,0 +1 @@
{ "count" : 1234 }

View File

@@ -0,0 +1,4 @@
.={}
.attribute="random"
.count=1234
.name="test"

5
test/test_object_03.json Normal file
View File

@@ -0,0 +1,5 @@
{
"count" : 1234,
"name" : "test",
"attribute" : "random"
}

View File

@@ -0,0 +1,2 @@
.={}
.=1234

3
test/test_object_04.json Normal file
View File

@@ -0,0 +1,3 @@
{
"" : 1234
}

View File

@@ -0,0 +1,3 @@
.={}
.first=1
.second=2

View File

@@ -0,0 +1,14 @@
/* A comment
at the beginning of the file.
*/
{
"first" : 1, // comment after 'first' on the same line
/* Comment before 'second'
*/
"second" : 2
}
/* A comment at
the end of the file.
*/

View File

@@ -0,0 +1,2 @@
.=8589934592

3
test/test_real_01.json Normal file
View File

@@ -0,0 +1,3 @@
// 2^33 => out of integer range, switch to double
8589934592

View File

@@ -0,0 +1,2 @@
.=-4294967295

3
test/test_real_02.json Normal file
View File

@@ -0,0 +1,3 @@
// -2^32 => out of signed integer range, switch to double
-4294967295

View File

@@ -0,0 +1,2 @@
.=-4294967295

3
test/test_real_03.json Normal file
View File

@@ -0,0 +1,3 @@
// -2^32 => out of signed integer range, switch to double
-4294967295

View File

@@ -0,0 +1,2 @@
.=1.2345678

3
test/test_real_04.json Normal file
View File

@@ -0,0 +1,3 @@
// 1.2345678
12345678e-7

View File

@@ -0,0 +1,3 @@
.=1234567.8

3
test/test_real_05.json Normal file
View File

@@ -0,0 +1,3 @@
// 1234567.8
0.12345678e7

View File

@@ -0,0 +1,3 @@
.=-1.2345678

3
test/test_real_06.json Normal file
View File

@@ -0,0 +1,3 @@
// -1.2345678
-12345678e-7

View File

@@ -0,0 +1,3 @@
.=-1234567.8

3
test/test_real_07.json Normal file
View File

@@ -0,0 +1,3 @@
// -1234567.8
-0.12345678e7