diff options
author | 2015-07-02 16:53:38 -0500 | |
---|---|---|
committer | 2015-07-08 14:31:26 -0500 | |
commit | 21b5ebeba7dc4ef9d8b1f809741ad73418989a16 (patch) | |
tree | d163ac2b76b5362c8da954ee8221922c6eb126dc /3rdparty/jsoncpp/test | |
parent | 1e37ed88936371ede63ada5b7aea9dd1d0bc287c (diff) |
github version of jsoncpp with some fixes: pedantic and C++98 and others. please try to compile for all platforms
Diffstat (limited to '3rdparty/jsoncpp/test')
-rw-r--r-- | 3rdparty/jsoncpp/test/cleantests.py | 12 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/data/test_comment_00.expected | 4 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/data/test_comment_00.json | 5 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/data/test_comment_01.expected | 2 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/data/test_comment_01.json | 2 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/data/test_comment_02.expected | 11 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/data/test_comment_02.json | 11 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/generate_expected.py | 9 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/pyjsontestrunner.py | 57 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/runjsontests.py | 119 | ||||
-rw-r--r-- | 3rdparty/jsoncpp/test/rununittests.py | 46 |
11 files changed, 188 insertions, 90 deletions
diff --git a/3rdparty/jsoncpp/test/cleantests.py b/3rdparty/jsoncpp/test/cleantests.py index c38fd8ffdd1..9772d542b3a 100644 --- a/3rdparty/jsoncpp/test/cleantests.py +++ b/3rdparty/jsoncpp/test/cleantests.py @@ -1,10 +1,16 @@ -# removes all files created during testing +# Copyright 2007 Baptiste Lepilleur +# 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 + +"""Removes all files created during testing.""" + import glob import os paths = [] for pattern in [ '*.actual', '*.actual-rewrite', '*.rewrite', '*.process-output' ]: - paths += glob.glob( 'data/' + pattern ) + paths += glob.glob('data/' + pattern) for path in paths: - os.unlink( path ) + os.unlink(path) diff --git a/3rdparty/jsoncpp/test/data/test_comment_00.expected b/3rdparty/jsoncpp/test/data/test_comment_00.expected new file mode 100644 index 00000000000..284a797d714 --- /dev/null +++ b/3rdparty/jsoncpp/test/data/test_comment_00.expected @@ -0,0 +1,4 @@ +// Comment for array +.=[] +// Comment within array +.[0]="one-element" diff --git a/3rdparty/jsoncpp/test/data/test_comment_00.json b/3rdparty/jsoncpp/test/data/test_comment_00.json new file mode 100644 index 00000000000..4df577a8ae2 --- /dev/null +++ b/3rdparty/jsoncpp/test/data/test_comment_00.json @@ -0,0 +1,5 @@ +// Comment for array +[ + // Comment within array + "one-element" +] diff --git a/3rdparty/jsoncpp/test/data/test_comment_01.expected b/3rdparty/jsoncpp/test/data/test_comment_01.expected index 2a7f00c450b..1ed01ba100c 100644 --- a/3rdparty/jsoncpp/test/data/test_comment_01.expected +++ b/3rdparty/jsoncpp/test/data/test_comment_01.expected @@ -1,5 +1,7 @@ .={} +// Comment for array .test=[] +// Comment within array .test[0]={} .test[0].a="aaa" .test[1]={} diff --git a/3rdparty/jsoncpp/test/data/test_comment_01.json b/3rdparty/jsoncpp/test/data/test_comment_01.json index 7363490a91d..6defe400404 100644 --- a/3rdparty/jsoncpp/test/data/test_comment_01.json +++ b/3rdparty/jsoncpp/test/data/test_comment_01.json @@ -1,6 +1,8 @@ { "test": + // Comment for array [ + // Comment within array { "a" : "aaa" }, // Comment for a { "b" : "bbb" }, // Comment for b { "c" : "ccc" } // Comment for c diff --git a/3rdparty/jsoncpp/test/data/test_comment_02.expected b/3rdparty/jsoncpp/test/data/test_comment_02.expected index 88d2bd0dc1b..8986dbac05e 100644 --- a/3rdparty/jsoncpp/test/data/test_comment_02.expected +++ b/3rdparty/jsoncpp/test/data/test_comment_02.expected @@ -11,4 +11,13 @@ // Multiline comment cpp-style // Second line .cpp-test.c=3 -.cpp-test.d=4 +// Comment before double +.cpp-test.d=4.1 +// Comment before string +.cpp-test.e="e-string" +// Comment before true +.cpp-test.f=true +// Comment before false +.cpp-test.g=false +// Comment before null +.cpp-test.h=null diff --git a/3rdparty/jsoncpp/test/data/test_comment_02.json b/3rdparty/jsoncpp/test/data/test_comment_02.json index 297d889036a..f5042e0dd68 100644 --- a/3rdparty/jsoncpp/test/data/test_comment_02.json +++ b/3rdparty/jsoncpp/test/data/test_comment_02.json @@ -12,6 +12,15 @@ // Multiline comment cpp-style // Second line "c" : 3, - "d" : 4 + // Comment before double + "d" : 4.1, + // Comment before string + "e" : "e-string", + // Comment before true + "f" : true, + // Comment before false + "g" : false, + // Comment before null + "h" : null } } diff --git a/3rdparty/jsoncpp/test/generate_expected.py b/3rdparty/jsoncpp/test/generate_expected.py index f668da23861..0b74f51ceef 100644 --- a/3rdparty/jsoncpp/test/generate_expected.py +++ b/3rdparty/jsoncpp/test/generate_expected.py @@ -1,10 +1,15 @@ +# Copyright 2007 Baptiste Lepilleur +# 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 + from __future__ import print_function import glob import os.path -for path in glob.glob( '*.json' ): +for path in glob.glob('*.json'): text = file(path,'rt').read() target = os.path.splitext(path)[0] + '.expected' - if os.path.exists( target ): + if os.path.exists(target): print('skipping:', target) else: print('creating:', target) diff --git a/3rdparty/jsoncpp/test/pyjsontestrunner.py b/3rdparty/jsoncpp/test/pyjsontestrunner.py index 3f08a8a7325..7f38356ae98 100644 --- a/3rdparty/jsoncpp/test/pyjsontestrunner.py +++ b/3rdparty/jsoncpp/test/pyjsontestrunner.py @@ -1,4 +1,11 @@ -# Simple implementation of a json test runner to run the test against json-py. +# Copyright 2007 Baptiste Lepilleur +# 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 @@ -15,50 +22,50 @@ actual_path = base_path + '.actual' rewrite_path = base_path + '.rewrite' rewrite_actual_path = base_path + '.actual-rewrite' -def valueTreeToString( fout, value, path = '.' ): +def valueTreeToString(fout, value, path = '.'): ty = type(value) if ty is types.DictType: - fout.write( '%s={}\n' % path ) + 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 ) + 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 ) + 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) ) + fout.write('%s="%s"\n' % (path,value)) elif ty is types.IntType: - fout.write( '%s=%d\n' % (path,value) ) + fout.write('%s=%d\n' % (path,value)) elif ty is types.FloatType: - fout.write( '%s=%.16g\n' % (path,value) ) + fout.write('%s=%.16g\n' % (path,value)) elif value is True: - fout.write( '%s=true\n' % path ) + fout.write('%s=true\n' % path) elif value is False: - fout.write( '%s=false\n' % path ) + fout.write('%s=false\n' % path) elif value is None: - fout.write( '%s=null\n' % path ) + 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 ) +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 ) +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' ) + 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 ) +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 ) +sys.exit(0) diff --git a/3rdparty/jsoncpp/test/runjsontests.py b/3rdparty/jsoncpp/test/runjsontests.py index 9422d57d9dc..d21c02f3802 100644 --- a/3rdparty/jsoncpp/test/runjsontests.py +++ b/3rdparty/jsoncpp/test/runjsontests.py @@ -1,17 +1,41 @@ +# Copyright 2007 Baptiste Lepilleur +# 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 + from __future__ import print_function +from __future__ import unicode_literals +from io import open +from glob import glob import sys import os import os.path -from glob import glob import optparse VALGRIND_CMD = 'valgrind --tool=memcheck --leak-check=yes --undef-value-errors=yes ' -def compareOutputs( expected, actual, message ): +def getStatusOutput(cmd): + """ + Return int, unicode (for both Python 2 and 3). + Note: os.popen().close() would return None for 0. + """ + print(cmd, file=sys.stderr) + pipe = os.popen(cmd) + process_output = pipe.read() + try: + # We have been using os.popen(). When we read() the result + # we get 'str' (bytes) in py2, and 'str' (unicode) in py3. + # Ugh! There must be a better way to handle this. + process_output = process_output.decode('utf-8') + except AttributeError: + pass # python3 + status = pipe.close() + return status, process_output +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) ) + max_line_to_compare = min(len(expected), len(actual)) for index in range(0,max_line_to_compare): if expected[index].strip() != actual[index].strip(): diff_line = index + 1 @@ -20,7 +44,7 @@ def compareOutputs( expected, actual, message ): diff_line = max_line_to_compare+1 if diff_line == 0: return None - def safeGetLine( lines, index ): + def safeGetLine(lines, index): index += -1 if index >= len(lines): return '' @@ -30,65 +54,65 @@ def compareOutputs( expected, actual, message ): Actual: '%s' """ % (message, diff_line, safeGetLine(expected,diff_line), - safeGetLine(actual,diff_line) ) + safeGetLine(actual,diff_line)) -def safeReadFile( path ): +def safeReadFile(path): try: - return file( path, 'rt' ).read() + return open(path, 'rt', encoding = 'utf-8').read() except IOError as e: return '<File "%s" is missing: %s>' % (path,e) -def runAllTests( jsontest_executable_path, input_dir = None, - use_valgrind=False, with_json_checker=False ): +def runAllTests(jsontest_executable_path, input_dir = None, + use_valgrind=False, with_json_checker=False, + writerClass='StyledWriter'): if not input_dir: - input_dir = os.path.join( os.getcwd(), 'data' ) - tests = glob( os.path.join( input_dir, '*.json' ) ) + input_dir = os.path.join(os.getcwd(), 'data') + tests = glob(os.path.join(input_dir, '*.json')) if with_json_checker: - test_jsonchecker = glob( os.path.join( input_dir, '../jsonchecker', '*.json' ) ) + test_jsonchecker = glob(os.path.join(input_dir, '../jsonchecker', '*.json')) else: test_jsonchecker = [] failed_tests = [] valgrind_path = use_valgrind and VALGRIND_CMD or '' for input_path in tests + test_jsonchecker: - expect_failure = os.path.basename( input_path ).startswith( 'fail' ) + expect_failure = os.path.basename(input_path).startswith('fail') is_json_checker_test = (input_path in test_jsonchecker) or expect_failure print('TESTING:', input_path, end=' ') options = is_json_checker_test and '--json-checker' or '' - pipe = os.popen( '%s%s %s "%s"' % ( - valgrind_path, jsontest_executable_path, options, - input_path) ) - process_output = pipe.read() - status = pipe.close() + options += ' --json-writer %s'%writerClass + cmd = '%s%s %s "%s"' % ( valgrind_path, jsontest_executable_path, options, + input_path) + status, process_output = getStatusOutput(cmd) if is_json_checker_test: if expect_failure: - if status is None: + if not status: print('FAILED') - failed_tests.append( (input_path, 'Parsing should have failed:\n%s' % - safeReadFile(input_path)) ) + failed_tests.append((input_path, 'Parsing should have failed:\n%s' % + safeReadFile(input_path))) else: print('OK') else: - if status is not None: + if status: print('FAILED') - failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) ) + failed_tests.append((input_path, 'Parsing failed:\n' + process_output)) else: print('OK') else: 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 ) + actual_output = safeReadFile(base_path + '.actual') + actual_rewrite_output = safeReadFile(base_path + '.actual-rewrite') + open(base_path + '.process-output', 'wt', encoding = 'utf-8').write(process_output) if status: print('parsing failed') - failed_tests.append( (input_path, 'Parsing failed:\n' + process_output) ) + 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' ) ) + expected_output = open(expected_output_path, 'rt', encoding = 'utf-8').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) ) + failed_tests.append((input_path, detail)) else: print('OK') @@ -100,7 +124,7 @@ def runAllTests( jsontest_executable_path, input_dir = None, print(failed_test[1]) print() print('Test results: %d passed, %d failed.' % (len(tests)-len(failed_tests), - len(failed_tests) )) + len(failed_tests))) return 1 else: print('All %d tests passed.' % len(tests)) @@ -108,7 +132,7 @@ def runAllTests( jsontest_executable_path, input_dir = None, def main(): from optparse import OptionParser - parser = OptionParser( usage="%prog [options] <path to jsontestrunner.exe> [test case directory]" ) + parser = OptionParser(usage="%prog [options] <path to jsontestrunner.exe> [test case directory]") parser.add_option("--valgrind", action="store_true", dest="valgrind", default=False, help="run all the tests using valgrind to detect memory leaks") @@ -119,17 +143,32 @@ def main(): options, args = parser.parse_args() if len(args) < 1 or len(args) > 2: - parser.error( 'Must provides at least path to jsontestrunner executable.' ) - sys.exit( 1 ) + parser.error('Must provides at least path to jsontestrunner executable.') + sys.exit(1) - jsontest_executable_path = os.path.normpath( os.path.abspath( args[0] ) ) + jsontest_executable_path = os.path.normpath(os.path.abspath(args[0])) if len(args) > 1: - input_path = os.path.normpath( os.path.abspath( args[1] ) ) + input_path = os.path.normpath(os.path.abspath(args[1])) else: input_path = None - status = runAllTests( jsontest_executable_path, input_path, - use_valgrind=options.valgrind, with_json_checker=options.with_json_checker ) - sys.exit( status ) + status = runAllTests(jsontest_executable_path, input_path, + use_valgrind=options.valgrind, + with_json_checker=options.with_json_checker, + writerClass='StyledWriter') + if status: + sys.exit(status) + status = runAllTests(jsontest_executable_path, input_path, + use_valgrind=options.valgrind, + with_json_checker=options.with_json_checker, + writerClass='StyledStreamWriter') + if status: + sys.exit(status) + status = runAllTests(jsontest_executable_path, input_path, + use_valgrind=options.valgrind, + with_json_checker=options.with_json_checker, + writerClass='BuiltStyledStreamWriter') + if status: + sys.exit(status) if __name__ == '__main__': main() diff --git a/3rdparty/jsoncpp/test/rununittests.py b/3rdparty/jsoncpp/test/rununittests.py index 6279f80e3c6..08850ec1a1d 100644 --- a/3rdparty/jsoncpp/test/rununittests.py +++ b/3rdparty/jsoncpp/test/rununittests.py @@ -1,4 +1,11 @@ +# Copyright 2009 Baptiste Lepilleur +# 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 + from __future__ import print_function +from __future__ import unicode_literals +from io import open from glob import glob import sys import os @@ -9,37 +16,41 @@ import optparse VALGRIND_CMD = 'valgrind --tool=memcheck --leak-check=yes --undef-value-errors=yes' class TestProxy(object): - def __init__( self, test_exe_path, use_valgrind=False ): - self.test_exe_path = os.path.normpath( os.path.abspath( test_exe_path ) ) + def __init__(self, test_exe_path, use_valgrind=False): + self.test_exe_path = os.path.normpath(os.path.abspath(test_exe_path)) self.use_valgrind = use_valgrind - def run( self, options ): + def run(self, options): if self.use_valgrind: cmd = VALGRIND_CMD.split() else: cmd = [] - cmd.extend( [self.test_exe_path, '--test-auto'] + options ) - process = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) + cmd.extend([self.test_exe_path, '--test-auto'] + options) + try: + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + except: + print(cmd) + raise stdout = process.communicate()[0] if process.returncode: return False, stdout return True, stdout -def runAllTests( exe_path, use_valgrind=False ): - test_proxy = TestProxy( exe_path, use_valgrind=use_valgrind ) - status, test_names = test_proxy.run( ['--list-tests'] ) +def runAllTests(exe_path, use_valgrind=False): + test_proxy = TestProxy(exe_path, use_valgrind=use_valgrind) + status, test_names = test_proxy.run(['--list-tests']) if not status: print("Failed to obtain unit tests list:\n" + test_names, file=sys.stderr) return 1 - test_names = [name.strip() for name in test_names.strip().split('\n')] + test_names = [name.strip() for name in test_names.decode('utf-8').strip().split('\n')] failures = [] for name in test_names: print('TESTING %s:' % name, end=' ') - succeed, result = test_proxy.run( ['--test', name] ) + succeed, result = test_proxy.run(['--test', name]) if succeed: print('OK') else: - failures.append( (name, result) ) + failures.append((name, result)) print('FAILED') failed_count = len(failures) pass_count = len(test_names) - failed_count @@ -47,8 +58,7 @@ def runAllTests( exe_path, use_valgrind=False ): print() for name, result in failures: print(result) - print('%d/%d tests passed (%d failure(s))' % ( - pass_count, len(test_names), failed_count)) + print('%d/%d tests passed (%d failure(s))' % ( pass_count, len(test_names), failed_count)) return 1 else: print('All %d tests passed' % len(test_names)) @@ -56,7 +66,7 @@ def runAllTests( exe_path, use_valgrind=False ): def main(): from optparse import OptionParser - parser = OptionParser( usage="%prog [options] <path to test_lib_json.exe>" ) + parser = OptionParser(usage="%prog [options] <path to test_lib_json.exe>") parser.add_option("--valgrind", action="store_true", dest="valgrind", default=False, help="run all the tests using valgrind to detect memory leaks") @@ -64,11 +74,11 @@ def main(): options, args = parser.parse_args() if len(args) != 1: - parser.error( 'Must provides at least path to test_lib_json executable.' ) - sys.exit( 1 ) + parser.error('Must provides at least path to test_lib_json executable.') + sys.exit(1) - exit_code = runAllTests( args[0], use_valgrind=options.valgrind ) - sys.exit( exit_code ) + exit_code = runAllTests(args[0], use_valgrind=options.valgrind) + sys.exit(exit_code) if __name__ == '__main__': main() |