aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2009-09-08 16:32:47 +0300
committerPetri Lehtinen <petri@digip.org>2009-09-08 17:03:01 +0300
commit04d550b02e8eadc0c9fb1966fe42fe9fc25f89e0 (patch)
tree980cac6c36c3b1f40a69ff36727fb35e1f302216
parent55d25665395551e711fa7d971cf76c8acf0b17f1 (diff)
downloadjansson-04d550b02e8eadc0c9fb1966fe42fe9fc25f89e0.zip
jansson-04d550b02e8eadc0c9fb1966fe42fe9fc25f89e0.tar.gz
jansson-04d550b02e8eadc0c9fb1966fe42fe9fc25f89e0.tar.bz2
Add stripped unit tests for decoder
That is, test cases where there's no newline or other whitespace at the beginning or end of input. This was implemented by adding a --strip option to split-testfile to strip the input file after writing it. The actual test JSON texts are the same as testdata/invalid and testdata/valid. The expected output of the invalid cases had to be adjusted a bit: because there's no newline at the end, some of the line numbers needed to be changed.
-rw-r--r--test/run-test5
-rwxr-xr-xtest/split-testfile.py22
-rwxr-xr-xtest/test-invalid2
-rwxr-xr-xtest/test-valid2
-rw-r--r--test/testdata/invalid-strip195
-rw-r--r--test/testdata/valid-strip68
6 files changed, 287 insertions, 7 deletions
diff --git a/test/run-test b/test/run-test
index a3ff738..ffe653c 100644
--- a/test/run-test
+++ b/test/run-test
@@ -44,7 +44,10 @@ for testfile in $TESTFILES; do
tmpdir="testlogs/`basename $testfile`"
rm -rf $tmpdir
mkdir -p $tmpdir
- ${srcdir}/split-testfile.py $testfile $tmpdir | while read name; do
+ if echo "$testfile" | grep -q -E -e '-strip$'; then
+ opts="--strip"
+ fi
+ ${srcdir}/split-testfile.py $opts $testfile $tmpdir | while read name; do
run_test loadf_dumpf $tmpdir/$name
run_test loads_dumps $tmpdir/$name
run_test load_file_dump_file $tmpdir/$name
diff --git a/test/split-testfile.py b/test/split-testfile.py
index 0191302..97a489e 100755
--- a/test/split-testfile.py
+++ b/test/split-testfile.py
@@ -7,6 +7,13 @@
import os
import sys
+from optparse import OptionParser
+
+def strip_file(filename):
+ with open(filename) as fobj:
+ data = fobj.read()
+ with open(filename, 'w') as fobj:
+ fobj.write(data.strip())
def open_files(outdir, i, name):
basename = '%02d_%s' % (i, name)
@@ -16,12 +23,17 @@ def open_files(outdir, i, name):
return open(input_path, 'w'), open(output_path, 'w')
def main():
- if len(sys.argv) != 3:
- print 'usage: %s input-file output-directory' % sys.argv[0]
+ parser = OptionParser('usage: %prog [options] inputfile outputdir')
+ parser.add_option('--strip', help='strip whitespace from input',
+ action='store_true', default=False)
+ options, args = parser.parse_args()
+
+ if len(args) != 2:
+ parser.print_help()
return 2
- infile = os.path.normpath(sys.argv[1])
- outdir = os.path.normpath(sys.argv[2])
+ infile = os.path.normpath(args[0])
+ outdir = os.path.normpath(args[1])
if not os.path.exists(outdir):
print >>sys.stderr, 'output directory %r does not exist!' % outdir
@@ -37,6 +49,8 @@ def main():
if input is not None and output is not None:
input.close()
output.close()
+ if options.strip:
+ strip_file(input.name)
input, output = open_files(outdir, n, line[5:line.find(' ====\n')])
current = input
elif line == '====\n':
diff --git a/test/test-invalid b/test/test-invalid
index 60c4cca..b83c2e7 100755
--- a/test/test-invalid
+++ b/test/test-invalid
@@ -5,7 +5,7 @@
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
-TESTFILES="${srcdir}/testdata/invalid ${srcdir}/testdata/invalid-unicode"
+TESTFILES="${srcdir}/testdata/invalid ${srcdir}/testdata/invalid-strip ${srcdir}/testdata/invalid-unicode"
run_test() {
local prog=$1
diff --git a/test/test-valid b/test/test-valid
index 55489ea..46d4edf 100755
--- a/test/test-valid
+++ b/test/test-valid
@@ -5,7 +5,7 @@
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
-TESTFILES="${srcdir}/testdata/valid"
+TESTFILES="${srcdir}/testdata/valid ${srcdir}/testdata/valid-strip"
run_test() {
local prog=$1
diff --git a/test/testdata/invalid-strip b/test/testdata/invalid-strip
new file mode 100644
index 0000000..18e40ae
--- /dev/null
+++ b/test/testdata/invalid-strip
@@ -0,0 +1,195 @@
+==== empty ====
+====
+1
+'[' or '{' expected near end of file
+==== null ====
+null
+====
+1
+'[' or '{' expected near 'null'
+==== lone-open-brace ====
+{
+====
+1
+string or '}' expected near end of file
+==== lone-open-bracket ====
+[
+====
+1
+']' expected near end of file
+==== bracket-comma ====
+[,
+====
+1
+unexpected token near ','
+==== bracket-one-comma ====
+[1,
+====
+1
+']' expected near end of file
+==== unterminated-string ====
+["a
+====
+1
+premature end of input near '"a'
+==== unterminated-array ====
+["a"
+====
+1
+']' expected near end of file
+==== apostrophe ====
+['
+====
+1
+invalid token near '''
+==== brace-comma ====
+{,
+====
+1
+string or '}' expected near ','
+==== unterminated-empty-key ====
+{"
+====
+1
+premature end of input near '"'
+==== unterminated-key ====
+{"a
+====
+1
+premature end of input near '"a'
+==== object-no-colon ====
+{"a"
+====
+1
+':' expected near end of file
+==== object-apostrophes ====
+{'a'
+====
+1
+string or '}' expected near '''
+==== object-no-value ====
+{"a":
+====
+1
+unexpected token near end of file
+==== object-unterminated-value ====
+{"a":"a
+====
+1
+premature end of input near '"a'
+==== object-garbage-at-end ====
+{"a":"a" 123}
+====
+1
+'}' expected near '123'
+==== unterminated-object-and-array ====
+{[
+====
+1
+string or '}' expected near '['
+==== unterminated-array-and-object ====
+[{
+====
+1
+string or '}' expected near end of file
+==== object-in-unterminated-array ====
+[{}
+====
+1
+']' expected near end of file
+==== extra-comma-in-array ====
+[1,]
+====
+1
+unexpected token near ']'
+==== extra-command-in-multiline-array ====
+[1,
+2,
+3,
+4,
+5,
+]
+====
+6
+unexpected token near ']'
+==== real-truncated-at-point ====
+[1.]
+====
+1
+invalid token near '1.'
+==== real-truncated-at-e ====
+[1e]
+====
+1
+invalid token near '1e'
+==== real-garbage-after-e ====
+[1ea]
+====
+1
+invalid token near '1e'
+==== integer-starting-with-zero ====
+[012]
+====
+1
+invalid token near '0'
+==== negative-integer-starting-with-zero ====
+[-012]
+====
+1
+invalid token near '-0'
+==== invalid-identifier ====
+[troo
+====
+1
+invalid token near 'troo'
+==== invalid-escap ====
+["\a <-- invalid escape"]
+====
+1
+invalid escape near '"\'
+==== tab-character-in-string ====
+[" <-- tab character"]
+====
+1
+control character 0x9 near '"'
+==== null-byte-in-string ====
+["\u0000 (null byte not allowed)"]
+====
+1
+\u0000 is not allowed
+==== truncated-unicode-surrogate ====
+["\uDADA (first surrogate without the second)"]
+====
+1
+invalid Unicode '\uDADA'
+==== invalid-second-surrogate ====
+["\uD888\u3210 (first surrogate and invalid second surrogate)"]
+====
+1
+invalid Unicode '\uD888\u3210'
+==== lone-second-surrogate ====
+["\uDFAA (second surrogate on it's own)"]
+====
+1
+invalid Unicode '\uDFAA'
+==== unicode-identifier ====
+====
+1
+'[' or '{' expected near 'å'
+==== ascii-unicode-identifier ====
+aå
+====
+1
+'[' or '{' expected near 'a'
+==== garbage-at-the-end ====
+[1,2,3]foo
+====
+1
+end of file expected near 'foo'
+==== garbage-after-newline ====
+[1,2,3]
+foo
+====
+2
+end of file expected near 'foo'
diff --git a/test/testdata/valid-strip b/test/testdata/valid-strip
new file mode 100644
index 0000000..50cfc63
--- /dev/null
+++ b/test/testdata/valid-strip
@@ -0,0 +1,68 @@
+==== empty-string ====
+[""]
+==== short-string ====
+["a"]
+==== simple-ascii-string ====
+["abcdefghijklmnopqrstuvwxyz1234567890 "]
+==== utf-8-string ====
+["€þıœəßð some utf-8 ĸʒ×ŋµåäö𝄞"]
+==== string-escapes ====
+["\"\\\/\b\f\n\r\t"]
+==== one-byte-utf-8 ====
+["\u002c one-byte UTF-8"]
+==== two-byte-utf-8 ====
+["\u0123 two-byte UTF-8"]
+==== three-byte-utf-8 ====
+["\u0821 three-byte UTF-8"]
+==== utf-surrogate-four-byte-encoding ====
+["\uD834\uDD1E surrogate, four-byte UTF-8"]
+==== escaped-utf-control-char ====
+["\u0012 escaped control character"]
+==== simple-int-0 ====
+[0]
+==== simple-int-1 ====
+[1]
+==== simple-int-123 ====
+[123]
+==== negative-zero ====
+[-0]
+==== negative-one ====
+[-1]
+==== negative-int ====
+[-123]
+==== simple-real ====
+[123.456789]
+==== real-exponent ====
+[123e45]
+==== real-capital-e ====
+[1E22]
+==== real-positive-exponent ====
+[1e+2]
+==== real-negative-exponent ====
+[1e-2]
+==== real-capital-e-positive-exponent ====
+[1E+2]
+==== real-capital-e-negative-exponent ====
+[1E-2]
+==== real-fraction-exponent ====
+[123.456e78]
+==== true ====
+[true]
+==== false ====
+[false]
+==== null ====
+[null]
+==== empty-array ====
+[]
+==== empty-object-in-array ====
+[{}]
+==== complex-array ====
+[1,2,3,4,
+"a", "b", "c",
+{"foo": "bar", "core": "dump"},
+true, false, true, true, null, false
+]
+==== empty-object ====
+{}
+==== simple-object ====
+{"a":[]}