mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2024-12-27 11:21:02 +08:00
Merge branch 'fixup-tests' into 'master' (#1102)
This commit is contained in:
commit
5813ab1bc1
@ -27,8 +27,13 @@ Then,
|
|||||||
#LIB_TYPE=static
|
#LIB_TYPE=static
|
||||||
meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE}
|
meson --buildtype ${BUILD_TYPE} --default-library ${LIB_TYPE} . build-${LIB_TYPE}
|
||||||
ninja -v -C build-${LIB_TYPE}
|
ninja -v -C build-${LIB_TYPE}
|
||||||
cd build-${LIB_TYPE}
|
|
||||||
meson test --no-rebuild --print-errorlogs
|
ninja -C build-static/ test
|
||||||
|
|
||||||
|
# Or
|
||||||
|
#cd build-${LIB_TYPE}
|
||||||
|
#meson test --no-rebuild --print-errorlogs
|
||||||
|
|
||||||
sudo ninja install
|
sudo ninja install
|
||||||
|
|
||||||
## Building and testing with other build systems
|
## Building and testing with other build systems
|
||||||
|
14
meson.build
14
meson.build
@ -103,5 +103,17 @@ test(
|
|||||||
'-B',
|
'-B',
|
||||||
join_paths(meson.current_source_dir(), 'test/runjsontests.py'),
|
join_paths(meson.current_source_dir(), 'test/runjsontests.py'),
|
||||||
jsontestrunner,
|
jsontestrunner,
|
||||||
join_paths(meson.current_source_dir(), 'test/data')]
|
join_paths(meson.current_source_dir(), 'test/data')],
|
||||||
|
)
|
||||||
|
test(
|
||||||
|
'jsonchecker_jsontestrunner',
|
||||||
|
python,
|
||||||
|
is_parallel : false,
|
||||||
|
args : [
|
||||||
|
'-B',
|
||||||
|
join_paths(meson.current_source_dir(), 'test/runjsontests.py'),
|
||||||
|
'--with-json-checker',
|
||||||
|
jsontestrunner,
|
||||||
|
join_paths(meson.current_source_dir(), 'test/data')],
|
||||||
|
workdir : join_paths(meson.current_source_dir(), 'test/data'),
|
||||||
)
|
)
|
||||||
|
@ -62,6 +62,10 @@ def safeReadFile(path):
|
|||||||
except IOError as e:
|
except IOError as e:
|
||||||
return '<File "%s" is missing: %s>' % (path,e)
|
return '<File "%s" is missing: %s>' % (path,e)
|
||||||
|
|
||||||
|
class FailError(Exception):
|
||||||
|
def __init__(self, msg):
|
||||||
|
super(Exception, self).__init__(msg)
|
||||||
|
|
||||||
def runAllTests(jsontest_executable_path, input_dir = None,
|
def runAllTests(jsontest_executable_path, input_dir = None,
|
||||||
use_valgrind=False, with_json_checker=False,
|
use_valgrind=False, with_json_checker=False,
|
||||||
writerClass='StyledWriter'):
|
writerClass='StyledWriter'):
|
||||||
@ -69,45 +73,26 @@ def runAllTests(jsontest_executable_path, input_dir = None,
|
|||||||
input_dir = os.path.join(os.getcwd(), 'data')
|
input_dir = os.path.join(os.getcwd(), 'data')
|
||||||
tests = glob(os.path.join(input_dir, '*.json'))
|
tests = glob(os.path.join(input_dir, '*.json'))
|
||||||
if with_json_checker:
|
if with_json_checker:
|
||||||
all_test_jsonchecker = glob(os.path.join(input_dir, '../jsonchecker', '*.json'))
|
all_tests = glob(os.path.join(input_dir, '../jsonchecker', '*.json'))
|
||||||
# These tests fail with strict json support, but pass with jsoncpp extra lieniency
|
# These tests fail with strict json support, but pass with JsonCPP's
|
||||||
"""
|
# extra leniency features. When adding a new exclusion to this list,
|
||||||
Failure details:
|
# remember to add the test's number and reasoning here:
|
||||||
* Test ../jsonchecker/fail25.json
|
known = ["fail{}.json".format(n) for n in [
|
||||||
Parsing should have failed:
|
4, 9, # fail because we allow trailing commas
|
||||||
[" tab character in string "]
|
7, # fails because we allow commas after close
|
||||||
|
8, # fails because we allow extra close
|
||||||
* Test ../jsonchecker/fail13.json
|
10, # fails because we allow extra values after close
|
||||||
Parsing should have failed:
|
13, # fails because we allow leading zeroes in numbers
|
||||||
{"Numbers cannot have leading zeroes": 013}
|
18, # fails because we allow deeply nested values
|
||||||
|
25, # fails because we allow tab characters in strings
|
||||||
* Test ../jsonchecker/fail18.json
|
27, # fails because we allow string line breaks
|
||||||
Parsing should have failed:
|
]]
|
||||||
[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
|
test_jsonchecker = [ test for test in all_tests
|
||||||
|
if os.path.basename(test) not in known]
|
||||||
* Test ../jsonchecker/fail8.json
|
|
||||||
Parsing should have failed:
|
|
||||||
["Extra close"]]
|
|
||||||
|
|
||||||
* Test ../jsonchecker/fail7.json
|
|
||||||
Parsing should have failed:
|
|
||||||
["Comma after the close"],
|
|
||||||
|
|
||||||
* Test ../jsonchecker/fail10.json
|
|
||||||
Parsing should have failed:
|
|
||||||
{"Extra value after close": true} "misplaced quoted value"
|
|
||||||
|
|
||||||
* Test ../jsonchecker/fail27.json
|
|
||||||
Parsing should have failed:
|
|
||||||
["line
|
|
||||||
break"]
|
|
||||||
"""
|
|
||||||
known_differences_withjsonchecker = [ "fail25.json", "fail13.json", "fail18.json", "fail8.json",
|
|
||||||
"fail7.json", "fail10.json", "fail27.json" ]
|
|
||||||
test_jsonchecker = [ test for test in all_test_jsonchecker if os.path.basename(test) not in known_differences_withjsonchecker ]
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
test_jsonchecker = []
|
test_jsonchecker = []
|
||||||
|
|
||||||
failed_tests = []
|
failed_tests = []
|
||||||
valgrind_path = use_valgrind and VALGRIND_CMD or ''
|
valgrind_path = use_valgrind and VALGRIND_CMD or ''
|
||||||
for input_path in tests + test_jsonchecker:
|
for input_path in tests + test_jsonchecker:
|
||||||
@ -161,10 +146,9 @@ def runAllTests(jsontest_executable_path, input_dir = None,
|
|||||||
print()
|
print()
|
||||||
print('Test results: %d passed, %d failed.' % (len(tests)-len(failed_tests),
|
print('Test results: %d passed, %d failed.' % (len(tests)-len(failed_tests),
|
||||||
len(failed_tests)))
|
len(failed_tests)))
|
||||||
return 1
|
raise FailError(repr(failed_tests))
|
||||||
else:
|
else:
|
||||||
print('All %d tests passed.' % len(tests))
|
print('All %d tests passed.' % len(tests))
|
||||||
return 0
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
@ -187,24 +171,21 @@ def main():
|
|||||||
input_path = os.path.normpath(os.path.abspath(args[1]))
|
input_path = os.path.normpath(os.path.abspath(args[1]))
|
||||||
else:
|
else:
|
||||||
input_path = None
|
input_path = None
|
||||||
status = runAllTests(jsontest_executable_path, input_path,
|
runAllTests(jsontest_executable_path, input_path,
|
||||||
use_valgrind=options.valgrind,
|
use_valgrind=options.valgrind,
|
||||||
with_json_checker=options.with_json_checker,
|
with_json_checker=options.with_json_checker,
|
||||||
writerClass='StyledWriter')
|
writerClass='StyledWriter')
|
||||||
if status:
|
runAllTests(jsontest_executable_path, input_path,
|
||||||
sys.exit(status)
|
|
||||||
status = runAllTests(jsontest_executable_path, input_path,
|
|
||||||
use_valgrind=options.valgrind,
|
use_valgrind=options.valgrind,
|
||||||
with_json_checker=options.with_json_checker,
|
with_json_checker=options.with_json_checker,
|
||||||
writerClass='StyledStreamWriter')
|
writerClass='StyledStreamWriter')
|
||||||
if status:
|
runAllTests(jsontest_executable_path, input_path,
|
||||||
sys.exit(status)
|
|
||||||
status = runAllTests(jsontest_executable_path, input_path,
|
|
||||||
use_valgrind=options.valgrind,
|
use_valgrind=options.valgrind,
|
||||||
with_json_checker=options.with_json_checker,
|
with_json_checker=options.with_json_checker,
|
||||||
writerClass='BuiltStyledStreamWriter')
|
writerClass='BuiltStyledStreamWriter')
|
||||||
if status:
|
|
||||||
sys.exit(status)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
main()
|
main()
|
||||||
|
except FailError:
|
||||||
|
sys.exit(1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user