Import toml-test-data 1.3.0 upstream upstream/1.3.0
authorRoy7Kim <myoungwoon.kim@samsung.com>
Mon, 15 May 2023 07:53:15 +0000 (16:53 +0900)
committerRoy7Kim <myoungwoon.kim@samsung.com>
Mon, 15 May 2023 07:53:15 +0000 (16:53 +0900)
565 files changed:
.cargo_vcs_info.json [new file with mode: 0644]
Cargo.toml [new file with mode: 0644]
Cargo.toml.orig [new file with mode: 0644]
README.md [new file with mode: 0644]
assets/toml-test/README.md [new file with mode: 0644]
assets/toml-test/tests/.gitattributes [new file with mode: 0644]
assets/toml-test/tests/invalid/array/double-comma-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/double-comma-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/extending-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/missing-separator.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/no-close-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/no-close-table-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/no-close-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/no-close.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/tables-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/tables-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/text-after-array-entries.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/text-before-array-separator.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/array/text-in-array.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/almost-false-with-extra.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/almost-false.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/almost-true-with-extra.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/almost-true.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/just-f.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/just-t.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/mixed-case.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/starting-same-false.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/starting-same-true.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/wrong-case-false.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/bool/wrong-case-true.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/bare-cr.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/bare-formfeed.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/bare-null.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/bare-vertical-tab.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/comment-cr.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/comment-del.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/comment-lf.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/comment-null.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/comment-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/control.multi [new file with mode: 0644]
assets/toml-test/tests/invalid/control/multi-del.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/multi-lf.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/multi-null.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/multi-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawmulti-del.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawmulti-lf.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawmulti-null.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawmulti-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawstring-del.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawstring-lf.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawstring-null.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/rawstring-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/string-bs.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/string-del.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/string-lf.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/string-null.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/control/string-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/hour-over.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/mday-over.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/mday-under.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/minute-over.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/month-over.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/month-under.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/no-leads-with-milli.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/no-leads.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/no-secs.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/no-t.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/second-over.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/time-no-leads-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/time-no-leads.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/datetime/trailing-t.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bad-utf8-at-end.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bad-utf8-in-comment.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bad-utf8-in-multiline-literal.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bad-utf8-in-multiline.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bad-utf8-in-string-literal.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bad-utf8-in-string.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bom-not-at-start-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/bom-not-at-start-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/utf16-bom.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/encoding/utf16.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/double-point-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/double-point-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-double-e-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-double-e-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-double-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-leading-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-point-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-point-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/exp-trailing-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/float.multi [new file with mode: 0644]
assets/toml-test/tests/invalid/float/inf-incomplete-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/inf-incomplete-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/inf-incomplete-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/inf_underscore.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-point-neg.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-point-plus.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-point.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-zero-neg.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-zero-plus.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/leading-zero.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/nan-incomplete-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/nan-incomplete-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/nan-incomplete-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/nan_underscore.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/trailing-point-min.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/trailing-point-plus.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/trailing-point.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/trailing-us-exp.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/trailing-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/us-after-point.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/float/us-before-point.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/add.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/double-comma.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/duplicate-key.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/empty.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/linebreak-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/linebreak-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/linebreak-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/linebreak-4.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/no-comma.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/overwrite.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/inline-table/trailing-comma.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/capital-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/capital-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/capital-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/double-sign-nex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/double-sign-plus.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/double-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/incomplete-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/incomplete-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/incomplete-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/integer.multi [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/invalid-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/invalid-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/invalid-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-us-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-us-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-us-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-zero-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-zero-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-zero-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-zero-sign-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-zero-sign-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/leading-zero-sign-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/negative-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/negative-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/negative-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/positive-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/positive-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/positive-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/text-after-integer.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/trailing-us-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/trailing-us-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/trailing-us-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/trailing-us.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/us-after-bin.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/us-after-hex.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/integer/us-after-oct.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/after-array.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/after-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/after-value.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/bare-invalid-character.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/dotted-redefine-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/duplicate-keys.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/duplicate.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/empty.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/escape.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/hash.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/multiline.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/newline.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/no-eol.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/open-bracket.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/partial-quoted.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/quoted-unclosed-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/quoted-unclosed-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/single-open-bracket.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/space.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/special-character.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/start-bracket.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/start-dot.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/two-equals.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/two-equals2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/two-equals3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/without-value-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/without-value-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/without-value-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/key/without-value-4.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/inline-table-2-0.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/inline-table-3-0.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/key-value-pair-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/keys-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/string-4-0.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/string-7-0.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/table-9-0.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/spec/table-9-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-byte-escape.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-codepoint.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-concat.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-escape-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-escape-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-hex-esc-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-hex-esc-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-hex-esc-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-hex-esc-4.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-hex-esc-5.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-hex-esc.multi [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-multiline.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-slash-escape.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-uni-esc-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-uni-esc-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-uni-esc-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-uni-esc-4.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/bad-uni-esc-5.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-byte-escapes.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-multiline-out-of-range-unicode-escape-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-multiline-out-of-range-unicode-escape-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-multiline-quotes.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-multiline-unknown-escape.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-out-of-range-unicode-escape-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-out-of-range-unicode-escape-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/basic-unknown-escape.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/literal-multiline-quotes-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/literal-multiline-quotes-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/missing-quotes.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-bad-escape-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-bad-escape-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-bad-escape-3.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-escape-space.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-no-close-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-no-close.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/multiline-quotes-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/no-close.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/text-after-string.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/string/wrong-close.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/append-with-dotted-keys-1.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/append-with-dotted-keys-2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/array-empty.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/array-implicit.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/array-missing-bracket.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/duplicate-key-dotted-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/duplicate-key-dotted-table2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/duplicate-key-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/duplicate-table-array.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/duplicate-table-array2.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/duplicate.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/empty-implicit-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/empty.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/equals-sign.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/llbrace.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/nested-brackets-close.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/nested-brackets-open.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/quoted-no-close.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/redefine.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/rrbrace.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/text-after-table.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/whitespace.toml [new file with mode: 0644]
assets/toml-test/tests/invalid/table/with-pound.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/array.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/array.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/bool.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/bool.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/empty.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/empty.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/hetergeneous.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/hetergeneous.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-int-array.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-int-array.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-int-float.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-int-float.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-int-string.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-int-string.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-string-table.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/mixed-string-table.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/nested-double.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/nested-double.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/nested-inline-table.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/nested-inline-table.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/nested.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/nested.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/nospaces.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/nospaces.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/string-quote-comma-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/string-quote-comma-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/string-quote-comma.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/string-quote-comma.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/string-with-comma.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/string-with-comma.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/strings.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/strings.toml [new file with mode: 0644]
assets/toml-test/tests/valid/array/table-array-string-backslash.json [new file with mode: 0644]
assets/toml-test/tests/valid/array/table-array-string-backslash.toml [new file with mode: 0644]
assets/toml-test/tests/valid/bool/bool.json [new file with mode: 0644]
assets/toml-test/tests/valid/bool/bool.toml [new file with mode: 0644]
assets/toml-test/tests/valid/comment/at-eof.json [new file with mode: 0644]
assets/toml-test/tests/valid/comment/at-eof.toml [new file with mode: 0644]
assets/toml-test/tests/valid/comment/at-eof2.json [new file with mode: 0644]
assets/toml-test/tests/valid/comment/at-eof2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/comment/everywhere.json [new file with mode: 0644]
assets/toml-test/tests/valid/comment/everywhere.toml [new file with mode: 0644]
assets/toml-test/tests/valid/comment/noeol.json [new file with mode: 0644]
assets/toml-test/tests/valid/comment/noeol.toml [new file with mode: 0644]
assets/toml-test/tests/valid/comment/tricky.json [new file with mode: 0644]
assets/toml-test/tests/valid/comment/tricky.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/datetime.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/datetime.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/local-date.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/local-date.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/local-time.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/local-time.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/local.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/local.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/milliseconds.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/milliseconds.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/no-seconds.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/no-seconds.toml [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/timezone.json [new file with mode: 0644]
assets/toml-test/tests/valid/datetime/timezone.toml [new file with mode: 0644]
assets/toml-test/tests/valid/empty-file.json [new file with mode: 0644]
assets/toml-test/tests/valid/empty-file.toml [new file with mode: 0644]
assets/toml-test/tests/valid/example.json [new file with mode: 0644]
assets/toml-test/tests/valid/example.toml [new file with mode: 0644]
assets/toml-test/tests/valid/float/exponent.json [new file with mode: 0644]
assets/toml-test/tests/valid/float/exponent.toml [new file with mode: 0644]
assets/toml-test/tests/valid/float/float.json [new file with mode: 0644]
assets/toml-test/tests/valid/float/float.toml [new file with mode: 0644]
assets/toml-test/tests/valid/float/inf-and-nan.json [new file with mode: 0644]
assets/toml-test/tests/valid/float/inf-and-nan.toml [new file with mode: 0644]
assets/toml-test/tests/valid/float/long.json [new file with mode: 0644]
assets/toml-test/tests/valid/float/long.toml [new file with mode: 0644]
assets/toml-test/tests/valid/float/underscore.json [new file with mode: 0644]
assets/toml-test/tests/valid/float/underscore.toml [new file with mode: 0644]
assets/toml-test/tests/valid/float/zero.json [new file with mode: 0644]
assets/toml-test/tests/valid/float/zero.toml [new file with mode: 0644]
assets/toml-test/tests/valid/implicit-and-explicit-after.json [new file with mode: 0644]
assets/toml-test/tests/valid/implicit-and-explicit-after.toml [new file with mode: 0644]
assets/toml-test/tests/valid/implicit-and-explicit-before.json [new file with mode: 0644]
assets/toml-test/tests/valid/implicit-and-explicit-before.toml [new file with mode: 0644]
assets/toml-test/tests/valid/implicit-groups.json [new file with mode: 0644]
assets/toml-test/tests/valid/implicit-groups.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/array.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/array.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/bool.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/bool.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/empty.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/empty.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/end-in-bool.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/end-in-bool.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/inline-table.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/inline-table.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/key-dotted.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/key-dotted.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/multiline.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/multiline.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/nest.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/nest.toml [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/newline.json [new file with mode: 0644]
assets/toml-test/tests/valid/inline-table/newline.toml [new file with mode: 0644]
assets/toml-test/tests/valid/integer/integer.json [new file with mode: 0644]
assets/toml-test/tests/valid/integer/integer.toml [new file with mode: 0644]
assets/toml-test/tests/valid/integer/literals.json [new file with mode: 0644]
assets/toml-test/tests/valid/integer/literals.toml [new file with mode: 0644]
assets/toml-test/tests/valid/integer/long.json [new file with mode: 0644]
assets/toml-test/tests/valid/integer/long.toml [new file with mode: 0644]
assets/toml-test/tests/valid/integer/underscore.json [new file with mode: 0644]
assets/toml-test/tests/valid/integer/underscore.toml [new file with mode: 0644]
assets/toml-test/tests/valid/integer/zero.json [new file with mode: 0644]
assets/toml-test/tests/valid/integer/zero.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/alphanum.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/alphanum.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/case-sensitive.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/case-sensitive.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/dotted.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/dotted.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/empty.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/empty.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/equals-nospace.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/equals-nospace.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/escapes.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/escapes.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/numeric-dotted.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/numeric-dotted.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/numeric.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/numeric.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/quoted-dots.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/quoted-dots.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/space.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/space.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/special-chars.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/special-chars.toml [new file with mode: 0644]
assets/toml-test/tests/valid/key/special-word.json [new file with mode: 0644]
assets/toml-test/tests/valid/key/special-word.toml [new file with mode: 0644]
assets/toml-test/tests/valid/newline-crlf.json [new file with mode: 0644]
assets/toml-test/tests/valid/newline-crlf.toml [new file with mode: 0644]
assets/toml-test/tests/valid/newline-lf.json [new file with mode: 0644]
assets/toml-test/tests/valid/newline-lf.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec-example-1-compact.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec-example-1-compact.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec-example-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec-example-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-of-tables-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-of-tables-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-of-tables-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-of-tables-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-of-tables-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/array-of-tables-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/boolean-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/boolean-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/comment-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/comment-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/float-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/float-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/float-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/float-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/float-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/float-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-3.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/inline-table-3.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/integer-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/integer-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/integer-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/integer-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/integer-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/integer-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/key-value-pair-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/key-value-pair-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-3.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-3.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-4.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-4.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-5.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-5.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-6.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-6.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-7.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/keys-7.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/local-date-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/local-date-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/local-date-time-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/local-date-time-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/local-time-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/local-time-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/offset-date-time-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/offset-date-time-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/offset-date-time-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/offset-date-time-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-3.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-3.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-4.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-4.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-5.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-5.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-6.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-6.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-7.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/string-7.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-0.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-0.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-1.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-1.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-2.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-2.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-3.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-3.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-4.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-4.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-5.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-5.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-6.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-6.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-7.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-7.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-8.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-8.toml [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-9.json [new file with mode: 0644]
assets/toml-test/tests/valid/spec/table-9.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/double-quote-escape.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/double-quote-escape.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/empty.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/empty.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/escape-esc.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/escape-esc.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/escape-tricky.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/escape-tricky.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/escaped-escape.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/escaped-escape.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/escapes.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/escapes.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/hex-escape.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/hex-escape.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/multiline-escaped-crlf.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/multiline-escaped-crlf.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/multiline-quotes.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/multiline-quotes.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/multiline.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/multiline.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/nl.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/nl.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/raw-multiline.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/raw-multiline.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/raw.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/raw.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/simple.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/simple.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/unicode-escape.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/unicode-escape.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/unicode-literal.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/unicode-literal.toml [new file with mode: 0644]
assets/toml-test/tests/valid/string/with-pound.json [new file with mode: 0644]
assets/toml-test/tests/valid/string/with-pound.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-implicit.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-implicit.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-many.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-many.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-nest.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-nest.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-one.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-one.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-table-array.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/array-table-array.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/empty.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/empty.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/keyword.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/keyword.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/names.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/names.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/no-eol.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/no-eol.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/sub-empty.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/sub-empty.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/sub.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/sub.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/whitespace.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/whitespace.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/with-literal-string.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/with-literal-string.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/with-pound.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/with-pound.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/with-single-quotes.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/with-single-quotes.toml [new file with mode: 0644]
assets/toml-test/tests/valid/table/without-super.json [new file with mode: 0644]
assets/toml-test/tests/valid/table/without-super.toml [new file with mode: 0644]
src/lib.rs [new file with mode: 0644]

diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
new file mode 100644 (file)
index 0000000..946c280
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "git": {
+    "sha1": "e5224ed68ce5d3e8d69e39c0b67e4791fb8c17a7"
+  },
+  "path_in_vcs": "crates/data"
+}
\ No newline at end of file
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644 (file)
index 0000000..b8b11d2
--- /dev/null
@@ -0,0 +1,40 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies.
+#
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
+
+[package]
+edition = "2021"
+rust-version = "1.60.0"
+name = "toml-test-data"
+version = "1.3.0"
+include = [
+    "src/**/*",
+    "Cargo.toml",
+    "LICENSE*",
+    "README.md",
+    "examples/**/*",
+    "assets/toml-test/tests",
+]
+description = "TOML test cases"
+readme = "README.md"
+keywords = [
+    "development",
+    "toml",
+]
+categories = [
+    "development-tools:testing",
+    "text-processing",
+    "encoding",
+]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/epage/toml-test-rs"
+
+[dependencies.include_dir]
+version = "0.7.0"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
new file mode 100644 (file)
index 0000000..c7021fa
--- /dev/null
@@ -0,0 +1,22 @@
+[package]
+name = "toml-test-data"
+version = "1.3.0"
+description = "TOML test cases"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/epage/toml-test-rs"
+readme = "README.md"
+categories = ["development-tools:testing", "text-processing", "encoding"]
+keywords = ["development", "toml"]
+edition = "2021"
+rust-version = "1.60.0"  # MSRV
+include = [
+  "src/**/*",
+  "Cargo.toml",
+  "LICENSE*",
+  "README.md",
+  "examples/**/*",
+  "assets/toml-test/tests"
+]
+
+[dependencies]
+include_dir = "0.7.0"
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..047a888
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# toml-test-data
+
+> **TOML test cases**
+
+[![Documentation](https://img.shields.io/badge/docs-master-blue.svg)][Documentation]
+![License](https://img.shields.io/crates/l/toml-test.svg)
+[![Crates Status](https://img.shields.io/crates/v/toml-test.svg)](https://crates.io/crates/toml-test)
+
+Dual-licensed under [MIT](LICENSE-MIT) or [Apache 2.0](LICENSE-APACHE)
+
+## About
+
+[toml-test](https://github.com/BurntSushi/toml-test) is a language-agnostic
+toml parser spec verification.  This crate distributes all of the test cases.
+
+[Documentation]: https://docs.rs/toml-test
diff --git a/assets/toml-test/README.md b/assets/toml-test/README.md
new file mode 100644 (file)
index 0000000..87f3848
--- /dev/null
@@ -0,0 +1,270 @@
+`toml-test` is a language-agnostic test suite to verify the correctness of
+[TOML][t] parsers and writers.
+
+Tests are divided into two groups: "invalid" and "valid". Decoders or encoders
+that reject "invalid" tests pass the tests, and decoders that accept "valid"
+tests and output precisely what is expected pass the tests. The output format is
+JSON, described below.
+
+Both encoders and decoders share valid tests, except an encoder accepts JSON and
+outputs TOML rather than the reverse. The TOML representations are read with a
+blessed decoder and is compared. Encoders have their own set of invalid tests in
+the invalid-encoder directory. The JSON given to a TOML encoder is in the same
+format as the JSON that a TOML decoder should output.
+
+Compatible with TOML version [v1.0.0][v1].
+
+[t]: https://toml.io
+[v1]: https://toml.io/en/v1.0.0
+
+Installation
+------------
+There are binaries on the [release page][r]; these are statically compiled and
+should run in most environments. It's recommended you use a binary, or a tagged
+release if you build from source especially in CI environments. This prevents
+your tests from breaking on changes to tests in this tool.
+
+To compile from source you will need Go 1.16 or newer (older versions will *not*
+work):
+
+    $ git clone https://github.com/BurntSushi/toml-test.git
+    $ cd toml-test
+    $ go build ./cmd/toml-test
+
+This will build a `./toml-test` binary.
+
+[r]: https://github.com/BurntSushi/toml-test/releases
+
+Usage
+-----
+`toml-test` accepts an encoder or decoder as the first positional argument, for
+example:
+
+    $ toml-test my-toml-decoder
+    $ toml-test my-toml-encoder -encoder
+
+The `-encoder` flag is used to signal that this is an encoder rather than a
+decoder.
+
+For example, to run the tests against the Go TOML library:
+
+    # Install my parser
+    $ go install github.com/BurntSushi/toml/cmd/toml-test-decoder@master
+    $ go install github.com/BurntSushi/toml/cmd/toml-test-encoder@master
+
+    $ toml-test toml-test-decoder
+    toml-test [toml-test-decoder]: using embeded tests: 278 passed
+
+    $ toml-test -encoder toml-test-encoder
+    toml-test [toml-test-encoder]: using embeded tests:  94 passed,  0 failed
+
+The default is to use the tests compiled in the binary; you can use `-testdir`
+to load tests from the filesystem. You can use `-run [name]` or `-skip [name]`
+to run or skip specific tests. Both flags can be given more than once and accept
+glob patterns: `-run 'valid/string/*'`.
+
+See `toml-test -help` for detailed usage.
+
+### Implementing a decoder
+For your decoder to be compatible with `toml-test` it **must** satisfy the
+expected interface:
+
+- Your decoder **must** accept TOML data on `stdin`.
+- If the TOML data is invalid, your decoder **must** return with a non-zero
+  exit code, indicating an error.
+- If the TOML data is valid, your decoder **must** output a JSON encoding of
+  that data on `stdout` and return with a zero exit code, indicating success.
+
+An example in pseudocode:
+
+    toml_data = read_stdin()
+
+    parsed_toml = decode_toml(toml_data)
+
+    if error_parsing_toml():
+        print_error_to_stderr()
+        exit(1)
+
+    print_as_tagged_json(parsed_toml)
+    exit(0)
+
+Details on the tagged JSON is explained below in "JSON encoding".
+
+### Implementing an encoder
+For your encoder to be compatible with `toml-test`, it **must** satisfy the
+expected interface:
+
+- Your encoder **must** accept JSON data on `stdin`.
+- If the JSON data cannot be converted to a valid TOML representation, your
+  encoder **must** return with a non-zero exit code, indicating an error.
+- If the JSON data can be converted to a valid TOML representation, your encoder
+  **must** output a TOML encoding of that data on `stdout` and return with a
+  zero exit code, indicating success.
+
+An example in pseudocode:
+
+    json_data = read_stdin()
+
+    parsed_json_with_tags = decode_json(json_data)
+
+    if error_parsing_json():
+        print_error_to_stderr()
+        exit(1)
+
+    print_as_toml(parsed_json_with_tags)
+    exit(0)
+
+JSON encoding
+-------------
+The following JSON encoding applies equally to both encoders and decoders:
+
+- TOML tables correspond to JSON objects.
+- TOML table arrays correspond to JSON arrays.
+- TOML values correspond to a special JSON object of the form:
+  `{"type": "{TOML_TYPE}", "value": "{TOML_VALUE}"}`
+
+In the above, `TOML_TYPE` may be one of:
+
+- string
+- integer
+- float
+- bool
+- datetime
+- datetime-local
+- date-local
+- time-local
+
+`TOML_VALUE` is always a JSON string.
+
+Empty hashes correspond to empty JSON objects (`{}`) and empty arrays correspond
+to empty JSON arrays (`[]`).
+
+Offset datetimes should be encoded in RFC 3339; Local datetimes should be
+encoded following RFC 3339 without the offset part. Local dates should be
+encoded as the date part of RFC 3339 and Local times as the time part.
+
+Examples:
+
+    TOML                JSON
+
+    a = 42              {"type": "integer": "value": "42"}
+
+<!-- -->
+
+    [tbl]               {"tbl": {
+    a = 42                  "a": {"type": "integer": "value": "42"}
+                        }}
+
+<!-- -->
+
+    a = ["a", 2]        {"a": [
+                            {"type": "string",  "value": "1"},
+                            {"type": "integer": "value": "2"}
+                        ]}
+
+Or a more complex example:
+
+```toml
+best-day-ever = 1987-07-05T17:45:00Z
+
+[numtheory]
+boring     = false
+perfection = [6, 28, 496]
+```
+
+And the JSON encoding expected by `toml-test` is:
+
+```json
+{
+  "best-day-ever": {"type": "datetime", "value": "1987-07-05T17:45:00Z"},
+  "numtheory": {
+    "boring": {"type": "bool", "value": "false"},
+    "perfection": [
+      {"type": "integer", "value": "6"},
+      {"type": "integer", "value": "28"},
+      {"type": "integer", "value": "496"}
+    ]
+  }
+}
+```
+
+Note that the only JSON values ever used are objects, arrays and strings.
+
+An example implementation can be found in the BurnSushi/toml:
+
+- [Add tags](https://github.com/BurntSushi/toml/blob/master/internal/tag/add.go)
+- [Remove tags](https://github.com/BurntSushi/toml/blob/master/internal/tag/rm.go)
+
+Implementation-defined behaviour
+--------------------------------
+This only tests behaviour that's should be true for every encoder implementing
+TOML; a few things are left up to implementations, and are not tested here.
+
+- Millisecond precision (4 digits) is required for datetimes and times, and
+  further precision is implementation-specific, and any greater precision than
+  is supported must be truncated (not rounded).
+
+  This tests only millisecond precision, and not any further precision or the
+  truncation of it.
+
+Assumptions of Truth
+--------------------
+The following are taken as ground truths by `toml-test`:
+
+- All tests classified as `invalid` **are** invalid.
+- All tests classified as `valid` **are** valid.
+- All expected outputs in `valid/test-name.json` are exactly correct.
+- The Go standard library package `encoding/json` decodes JSON correctly.
+- When testing encoders the
+  [BurntSushi/toml](https://github.com/BurntSushi/toml) TOML decoder is assumed
+  to be correct. (Note that this assumption is not made when testing decoders!)
+
+Of particular note is that **no TOML decoder** is taken as ground truth when
+testing decoders. This means that most changes to the spec will only require an
+update of the tests in `toml-test`. (Bigger changes may require an adjustment of
+how two things are considered equal. Particularly if a new type of data is
+added.) Obviously, this advantage does not apply to testing TOML encoders since
+there must exist a TOML decoder that conforms to the specification in order to
+read the output of a TOML encoder.
+
+Adding tests
+------------
+`toml-test` was designed so that tests can be easily added and removed. As
+mentioned above, tests are split into two groups: invalid and valid tests. 
+
+Invalid tests **only check if a decoder rejects invalid TOML data**. Or, in the
+case of testing encoders, invalid tests **only check if an encoder rejects an
+invalid representation of TOML** (e.g., a hetergeneous array). Therefore, all
+invalid tests should try to **test one thing and one thing only**. Invalid tests
+should be named after the fault it is trying to expose. Invalid tests for
+decoders are in the `tests/invalid` directory while invalid tests for encoders
+are in the `tests/invalid-encoder` directory.
+
+Valid tests check that a decoder accepts valid TOML data **and** that the parser
+has the correct representation of the TOML data. Therefore, valid tests need a
+JSON encoding in addition to the TOML data. The tests should be small enough
+that writing the JSON encoding by hand will not give you brain damage. The exact
+reverse is true when testing encoders.
+
+A valid test without either a `.json` or `.toml` file will automatically fail.
+
+If you have tests that you'd like to add, please submit a pull request.
+
+Why JSON?
+---------
+In order for a language agnostic test suite to work, we need some kind of data
+exchange format. TOML cannot be used, as it would imply that a particular parser
+has a blessing of correctness.
+
+My decision to use JSON was not a careful one. It was based on expediency. The
+Go standard library has an excellent `encoding/json` package built in, which
+made it easy to compare JSON data.
+
+The problem with JSON is that the types in TOML are not in one-to-one
+correspondence with JSON. This is why every TOML value represented in JSON is
+tagged with a type annotation, as described above.
+
+YAML may be closer in correspondence with TOML, but I don't believe we should
+rely on that correspondence. Making things explicit with JSON means that writing
+tests is a little more cumbersome, but it also reduces the number of assumptions
+we need to make.
diff --git a/assets/toml-test/tests/.gitattributes b/assets/toml-test/tests/.gitattributes
new file mode 100644 (file)
index 0000000..6381655
--- /dev/null
@@ -0,0 +1 @@
+*.toml  -text
diff --git a/assets/toml-test/tests/invalid/array/double-comma-1.toml b/assets/toml-test/tests/invalid/array/double-comma-1.toml
new file mode 100644 (file)
index 0000000..339aad2
--- /dev/null
@@ -0,0 +1 @@
+array = [1,,2]
diff --git a/assets/toml-test/tests/invalid/array/double-comma-2.toml b/assets/toml-test/tests/invalid/array/double-comma-2.toml
new file mode 100644 (file)
index 0000000..ce3565c
--- /dev/null
@@ -0,0 +1,2 @@
+array = [1,2,,]
+
diff --git a/assets/toml-test/tests/invalid/array/extending-table.toml b/assets/toml-test/tests/invalid/array/extending-table.toml
new file mode 100644 (file)
index 0000000..a6b7ce4
--- /dev/null
@@ -0,0 +1,6 @@
+a = [{ b = 1 }]
+
+# Cannot extend tables within static arrays
+# https://github.com/toml-lang/toml/issues/908
+[a.c]
+foo = 1
diff --git a/assets/toml-test/tests/invalid/array/missing-separator.toml b/assets/toml-test/tests/invalid/array/missing-separator.toml
new file mode 100644 (file)
index 0000000..ab3791a
--- /dev/null
@@ -0,0 +1 @@
+wrong = [ 1 2 3 ]
diff --git a/assets/toml-test/tests/invalid/array/no-close-2.toml b/assets/toml-test/tests/invalid/array/no-close-2.toml
new file mode 100644 (file)
index 0000000..2f46123
--- /dev/null
@@ -0,0 +1 @@
+x = [42 #
diff --git a/assets/toml-test/tests/invalid/array/no-close-table-2.toml b/assets/toml-test/tests/invalid/array/no-close-table-2.toml
new file mode 100644 (file)
index 0000000..827c128
--- /dev/null
@@ -0,0 +1 @@
+x = [{ key = 42 #
diff --git a/assets/toml-test/tests/invalid/array/no-close-table.toml b/assets/toml-test/tests/invalid/array/no-close-table.toml
new file mode 100644 (file)
index 0000000..7b077be
--- /dev/null
@@ -0,0 +1 @@
+x = [{ key = 42
diff --git a/assets/toml-test/tests/invalid/array/no-close.toml b/assets/toml-test/tests/invalid/array/no-close.toml
new file mode 100644 (file)
index 0000000..032ebcc
--- /dev/null
@@ -0,0 +1 @@
+long_array = [ 1, 2, 3
diff --git a/assets/toml-test/tests/invalid/array/tables-1.toml b/assets/toml-test/tests/invalid/array/tables-1.toml
new file mode 100644 (file)
index 0000000..01d4d13
--- /dev/null
@@ -0,0 +1,4 @@
+# INVALID TOML DOC
+fruit = []
+
+[[fruit]] # Not allowed
diff --git a/assets/toml-test/tests/invalid/array/tables-2.toml b/assets/toml-test/tests/invalid/array/tables-2.toml
new file mode 100644 (file)
index 0000000..a77b0e4
--- /dev/null
@@ -0,0 +1,10 @@
+# INVALID TOML DOC
+[[fruit]]
+  name = "apple"
+
+  [[fruit.variety]]
+    name = "red delicious"
+
+  # This table conflicts with the previous table
+  [fruit.variety]
+    name = "granny smith"
diff --git a/assets/toml-test/tests/invalid/array/text-after-array-entries.toml b/assets/toml-test/tests/invalid/array/text-after-array-entries.toml
new file mode 100644 (file)
index 0000000..1a72890
--- /dev/null
@@ -0,0 +1,4 @@
+array = [
+  "Is there life after an array separator?", No
+  "Entry"
+]
diff --git a/assets/toml-test/tests/invalid/array/text-before-array-separator.toml b/assets/toml-test/tests/invalid/array/text-before-array-separator.toml
new file mode 100644 (file)
index 0000000..9b06a39
--- /dev/null
@@ -0,0 +1,4 @@
+array = [
+  "Is there life before an array separator?" No,
+  "Entry"
+]
diff --git a/assets/toml-test/tests/invalid/array/text-in-array.toml b/assets/toml-test/tests/invalid/array/text-in-array.toml
new file mode 100644 (file)
index 0000000..a6a6c42
--- /dev/null
@@ -0,0 +1,5 @@
+array = [
+  "Entry 1",
+  I don't belong,
+  "Entry 2",
+]
diff --git a/assets/toml-test/tests/invalid/bool/almost-false-with-extra.toml b/assets/toml-test/tests/invalid/bool/almost-false-with-extra.toml
new file mode 100644 (file)
index 0000000..047911e
--- /dev/null
@@ -0,0 +1 @@
+a = falsify
diff --git a/assets/toml-test/tests/invalid/bool/almost-false.toml b/assets/toml-test/tests/invalid/bool/almost-false.toml
new file mode 100644 (file)
index 0000000..90d612d
--- /dev/null
@@ -0,0 +1 @@
+a = fals
diff --git a/assets/toml-test/tests/invalid/bool/almost-true-with-extra.toml b/assets/toml-test/tests/invalid/bool/almost-true-with-extra.toml
new file mode 100644 (file)
index 0000000..b8946f3
--- /dev/null
@@ -0,0 +1 @@
+a = truthy
diff --git a/assets/toml-test/tests/invalid/bool/almost-true.toml b/assets/toml-test/tests/invalid/bool/almost-true.toml
new file mode 100644 (file)
index 0000000..e9a6145
--- /dev/null
@@ -0,0 +1 @@
+a = tru
diff --git a/assets/toml-test/tests/invalid/bool/just-f.toml b/assets/toml-test/tests/invalid/bool/just-f.toml
new file mode 100644 (file)
index 0000000..b7dfb90
--- /dev/null
@@ -0,0 +1 @@
+a = f
diff --git a/assets/toml-test/tests/invalid/bool/just-t.toml b/assets/toml-test/tests/invalid/bool/just-t.toml
new file mode 100644 (file)
index 0000000..26e457a
--- /dev/null
@@ -0,0 +1 @@
+a = t
diff --git a/assets/toml-test/tests/invalid/bool/mixed-case.toml b/assets/toml-test/tests/invalid/bool/mixed-case.toml
new file mode 100644 (file)
index 0000000..41d995a
--- /dev/null
@@ -0,0 +1 @@
+valid = False
diff --git a/assets/toml-test/tests/invalid/bool/starting-same-false.toml b/assets/toml-test/tests/invalid/bool/starting-same-false.toml
new file mode 100644 (file)
index 0000000..19dfb8d
--- /dev/null
@@ -0,0 +1 @@
+a = falsey
diff --git a/assets/toml-test/tests/invalid/bool/starting-same-true.toml b/assets/toml-test/tests/invalid/bool/starting-same-true.toml
new file mode 100644 (file)
index 0000000..bf2f784
--- /dev/null
@@ -0,0 +1 @@
+a = truer
diff --git a/assets/toml-test/tests/invalid/bool/wrong-case-false.toml b/assets/toml-test/tests/invalid/bool/wrong-case-false.toml
new file mode 100644 (file)
index 0000000..3982220
--- /dev/null
@@ -0,0 +1 @@
+b = FALSE
diff --git a/assets/toml-test/tests/invalid/bool/wrong-case-true.toml b/assets/toml-test/tests/invalid/bool/wrong-case-true.toml
new file mode 100644 (file)
index 0000000..85e34c5
--- /dev/null
@@ -0,0 +1 @@
+a = TRUE
diff --git a/assets/toml-test/tests/invalid/control/bare-cr.toml b/assets/toml-test/tests/invalid/control/bare-cr.toml
new file mode 100644 (file)
index 0000000..37f4ce4
--- /dev/null
@@ -0,0 +1,2 @@
+# The following line contains a single carriage return control character\r
+\r
\ No newline at end of file
diff --git a/assets/toml-test/tests/invalid/control/bare-formfeed.toml b/assets/toml-test/tests/invalid/control/bare-formfeed.toml
new file mode 100644 (file)
index 0000000..508a650
--- /dev/null
@@ -0,0 +1 @@
+bare-formfeed = \f
diff --git a/assets/toml-test/tests/invalid/control/bare-null.toml b/assets/toml-test/tests/invalid/control/bare-null.toml
new file mode 100644 (file)
index 0000000..cf15002
Binary files /dev/null and b/assets/toml-test/tests/invalid/control/bare-null.toml differ
diff --git a/assets/toml-test/tests/invalid/control/bare-vertical-tab.toml b/assets/toml-test/tests/invalid/control/bare-vertical-tab.toml
new file mode 100644 (file)
index 0000000..abacefd
--- /dev/null
@@ -0,0 +1 @@
+bare-vertical-tab = \v
diff --git a/assets/toml-test/tests/invalid/control/comment-cr.toml b/assets/toml-test/tests/invalid/control/comment-cr.toml
new file mode 100644 (file)
index 0000000..3ce1cb4
--- /dev/null
@@ -0,0 +1 @@
+comment-cr = "Carriage return in comment" # \ra=1
diff --git a/assets/toml-test/tests/invalid/control/comment-del.toml b/assets/toml-test/tests/invalid/control/comment-del.toml
new file mode 100644 (file)
index 0000000..fb90400
--- /dev/null
@@ -0,0 +1 @@
+comment-del = "0x7f" # \7f
diff --git a/assets/toml-test/tests/invalid/control/comment-lf.toml b/assets/toml-test/tests/invalid/control/comment-lf.toml
new file mode 100644 (file)
index 0000000..f6e963e
--- /dev/null
@@ -0,0 +1 @@
+comment-lf = "ctrl-P" # \10
diff --git a/assets/toml-test/tests/invalid/control/comment-null.toml b/assets/toml-test/tests/invalid/control/comment-null.toml
new file mode 100644 (file)
index 0000000..2c90372
Binary files /dev/null and b/assets/toml-test/tests/invalid/control/comment-null.toml differ
diff --git a/assets/toml-test/tests/invalid/control/comment-us.toml b/assets/toml-test/tests/invalid/control/comment-us.toml
new file mode 100644 (file)
index 0000000..c685b79
--- /dev/null
@@ -0,0 +1 @@
+comment-us = "ctrl-_" # \1f
diff --git a/assets/toml-test/tests/invalid/control/control.multi b/assets/toml-test/tests/invalid/control/control.multi
new file mode 100644 (file)
index 0000000..d23b6a6
--- /dev/null
@@ -0,0 +1,33 @@
+# "\x.." sequences are replaced with literal control characters.
+
+comment-null = "null" # \x00
+comment-lf = "ctrl-P" # \x10
+comment-us = "ctrl-_" # \x1f
+comment-del = "0x7f" # \x7f
+comment-cr = "Carriage return in comment" # \x0da=1
+
+string-null = "null\x00"
+string-lf = "null\x10"
+string-us = "null\x1f"
+string-del = "null\x7f"
+
+rawstring-null = 'null\x00'
+rawstring-lf = 'null\x10'
+rawstring-us = 'null\x1f'
+rawstring-del = 'null\x7f'
+
+multi-null = """null\x00"""
+multi-lf = """null\x10"""
+multi-us = """null\x1f"""
+multi-del = """null\x7f"""
+
+rawmulti-null = '''null\x00'''
+rawmulti-lf = '''null\x10'''
+rawmulti-us = '''null\x1f'''
+rawmulti-del = '''null\x7f'''
+
+string-bs = "backspace\x08"
+
+bare-null = "some value" \x00
+bare-formfeed = \x0c
+bare-vertical-tab = \x0b
diff --git a/assets/toml-test/tests/invalid/control/multi-del.toml b/assets/toml-test/tests/invalid/control/multi-del.toml
new file mode 100644 (file)
index 0000000..6629ae3
--- /dev/null
@@ -0,0 +1 @@
+multi-del = """null\7f"""
diff --git a/assets/toml-test/tests/invalid/control/multi-lf.toml b/assets/toml-test/tests/invalid/control/multi-lf.toml
new file mode 100644 (file)
index 0000000..f207d33
--- /dev/null
@@ -0,0 +1 @@
+multi-lf = """null\10"""
diff --git a/assets/toml-test/tests/invalid/control/multi-null.toml b/assets/toml-test/tests/invalid/control/multi-null.toml
new file mode 100644 (file)
index 0000000..ac6cb46
Binary files /dev/null and b/assets/toml-test/tests/invalid/control/multi-null.toml differ
diff --git a/assets/toml-test/tests/invalid/control/multi-us.toml b/assets/toml-test/tests/invalid/control/multi-us.toml
new file mode 100644 (file)
index 0000000..b923ca9
--- /dev/null
@@ -0,0 +1 @@
+multi-us = """null\1f"""
diff --git a/assets/toml-test/tests/invalid/control/rawmulti-del.toml b/assets/toml-test/tests/invalid/control/rawmulti-del.toml
new file mode 100644 (file)
index 0000000..17cde07
--- /dev/null
@@ -0,0 +1 @@
+rawmulti-del = '''null\7f'''
diff --git a/assets/toml-test/tests/invalid/control/rawmulti-lf.toml b/assets/toml-test/tests/invalid/control/rawmulti-lf.toml
new file mode 100644 (file)
index 0000000..360d489
--- /dev/null
@@ -0,0 +1 @@
+rawmulti-lf = '''null\10'''
diff --git a/assets/toml-test/tests/invalid/control/rawmulti-null.toml b/assets/toml-test/tests/invalid/control/rawmulti-null.toml
new file mode 100644 (file)
index 0000000..1b5bd09
Binary files /dev/null and b/assets/toml-test/tests/invalid/control/rawmulti-null.toml differ
diff --git a/assets/toml-test/tests/invalid/control/rawmulti-us.toml b/assets/toml-test/tests/invalid/control/rawmulti-us.toml
new file mode 100644 (file)
index 0000000..0251420
--- /dev/null
@@ -0,0 +1 @@
+rawmulti-us = '''null\1f'''
diff --git a/assets/toml-test/tests/invalid/control/rawstring-del.toml b/assets/toml-test/tests/invalid/control/rawstring-del.toml
new file mode 100644 (file)
index 0000000..8d83ba8
--- /dev/null
@@ -0,0 +1 @@
+rawstring-del = 'null\7f'
diff --git a/assets/toml-test/tests/invalid/control/rawstring-lf.toml b/assets/toml-test/tests/invalid/control/rawstring-lf.toml
new file mode 100644 (file)
index 0000000..237470a
--- /dev/null
@@ -0,0 +1 @@
+rawstring-lf = 'null\10'
diff --git a/assets/toml-test/tests/invalid/control/rawstring-null.toml b/assets/toml-test/tests/invalid/control/rawstring-null.toml
new file mode 100644 (file)
index 0000000..2d8d0b4
Binary files /dev/null and b/assets/toml-test/tests/invalid/control/rawstring-null.toml differ
diff --git a/assets/toml-test/tests/invalid/control/rawstring-us.toml b/assets/toml-test/tests/invalid/control/rawstring-us.toml
new file mode 100644 (file)
index 0000000..76cb08c
--- /dev/null
@@ -0,0 +1 @@
+rawstring-us = 'null\1f'
diff --git a/assets/toml-test/tests/invalid/control/string-bs.toml b/assets/toml-test/tests/invalid/control/string-bs.toml
new file mode 100644 (file)
index 0000000..0061c48
--- /dev/null
@@ -0,0 +1 @@
+string-bs = "backspace\b"
diff --git a/assets/toml-test/tests/invalid/control/string-del.toml b/assets/toml-test/tests/invalid/control/string-del.toml
new file mode 100644 (file)
index 0000000..bc0ec7f
--- /dev/null
@@ -0,0 +1 @@
+string-del = "null\7f"
diff --git a/assets/toml-test/tests/invalid/control/string-lf.toml b/assets/toml-test/tests/invalid/control/string-lf.toml
new file mode 100644 (file)
index 0000000..0cf9218
--- /dev/null
@@ -0,0 +1 @@
+string-lf = "null\10"
diff --git a/assets/toml-test/tests/invalid/control/string-null.toml b/assets/toml-test/tests/invalid/control/string-null.toml
new file mode 100644 (file)
index 0000000..821c72c
Binary files /dev/null and b/assets/toml-test/tests/invalid/control/string-null.toml differ
diff --git a/assets/toml-test/tests/invalid/control/string-us.toml b/assets/toml-test/tests/invalid/control/string-us.toml
new file mode 100644 (file)
index 0000000..af31f57
--- /dev/null
@@ -0,0 +1 @@
+string-us = "null\1f"
diff --git a/assets/toml-test/tests/invalid/datetime/hour-over.toml b/assets/toml-test/tests/invalid/datetime/hour-over.toml
new file mode 100644 (file)
index 0000000..d4b89b6
--- /dev/null
@@ -0,0 +1,2 @@
+# time-hour       = 2DIGIT  ; 00-23
+d = 2006-01-01T24:00:00-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/mday-over.toml b/assets/toml-test/tests/invalid/datetime/mday-over.toml
new file mode 100644 (file)
index 0000000..600a409
--- /dev/null
@@ -0,0 +1,3 @@
+# date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
+#                           ; month/year
+d = 2006-01-32T00:00:00-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/mday-under.toml b/assets/toml-test/tests/invalid/datetime/mday-under.toml
new file mode 100644 (file)
index 0000000..689fc98
--- /dev/null
@@ -0,0 +1,3 @@
+# date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
+#                           ; month/year
+d = 2006-01-00T00:00:00-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/minute-over.toml b/assets/toml-test/tests/invalid/datetime/minute-over.toml
new file mode 100644 (file)
index 0000000..1532d79
--- /dev/null
@@ -0,0 +1,2 @@
+# time-minute     = 2DIGIT  ; 00-59
+d = 2006-01-01T00:60:00-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/month-over.toml b/assets/toml-test/tests/invalid/datetime/month-over.toml
new file mode 100644 (file)
index 0000000..c7d40c9
--- /dev/null
@@ -0,0 +1,2 @@
+# date-month      = 2DIGIT  ; 01-12
+d = 2006-13-01T00:00:00-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/month-under.toml b/assets/toml-test/tests/invalid/datetime/month-under.toml
new file mode 100644 (file)
index 0000000..503f60a
--- /dev/null
@@ -0,0 +1,2 @@
+# date-month      = 2DIGIT  ; 01-12
+d = 2007-00-01T00:00:00-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/no-leads-with-milli.toml b/assets/toml-test/tests/invalid/datetime/no-leads-with-milli.toml
new file mode 100644 (file)
index 0000000..6e3d2e3
--- /dev/null
@@ -0,0 +1,2 @@
+# Day "5" instead of "05"; the leading zero is required.
+with-milli = 1987-07-5T17:45:00.12Z
diff --git a/assets/toml-test/tests/invalid/datetime/no-leads.toml b/assets/toml-test/tests/invalid/datetime/no-leads.toml
new file mode 100644 (file)
index 0000000..6700d1c
--- /dev/null
@@ -0,0 +1,2 @@
+# Month "7" instead of "07"; the leading zero is required.
+no-leads = 1987-7-05T17:45:00Z
diff --git a/assets/toml-test/tests/invalid/datetime/no-secs.toml b/assets/toml-test/tests/invalid/datetime/no-secs.toml
new file mode 100644 (file)
index 0000000..bbd196a
--- /dev/null
@@ -0,0 +1,2 @@
+# No seconds in time.
+no-secs = 1987-07-05T17:45Z
diff --git a/assets/toml-test/tests/invalid/datetime/no-t.toml b/assets/toml-test/tests/invalid/datetime/no-t.toml
new file mode 100644 (file)
index 0000000..8d87260
--- /dev/null
@@ -0,0 +1,2 @@
+# No "t" or "T" between the date and time.
+no-t = 1987-07-0517:45:00Z
diff --git a/assets/toml-test/tests/invalid/datetime/second-over.toml b/assets/toml-test/tests/invalid/datetime/second-over.toml
new file mode 100644 (file)
index 0000000..4921704
--- /dev/null
@@ -0,0 +1,3 @@
+# time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
+#                           ; rules
+d = 2006-01-01T00:00:61-00:00
diff --git a/assets/toml-test/tests/invalid/datetime/time-no-leads-2.toml b/assets/toml-test/tests/invalid/datetime/time-no-leads-2.toml
new file mode 100644 (file)
index 0000000..d7b8459
--- /dev/null
@@ -0,0 +1,2 @@
+# Leading 0 is always required.
+d = 01:32:0
diff --git a/assets/toml-test/tests/invalid/datetime/time-no-leads.toml b/assets/toml-test/tests/invalid/datetime/time-no-leads.toml
new file mode 100644 (file)
index 0000000..8ad722a
--- /dev/null
@@ -0,0 +1,2 @@
+# Leading 0 is always required.
+d = 1:32:00
diff --git a/assets/toml-test/tests/invalid/datetime/trailing-t.toml b/assets/toml-test/tests/invalid/datetime/trailing-t.toml
new file mode 100644 (file)
index 0000000..38ee1db
--- /dev/null
@@ -0,0 +1,2 @@
+# Date cannot end with trailing T
+d = 2006-01-30T
diff --git a/assets/toml-test/tests/invalid/encoding/bad-utf8-at-end.toml b/assets/toml-test/tests/invalid/encoding/bad-utf8-at-end.toml
new file mode 100644 (file)
index 0000000..df5f0b0
--- /dev/null
@@ -0,0 +1,5 @@
+# There is a 0xda at after the quotes, and no EOL at the end of the file.
+#
+# This is a bit of an edge case: This indicates there should be two bytes
+# (0b1101_1010) but there is no byte to follow because it's the end of the file.
+x = """"""Ú
\ No newline at end of file
diff --git a/assets/toml-test/tests/invalid/encoding/bad-utf8-in-comment.toml b/assets/toml-test/tests/invalid/encoding/bad-utf8-in-comment.toml
new file mode 100644 (file)
index 0000000..816fa46
--- /dev/null
@@ -0,0 +1 @@
+# Ã
diff --git a/assets/toml-test/tests/invalid/encoding/bad-utf8-in-multiline-literal.toml b/assets/toml-test/tests/invalid/encoding/bad-utf8-in-multiline-literal.toml
new file mode 100644 (file)
index 0000000..296cf9d
--- /dev/null
@@ -0,0 +1,2 @@
+# The following line contains an invalid UTF-8 sequence.
+bad = '''Ã'''
diff --git a/assets/toml-test/tests/invalid/encoding/bad-utf8-in-multiline.toml b/assets/toml-test/tests/invalid/encoding/bad-utf8-in-multiline.toml
new file mode 100644 (file)
index 0000000..9371cb1
--- /dev/null
@@ -0,0 +1,2 @@
+# The following line contains an invalid UTF-8 sequence.
+bad = """Ã"""
diff --git a/assets/toml-test/tests/invalid/encoding/bad-utf8-in-string-literal.toml b/assets/toml-test/tests/invalid/encoding/bad-utf8-in-string-literal.toml
new file mode 100644 (file)
index 0000000..3f8948b
--- /dev/null
@@ -0,0 +1,2 @@
+# The following line contains an invalid UTF-8 sequence.
+bad = 'Ã'
diff --git a/assets/toml-test/tests/invalid/encoding/bad-utf8-in-string.toml b/assets/toml-test/tests/invalid/encoding/bad-utf8-in-string.toml
new file mode 100644 (file)
index 0000000..6d376fb
--- /dev/null
@@ -0,0 +1,2 @@
+# The following line contains an invalid UTF-8 sequence.
+bad = "Ã"
diff --git a/assets/toml-test/tests/invalid/encoding/bom-not-at-start-1.toml b/assets/toml-test/tests/invalid/encoding/bom-not-at-start-1.toml
new file mode 100644 (file)
index 0000000..effe1f2
--- /dev/null
@@ -0,0 +1 @@
+bom-not-at-start ÿý
diff --git a/assets/toml-test/tests/invalid/encoding/bom-not-at-start-2.toml b/assets/toml-test/tests/invalid/encoding/bom-not-at-start-2.toml
new file mode 100644 (file)
index 0000000..71e52b4
--- /dev/null
@@ -0,0 +1 @@
+bom-not-at-start= ÿý
diff --git a/assets/toml-test/tests/invalid/encoding/utf16-bom.toml b/assets/toml-test/tests/invalid/encoding/utf16-bom.toml
new file mode 100644 (file)
index 0000000..95b5f96
Binary files /dev/null and b/assets/toml-test/tests/invalid/encoding/utf16-bom.toml differ
diff --git a/assets/toml-test/tests/invalid/encoding/utf16.toml b/assets/toml-test/tests/invalid/encoding/utf16.toml
new file mode 100644 (file)
index 0000000..de3cbb2
Binary files /dev/null and b/assets/toml-test/tests/invalid/encoding/utf16.toml differ
diff --git a/assets/toml-test/tests/invalid/float/double-point-1.toml b/assets/toml-test/tests/invalid/float/double-point-1.toml
new file mode 100644 (file)
index 0000000..2105fa9
--- /dev/null
@@ -0,0 +1 @@
+double-point-1 = 0..1
diff --git a/assets/toml-test/tests/invalid/float/double-point-2.toml b/assets/toml-test/tests/invalid/float/double-point-2.toml
new file mode 100644 (file)
index 0000000..1ef3d0b
--- /dev/null
@@ -0,0 +1 @@
+double-point-2 = 0.1.2
diff --git a/assets/toml-test/tests/invalid/float/exp-double-e-1.toml b/assets/toml-test/tests/invalid/float/exp-double-e-1.toml
new file mode 100644 (file)
index 0000000..ee568ce
--- /dev/null
@@ -0,0 +1 @@
+exp-double-e-1 = 1ee2
diff --git a/assets/toml-test/tests/invalid/float/exp-double-e-2.toml b/assets/toml-test/tests/invalid/float/exp-double-e-2.toml
new file mode 100644 (file)
index 0000000..8fb0158
--- /dev/null
@@ -0,0 +1 @@
+exp-double-e-2 = 1e2e3
diff --git a/assets/toml-test/tests/invalid/float/exp-double-us.toml b/assets/toml-test/tests/invalid/float/exp-double-us.toml
new file mode 100644 (file)
index 0000000..63f94e6
--- /dev/null
@@ -0,0 +1 @@
+exp-double-us = 1e__23
diff --git a/assets/toml-test/tests/invalid/float/exp-leading-us.toml b/assets/toml-test/tests/invalid/float/exp-leading-us.toml
new file mode 100644 (file)
index 0000000..1426f36
--- /dev/null
@@ -0,0 +1 @@
+exp-leading-us = 1e_23
diff --git a/assets/toml-test/tests/invalid/float/exp-point-1.toml b/assets/toml-test/tests/invalid/float/exp-point-1.toml
new file mode 100644 (file)
index 0000000..569590b
--- /dev/null
@@ -0,0 +1 @@
+exp-point-1 = 1e2.3
diff --git a/assets/toml-test/tests/invalid/float/exp-point-2.toml b/assets/toml-test/tests/invalid/float/exp-point-2.toml
new file mode 100644 (file)
index 0000000..4a5e1d4
--- /dev/null
@@ -0,0 +1 @@
+exp-point-2 = 1.e2
diff --git a/assets/toml-test/tests/invalid/float/exp-trailing-us.toml b/assets/toml-test/tests/invalid/float/exp-trailing-us.toml
new file mode 100644 (file)
index 0000000..07c0641
--- /dev/null
@@ -0,0 +1 @@
+exp-trailing-us = 1e_23_
diff --git a/assets/toml-test/tests/invalid/float/float.multi b/assets/toml-test/tests/invalid/float/float.multi
new file mode 100644 (file)
index 0000000..0708195
--- /dev/null
@@ -0,0 +1,40 @@
+leading-zero = 03.14
+leading-zero-neg = -03.14
+leading-zero-plus = +03.14
+
+leading-point = .12345
+leading-point-neg = -.12345
+leading-point-plus = +.12345
+
+trailing-point = 1.
+trailing-point-min = -1.
+trailing-point-plus = +1.
+
+trailing-us = 1.2_
+leading-us = _1.2
+us-before-point = 1_.2
+us-after-point = 1._2
+
+double-point-1 = 0..1
+double-point-2 = 0.1.2
+
+exp-point-1 = 1e2.3
+exp-point-2 = 1.e2
+
+exp-double-e-1 = 1ee2
+exp-double-e-2 = 1e2e3
+
+exp-leading-us = 1e_23
+exp-trailing-us = 1e_23_
+exp-double-us = 1e__23
+
+inf-incomplete-1 = in
+inf-incomplete-2 = +in
+inf-incomplete-3 = -in
+
+nan-incomplete-1 = na
+nan-incomplete-2 = +na
+nan-incomplete-3 = -na
+
+nan_underscore = na_n
+inf_underscore = in_f
diff --git a/assets/toml-test/tests/invalid/float/inf-incomplete-1.toml b/assets/toml-test/tests/invalid/float/inf-incomplete-1.toml
new file mode 100644 (file)
index 0000000..2c9ef59
--- /dev/null
@@ -0,0 +1 @@
+inf-incomplete-1 = in
diff --git a/assets/toml-test/tests/invalid/float/inf-incomplete-2.toml b/assets/toml-test/tests/invalid/float/inf-incomplete-2.toml
new file mode 100644 (file)
index 0000000..afda712
--- /dev/null
@@ -0,0 +1 @@
+inf-incomplete-2 = +in
diff --git a/assets/toml-test/tests/invalid/float/inf-incomplete-3.toml b/assets/toml-test/tests/invalid/float/inf-incomplete-3.toml
new file mode 100644 (file)
index 0000000..bd82738
--- /dev/null
@@ -0,0 +1 @@
+inf-incomplete-3 = -in
diff --git a/assets/toml-test/tests/invalid/float/inf_underscore.toml b/assets/toml-test/tests/invalid/float/inf_underscore.toml
new file mode 100644 (file)
index 0000000..8e6ab17
--- /dev/null
@@ -0,0 +1 @@
+inf_underscore = in_f
diff --git a/assets/toml-test/tests/invalid/float/leading-point-neg.toml b/assets/toml-test/tests/invalid/float/leading-point-neg.toml
new file mode 100644 (file)
index 0000000..74c526f
--- /dev/null
@@ -0,0 +1 @@
+leading-point-neg = -.12345
diff --git a/assets/toml-test/tests/invalid/float/leading-point-plus.toml b/assets/toml-test/tests/invalid/float/leading-point-plus.toml
new file mode 100644 (file)
index 0000000..85e23a2
--- /dev/null
@@ -0,0 +1 @@
+leading-point-plus = +.12345
diff --git a/assets/toml-test/tests/invalid/float/leading-point.toml b/assets/toml-test/tests/invalid/float/leading-point.toml
new file mode 100644 (file)
index 0000000..a3c29b9
--- /dev/null
@@ -0,0 +1 @@
+leading-point = .12345
diff --git a/assets/toml-test/tests/invalid/float/leading-us.toml b/assets/toml-test/tests/invalid/float/leading-us.toml
new file mode 100644 (file)
index 0000000..fa94fd0
--- /dev/null
@@ -0,0 +1 @@
+leading-us = _1.2
diff --git a/assets/toml-test/tests/invalid/float/leading-zero-neg.toml b/assets/toml-test/tests/invalid/float/leading-zero-neg.toml
new file mode 100644 (file)
index 0000000..94a4e70
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-neg = -03.14
diff --git a/assets/toml-test/tests/invalid/float/leading-zero-plus.toml b/assets/toml-test/tests/invalid/float/leading-zero-plus.toml
new file mode 100644 (file)
index 0000000..12bfd60
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-plus = +03.14
diff --git a/assets/toml-test/tests/invalid/float/leading-zero.toml b/assets/toml-test/tests/invalid/float/leading-zero.toml
new file mode 100644 (file)
index 0000000..551fb25
--- /dev/null
@@ -0,0 +1 @@
+leading-zero = 03.14
diff --git a/assets/toml-test/tests/invalid/float/nan-incomplete-1.toml b/assets/toml-test/tests/invalid/float/nan-incomplete-1.toml
new file mode 100644 (file)
index 0000000..df2e261
--- /dev/null
@@ -0,0 +1 @@
+nan-incomplete-1 = na
diff --git a/assets/toml-test/tests/invalid/float/nan-incomplete-2.toml b/assets/toml-test/tests/invalid/float/nan-incomplete-2.toml
new file mode 100644 (file)
index 0000000..6d2e8fb
--- /dev/null
@@ -0,0 +1 @@
+nan-incomplete-2 = +na
diff --git a/assets/toml-test/tests/invalid/float/nan-incomplete-3.toml b/assets/toml-test/tests/invalid/float/nan-incomplete-3.toml
new file mode 100644 (file)
index 0000000..9d365ac
--- /dev/null
@@ -0,0 +1 @@
+nan-incomplete-3 = -na
diff --git a/assets/toml-test/tests/invalid/float/nan_underscore.toml b/assets/toml-test/tests/invalid/float/nan_underscore.toml
new file mode 100644 (file)
index 0000000..44c8bf1
--- /dev/null
@@ -0,0 +1 @@
+nan_underscore = na_n
diff --git a/assets/toml-test/tests/invalid/float/trailing-point-min.toml b/assets/toml-test/tests/invalid/float/trailing-point-min.toml
new file mode 100644 (file)
index 0000000..48741e3
--- /dev/null
@@ -0,0 +1 @@
+trailing-point-min = -1.
diff --git a/assets/toml-test/tests/invalid/float/trailing-point-plus.toml b/assets/toml-test/tests/invalid/float/trailing-point-plus.toml
new file mode 100644 (file)
index 0000000..9926039
--- /dev/null
@@ -0,0 +1 @@
+trailing-point-plus = +1.
diff --git a/assets/toml-test/tests/invalid/float/trailing-point.toml b/assets/toml-test/tests/invalid/float/trailing-point.toml
new file mode 100644 (file)
index 0000000..76c95d9
--- /dev/null
@@ -0,0 +1 @@
+trailing-point = 1.
diff --git a/assets/toml-test/tests/invalid/float/trailing-us-exp.toml b/assets/toml-test/tests/invalid/float/trailing-us-exp.toml
new file mode 100644 (file)
index 0000000..7bba971
--- /dev/null
@@ -0,0 +1,4 @@
+# trailing underscore in integer part is not allowed
+trailing-us-exp = 1_e2
+# trailing underscore in float part is not allowed
+trailing-us-exp2 = 1.2_e2
diff --git a/assets/toml-test/tests/invalid/float/trailing-us.toml b/assets/toml-test/tests/invalid/float/trailing-us.toml
new file mode 100644 (file)
index 0000000..ddfb7ba
--- /dev/null
@@ -0,0 +1 @@
+trailing-us = 1.2_
diff --git a/assets/toml-test/tests/invalid/float/us-after-point.toml b/assets/toml-test/tests/invalid/float/us-after-point.toml
new file mode 100644 (file)
index 0000000..7f15f57
--- /dev/null
@@ -0,0 +1 @@
+us-after-point = 1._2
diff --git a/assets/toml-test/tests/invalid/float/us-before-point.toml b/assets/toml-test/tests/invalid/float/us-before-point.toml
new file mode 100644 (file)
index 0000000..c8edcbf
--- /dev/null
@@ -0,0 +1 @@
+us-before-point = 1_.2
diff --git a/assets/toml-test/tests/invalid/inline-table/add.toml b/assets/toml-test/tests/invalid/inline-table/add.toml
new file mode 100644 (file)
index 0000000..bb8b3e8
--- /dev/null
@@ -0,0 +1,3 @@
+a={}
+# Inline tables are immutable and can't be extended
+[a.b]
diff --git a/assets/toml-test/tests/invalid/inline-table/double-comma.toml b/assets/toml-test/tests/invalid/inline-table/double-comma.toml
new file mode 100644 (file)
index 0000000..2d2913a
--- /dev/null
@@ -0,0 +1 @@
+t = {x=3,,y=4}
diff --git a/assets/toml-test/tests/invalid/inline-table/duplicate-key.toml b/assets/toml-test/tests/invalid/inline-table/duplicate-key.toml
new file mode 100644 (file)
index 0000000..0789e14
--- /dev/null
@@ -0,0 +1,2 @@
+# Duplicate keys within an inline table are invalid
+a={b=1, b=2}
diff --git a/assets/toml-test/tests/invalid/inline-table/empty.toml b/assets/toml-test/tests/invalid/inline-table/empty.toml
new file mode 100644 (file)
index 0000000..ebbb066
--- /dev/null
@@ -0,0 +1 @@
+t = {,}
diff --git a/assets/toml-test/tests/invalid/inline-table/linebreak-1.toml b/assets/toml-test/tests/invalid/inline-table/linebreak-1.toml
new file mode 100644 (file)
index 0000000..0ae44b6
--- /dev/null
@@ -0,0 +1,4 @@
+# No newlines are allowed between the curly braces unless they are valid within
+# a value.
+simple = { a = 1 
+}
diff --git a/assets/toml-test/tests/invalid/inline-table/linebreak-2.toml b/assets/toml-test/tests/invalid/inline-table/linebreak-2.toml
new file mode 100644 (file)
index 0000000..5ea4eaf
--- /dev/null
@@ -0,0 +1,2 @@
+t = {a=1,
+b=2}
diff --git a/assets/toml-test/tests/invalid/inline-table/linebreak-3.toml b/assets/toml-test/tests/invalid/inline-table/linebreak-3.toml
new file mode 100644 (file)
index 0000000..7f6e892
--- /dev/null
@@ -0,0 +1,2 @@
+t = {a=1
+,b=2}
diff --git a/assets/toml-test/tests/invalid/inline-table/linebreak-4.toml b/assets/toml-test/tests/invalid/inline-table/linebreak-4.toml
new file mode 100644 (file)
index 0000000..3f34e15
--- /dev/null
@@ -0,0 +1,4 @@
+json_like = {
+          first = "Tom",
+          last = "Preston-Werner"
+}
diff --git a/assets/toml-test/tests/invalid/inline-table/no-comma.toml b/assets/toml-test/tests/invalid/inline-table/no-comma.toml
new file mode 100644 (file)
index 0000000..0a4083d
--- /dev/null
@@ -0,0 +1 @@
+t = {x = 3 y = 4}
diff --git a/assets/toml-test/tests/invalid/inline-table/overwrite.toml b/assets/toml-test/tests/invalid/inline-table/overwrite.toml
new file mode 100644 (file)
index 0000000..4da0a85
--- /dev/null
@@ -0,0 +1,3 @@
+a.b=0
+# Since table "a" is already defined, it can't be replaced by an inline table.
+a={}
diff --git a/assets/toml-test/tests/invalid/inline-table/trailing-comma.toml b/assets/toml-test/tests/invalid/inline-table/trailing-comma.toml
new file mode 100644 (file)
index 0000000..6b67e02
--- /dev/null
@@ -0,0 +1,3 @@
+# A terminating comma (also called trailing comma) is not permitted after the
+# last key/value pair in an inline table
+abc = { abc = 123, }
diff --git a/assets/toml-test/tests/invalid/integer/capital-bin.toml b/assets/toml-test/tests/invalid/integer/capital-bin.toml
new file mode 100644 (file)
index 0000000..bea4e5e
--- /dev/null
@@ -0,0 +1 @@
+capital-bin = 0B0
diff --git a/assets/toml-test/tests/invalid/integer/capital-hex.toml b/assets/toml-test/tests/invalid/integer/capital-hex.toml
new file mode 100644 (file)
index 0000000..bc064bb
--- /dev/null
@@ -0,0 +1 @@
+capital-hex = 0X1
diff --git a/assets/toml-test/tests/invalid/integer/capital-oct.toml b/assets/toml-test/tests/invalid/integer/capital-oct.toml
new file mode 100644 (file)
index 0000000..ea08a4d
--- /dev/null
@@ -0,0 +1 @@
+capital-oct = 0O0
diff --git a/assets/toml-test/tests/invalid/integer/double-sign-nex.toml b/assets/toml-test/tests/invalid/integer/double-sign-nex.toml
new file mode 100644 (file)
index 0000000..ff014cf
--- /dev/null
@@ -0,0 +1 @@
+double-sign-nex = --99
diff --git a/assets/toml-test/tests/invalid/integer/double-sign-plus.toml b/assets/toml-test/tests/invalid/integer/double-sign-plus.toml
new file mode 100644 (file)
index 0000000..845ebb5
--- /dev/null
@@ -0,0 +1 @@
+double-sign-plus = ++99
diff --git a/assets/toml-test/tests/invalid/integer/double-us.toml b/assets/toml-test/tests/invalid/integer/double-us.toml
new file mode 100644 (file)
index 0000000..cd00561
--- /dev/null
@@ -0,0 +1 @@
+double-us = 1__23
diff --git a/assets/toml-test/tests/invalid/integer/incomplete-bin.toml b/assets/toml-test/tests/invalid/integer/incomplete-bin.toml
new file mode 100644 (file)
index 0000000..2d80143
--- /dev/null
@@ -0,0 +1 @@
+incomplete-bin = 0b
diff --git a/assets/toml-test/tests/invalid/integer/incomplete-hex.toml b/assets/toml-test/tests/invalid/integer/incomplete-hex.toml
new file mode 100644 (file)
index 0000000..691b09c
--- /dev/null
@@ -0,0 +1 @@
+incomplete-hex = 0x
diff --git a/assets/toml-test/tests/invalid/integer/incomplete-oct.toml b/assets/toml-test/tests/invalid/integer/incomplete-oct.toml
new file mode 100644 (file)
index 0000000..a248b71
--- /dev/null
@@ -0,0 +1 @@
+incomplete-oct = 0o
diff --git a/assets/toml-test/tests/invalid/integer/integer.multi b/assets/toml-test/tests/invalid/integer/integer.multi
new file mode 100644 (file)
index 0000000..40ac409
--- /dev/null
@@ -0,0 +1,41 @@
+leading-zero-1 = 01
+leading-zero-2 = 00
+leading-zero-3 = 0_0
+leading-zero-sign-1 = -01
+leading-zero-sign-2 = +01
+leading-zero-sign-3 = +0_1
+
+double-sign-plus = ++99
+double-sign-nex = --99
+
+negative-hex = -0xff
+negative-bin = -0b11010110
+negative-oct = -0o99
+
+positive-hex = +0xff
+positive-bin = +0b11010110
+positive-oct = +0o99
+
+trailing-us = 123_
+leading-us = _123
+double-us = 1__23
+
+us-after-hex = 0x_1
+us-after-oct = 0o_1
+us-after-bin = 0b_1
+
+trailing-us-hex = 0x1_
+trailing-us-oct = 0o1_
+trailing-us-bin = 0b1_
+
+leading-us-hex = _0o1
+leading-us-oct = _0o1
+leading-us-bin = _0o1
+
+invalid-hex = 0xaafz
+invalid-oct = 0o778
+invalid-bin = 0b0012
+
+capital-hex = 0X1
+capital-oct = 0O0
+capital-bin = 0B0
diff --git a/assets/toml-test/tests/invalid/integer/invalid-bin.toml b/assets/toml-test/tests/invalid/integer/invalid-bin.toml
new file mode 100644 (file)
index 0000000..d018258
--- /dev/null
@@ -0,0 +1 @@
+invalid-bin = 0b0012
diff --git a/assets/toml-test/tests/invalid/integer/invalid-hex.toml b/assets/toml-test/tests/invalid/integer/invalid-hex.toml
new file mode 100644 (file)
index 0000000..7cc0e85
--- /dev/null
@@ -0,0 +1 @@
+invalid-hex = 0xaafz
diff --git a/assets/toml-test/tests/invalid/integer/invalid-oct.toml b/assets/toml-test/tests/invalid/integer/invalid-oct.toml
new file mode 100644 (file)
index 0000000..03181b1
--- /dev/null
@@ -0,0 +1 @@
+invalid-oct = 0o778
diff --git a/assets/toml-test/tests/invalid/integer/leading-us-bin.toml b/assets/toml-test/tests/invalid/integer/leading-us-bin.toml
new file mode 100644 (file)
index 0000000..8885c03
--- /dev/null
@@ -0,0 +1 @@
+leading-us-bin = _0o1
diff --git a/assets/toml-test/tests/invalid/integer/leading-us-hex.toml b/assets/toml-test/tests/invalid/integer/leading-us-hex.toml
new file mode 100644 (file)
index 0000000..9f193f8
--- /dev/null
@@ -0,0 +1 @@
+leading-us-hex = _0o1
diff --git a/assets/toml-test/tests/invalid/integer/leading-us-oct.toml b/assets/toml-test/tests/invalid/integer/leading-us-oct.toml
new file mode 100644 (file)
index 0000000..a717f1c
--- /dev/null
@@ -0,0 +1 @@
+leading-us-oct = _0o1
diff --git a/assets/toml-test/tests/invalid/integer/leading-us.toml b/assets/toml-test/tests/invalid/integer/leading-us.toml
new file mode 100644 (file)
index 0000000..d059f50
--- /dev/null
@@ -0,0 +1 @@
+leading-us = _123
diff --git a/assets/toml-test/tests/invalid/integer/leading-zero-1.toml b/assets/toml-test/tests/invalid/integer/leading-zero-1.toml
new file mode 100644 (file)
index 0000000..eba6bda
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-1 = 01
diff --git a/assets/toml-test/tests/invalid/integer/leading-zero-2.toml b/assets/toml-test/tests/invalid/integer/leading-zero-2.toml
new file mode 100644 (file)
index 0000000..436af56
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-2 = 00
diff --git a/assets/toml-test/tests/invalid/integer/leading-zero-3.toml b/assets/toml-test/tests/invalid/integer/leading-zero-3.toml
new file mode 100644 (file)
index 0000000..5404fc8
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-3 = 0_0
diff --git a/assets/toml-test/tests/invalid/integer/leading-zero-sign-1.toml b/assets/toml-test/tests/invalid/integer/leading-zero-sign-1.toml
new file mode 100644 (file)
index 0000000..1f15a9d
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-sign-1 = -01
diff --git a/assets/toml-test/tests/invalid/integer/leading-zero-sign-2.toml b/assets/toml-test/tests/invalid/integer/leading-zero-sign-2.toml
new file mode 100644 (file)
index 0000000..fa259c3
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-sign-2 = +01
diff --git a/assets/toml-test/tests/invalid/integer/leading-zero-sign-3.toml b/assets/toml-test/tests/invalid/integer/leading-zero-sign-3.toml
new file mode 100644 (file)
index 0000000..3ac64a5
--- /dev/null
@@ -0,0 +1 @@
+leading-zero-sign-3 = +0_1
diff --git a/assets/toml-test/tests/invalid/integer/negative-bin.toml b/assets/toml-test/tests/invalid/integer/negative-bin.toml
new file mode 100644 (file)
index 0000000..948b236
--- /dev/null
@@ -0,0 +1 @@
+negative-bin = -0b11010110
diff --git a/assets/toml-test/tests/invalid/integer/negative-hex.toml b/assets/toml-test/tests/invalid/integer/negative-hex.toml
new file mode 100644 (file)
index 0000000..67c31ea
--- /dev/null
@@ -0,0 +1 @@
+negative-hex = -0xff
diff --git a/assets/toml-test/tests/invalid/integer/negative-oct.toml b/assets/toml-test/tests/invalid/integer/negative-oct.toml
new file mode 100644 (file)
index 0000000..b0c5ab0
--- /dev/null
@@ -0,0 +1 @@
+negative-oct = -0o99
diff --git a/assets/toml-test/tests/invalid/integer/positive-bin.toml b/assets/toml-test/tests/invalid/integer/positive-bin.toml
new file mode 100644 (file)
index 0000000..7d6de65
--- /dev/null
@@ -0,0 +1 @@
+positive-bin = +0b11010110
diff --git a/assets/toml-test/tests/invalid/integer/positive-hex.toml b/assets/toml-test/tests/invalid/integer/positive-hex.toml
new file mode 100644 (file)
index 0000000..bd503aa
--- /dev/null
@@ -0,0 +1 @@
+positive-hex = +0xff
diff --git a/assets/toml-test/tests/invalid/integer/positive-oct.toml b/assets/toml-test/tests/invalid/integer/positive-oct.toml
new file mode 100644 (file)
index 0000000..d77aa52
--- /dev/null
@@ -0,0 +1 @@
+positive-oct = +0o99
diff --git a/assets/toml-test/tests/invalid/integer/text-after-integer.toml b/assets/toml-test/tests/invalid/integer/text-after-integer.toml
new file mode 100644 (file)
index 0000000..42de7af
--- /dev/null
@@ -0,0 +1 @@
+answer = 42 the ultimate answer?
diff --git a/assets/toml-test/tests/invalid/integer/trailing-us-bin.toml b/assets/toml-test/tests/invalid/integer/trailing-us-bin.toml
new file mode 100644 (file)
index 0000000..9a0b574
--- /dev/null
@@ -0,0 +1 @@
+trailing-us-bin = 0b1_
diff --git a/assets/toml-test/tests/invalid/integer/trailing-us-hex.toml b/assets/toml-test/tests/invalid/integer/trailing-us-hex.toml
new file mode 100644 (file)
index 0000000..2a96455
--- /dev/null
@@ -0,0 +1 @@
+trailing-us-hex = 0x1_
diff --git a/assets/toml-test/tests/invalid/integer/trailing-us-oct.toml b/assets/toml-test/tests/invalid/integer/trailing-us-oct.toml
new file mode 100644 (file)
index 0000000..d28e8bc
--- /dev/null
@@ -0,0 +1 @@
+trailing-us-oct = 0o1_
diff --git a/assets/toml-test/tests/invalid/integer/trailing-us.toml b/assets/toml-test/tests/invalid/integer/trailing-us.toml
new file mode 100644 (file)
index 0000000..e11e8ff
--- /dev/null
@@ -0,0 +1 @@
+trailing-us = 123_
diff --git a/assets/toml-test/tests/invalid/integer/us-after-bin.toml b/assets/toml-test/tests/invalid/integer/us-after-bin.toml
new file mode 100644 (file)
index 0000000..61dd895
--- /dev/null
@@ -0,0 +1 @@
+us-after-bin = 0b_1
diff --git a/assets/toml-test/tests/invalid/integer/us-after-hex.toml b/assets/toml-test/tests/invalid/integer/us-after-hex.toml
new file mode 100644 (file)
index 0000000..200220a
--- /dev/null
@@ -0,0 +1 @@
+us-after-hex = 0x_1
diff --git a/assets/toml-test/tests/invalid/integer/us-after-oct.toml b/assets/toml-test/tests/invalid/integer/us-after-oct.toml
new file mode 100644 (file)
index 0000000..23f5300
--- /dev/null
@@ -0,0 +1 @@
+us-after-oct = 0o_1
diff --git a/assets/toml-test/tests/invalid/key/after-array.toml b/assets/toml-test/tests/invalid/key/after-array.toml
new file mode 100644 (file)
index 0000000..5c1a1b0
--- /dev/null
@@ -0,0 +1 @@
+[[agencies]] owner = "S Cjelli"
diff --git a/assets/toml-test/tests/invalid/key/after-table.toml b/assets/toml-test/tests/invalid/key/after-table.toml
new file mode 100644 (file)
index 0000000..6886784
--- /dev/null
@@ -0,0 +1 @@
+[error] this = "should not be here"
diff --git a/assets/toml-test/tests/invalid/key/after-value.toml b/assets/toml-test/tests/invalid/key/after-value.toml
new file mode 100644 (file)
index 0000000..e05c47c
--- /dev/null
@@ -0,0 +1 @@
+first = "Tom" last = "Preston-Werner" # INVALID
diff --git a/assets/toml-test/tests/invalid/key/bare-invalid-character.toml b/assets/toml-test/tests/invalid/key/bare-invalid-character.toml
new file mode 100644 (file)
index 0000000..e50dbe3
--- /dev/null
@@ -0,0 +1 @@
+bare!key = 123
diff --git a/assets/toml-test/tests/invalid/key/dotted-redefine-table.toml b/assets/toml-test/tests/invalid/key/dotted-redefine-table.toml
new file mode 100644 (file)
index 0000000..55e25ac
--- /dev/null
@@ -0,0 +1,4 @@
+# Defined a.b as int
+a.b = 1
+# Tries to access it as table: error
+a.b.c = 2
diff --git a/assets/toml-test/tests/invalid/key/duplicate-keys.toml b/assets/toml-test/tests/invalid/key/duplicate-keys.toml
new file mode 100644 (file)
index 0000000..9b5aee0
--- /dev/null
@@ -0,0 +1,2 @@
+dupe = false
+dupe = true
diff --git a/assets/toml-test/tests/invalid/key/duplicate.toml b/assets/toml-test/tests/invalid/key/duplicate.toml
new file mode 100644 (file)
index 0000000..7847bd4
--- /dev/null
@@ -0,0 +1,3 @@
+# DO NOT DO THIS
+name = "Tom"
+name = "Pradyun"
diff --git a/assets/toml-test/tests/invalid/key/empty.toml b/assets/toml-test/tests/invalid/key/empty.toml
new file mode 100644 (file)
index 0000000..09f998f
--- /dev/null
@@ -0,0 +1 @@
+ = 1
diff --git a/assets/toml-test/tests/invalid/key/escape.toml b/assets/toml-test/tests/invalid/key/escape.toml
new file mode 100644 (file)
index 0000000..cdb8f4d
--- /dev/null
@@ -0,0 +1 @@
+\u00c0 = "latin capital letter A with grave"
diff --git a/assets/toml-test/tests/invalid/key/hash.toml b/assets/toml-test/tests/invalid/key/hash.toml
new file mode 100644 (file)
index 0000000..e321b1f
--- /dev/null
@@ -0,0 +1 @@
+a# = 1
diff --git a/assets/toml-test/tests/invalid/key/multiline.toml b/assets/toml-test/tests/invalid/key/multiline.toml
new file mode 100644 (file)
index 0000000..31ff67e
--- /dev/null
@@ -0,0 +1,2 @@
+"""long
+key""" = 1
diff --git a/assets/toml-test/tests/invalid/key/newline.toml b/assets/toml-test/tests/invalid/key/newline.toml
new file mode 100644 (file)
index 0000000..24acaa1
--- /dev/null
@@ -0,0 +1,2 @@
+barekey
+   = 123
diff --git a/assets/toml-test/tests/invalid/key/no-eol.toml b/assets/toml-test/tests/invalid/key/no-eol.toml
new file mode 100644 (file)
index 0000000..3c58eee
--- /dev/null
@@ -0,0 +1 @@
+a = 1 b = 2
diff --git a/assets/toml-test/tests/invalid/key/open-bracket.toml b/assets/toml-test/tests/invalid/key/open-bracket.toml
new file mode 100644 (file)
index 0000000..f0aeb16
--- /dev/null
@@ -0,0 +1 @@
+[abc = 1
diff --git a/assets/toml-test/tests/invalid/key/partial-quoted.toml b/assets/toml-test/tests/invalid/key/partial-quoted.toml
new file mode 100644 (file)
index 0000000..e491a2f
--- /dev/null
@@ -0,0 +1 @@
+partial"quoted" = 5
diff --git a/assets/toml-test/tests/invalid/key/quoted-unclosed-1.toml b/assets/toml-test/tests/invalid/key/quoted-unclosed-1.toml
new file mode 100644 (file)
index 0000000..4ea331a
--- /dev/null
@@ -0,0 +1 @@
+"key = x
diff --git a/assets/toml-test/tests/invalid/key/quoted-unclosed-2.toml b/assets/toml-test/tests/invalid/key/quoted-unclosed-2.toml
new file mode 100644 (file)
index 0000000..d341d80
--- /dev/null
@@ -0,0 +1 @@
+"key
diff --git a/assets/toml-test/tests/invalid/key/single-open-bracket.toml b/assets/toml-test/tests/invalid/key/single-open-bracket.toml
new file mode 100644 (file)
index 0000000..558ed37
--- /dev/null
@@ -0,0 +1 @@
+[
diff --git a/assets/toml-test/tests/invalid/key/space.toml b/assets/toml-test/tests/invalid/key/space.toml
new file mode 100644 (file)
index 0000000..7c22703
--- /dev/null
@@ -0,0 +1 @@
+a b = 1
diff --git a/assets/toml-test/tests/invalid/key/special-character.toml b/assets/toml-test/tests/invalid/key/special-character.toml
new file mode 100644 (file)
index 0000000..bc181a5
--- /dev/null
@@ -0,0 +1 @@
+μ = "greek small letter mu"
diff --git a/assets/toml-test/tests/invalid/key/start-bracket.toml b/assets/toml-test/tests/invalid/key/start-bracket.toml
new file mode 100644 (file)
index 0000000..e0597ae
--- /dev/null
@@ -0,0 +1,3 @@
+[a]
+[xyz = 5
+[b]
diff --git a/assets/toml-test/tests/invalid/key/start-dot.toml b/assets/toml-test/tests/invalid/key/start-dot.toml
new file mode 100644 (file)
index 0000000..9967c7d
--- /dev/null
@@ -0,0 +1 @@
+.key = 1
diff --git a/assets/toml-test/tests/invalid/key/two-equals.toml b/assets/toml-test/tests/invalid/key/two-equals.toml
new file mode 100644 (file)
index 0000000..25a0378
--- /dev/null
@@ -0,0 +1 @@
+key= = 1
diff --git a/assets/toml-test/tests/invalid/key/two-equals2.toml b/assets/toml-test/tests/invalid/key/two-equals2.toml
new file mode 100644 (file)
index 0000000..c5f2de8
--- /dev/null
@@ -0,0 +1 @@
+a==1
diff --git a/assets/toml-test/tests/invalid/key/two-equals3.toml b/assets/toml-test/tests/invalid/key/two-equals3.toml
new file mode 100644 (file)
index 0000000..eb20372
--- /dev/null
@@ -0,0 +1 @@
+a=b=1
diff --git a/assets/toml-test/tests/invalid/key/without-value-1.toml b/assets/toml-test/tests/invalid/key/without-value-1.toml
new file mode 100644 (file)
index 0000000..06bfde4
--- /dev/null
@@ -0,0 +1 @@
+key
diff --git a/assets/toml-test/tests/invalid/key/without-value-2.toml b/assets/toml-test/tests/invalid/key/without-value-2.toml
new file mode 100644 (file)
index 0000000..ca6d7eb
--- /dev/null
@@ -0,0 +1 @@
+key = 
diff --git a/assets/toml-test/tests/invalid/key/without-value-3.toml b/assets/toml-test/tests/invalid/key/without-value-3.toml
new file mode 100644 (file)
index 0000000..a9c06ef
--- /dev/null
@@ -0,0 +1 @@
+"key"
diff --git a/assets/toml-test/tests/invalid/key/without-value-4.toml b/assets/toml-test/tests/invalid/key/without-value-4.toml
new file mode 100644 (file)
index 0000000..adf9d62
--- /dev/null
@@ -0,0 +1 @@
+"key" = 
diff --git a/assets/toml-test/tests/invalid/spec/inline-table-2-0.toml b/assets/toml-test/tests/invalid/spec/inline-table-2-0.toml
new file mode 100644 (file)
index 0000000..7689e14
--- /dev/null
@@ -0,0 +1,3 @@
+[product]
+type = { name = "Nail" }
+type.edible = false  # INVALID
diff --git a/assets/toml-test/tests/invalid/spec/inline-table-3-0.toml b/assets/toml-test/tests/invalid/spec/inline-table-3-0.toml
new file mode 100644 (file)
index 0000000..d6937eb
--- /dev/null
@@ -0,0 +1,3 @@
+[product]
+type.name = "Nail"
+type = { edible = false }  # INVALID
diff --git a/assets/toml-test/tests/invalid/spec/key-value-pair-1.toml b/assets/toml-test/tests/invalid/spec/key-value-pair-1.toml
new file mode 100644 (file)
index 0000000..56f085a
--- /dev/null
@@ -0,0 +1 @@
+key = # INVALID
diff --git a/assets/toml-test/tests/invalid/spec/keys-2.toml b/assets/toml-test/tests/invalid/spec/keys-2.toml
new file mode 100644 (file)
index 0000000..1547a5c
--- /dev/null
@@ -0,0 +1,3 @@
+= "no key name"  # INVALID
+"" = "blank"     # VALID but discouraged
+'' = 'blank'     # VALID but discouraged
diff --git a/assets/toml-test/tests/invalid/spec/string-4-0.toml b/assets/toml-test/tests/invalid/spec/string-4-0.toml
new file mode 100644 (file)
index 0000000..72071ea
--- /dev/null
@@ -0,0 +1,7 @@
+str4 = """Here are two quotation marks: "". Simple enough."""
+str5 = """Here are three quotation marks: """."""  # INVALID
+str5 = """Here are three quotation marks: ""\"."""
+str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\"."""
+
+# "This," she said, "is just a pointless statement."
+str7 = """"This," she said, "is just a pointless statement.""""
diff --git a/assets/toml-test/tests/invalid/spec/string-7-0.toml b/assets/toml-test/tests/invalid/spec/string-7-0.toml
new file mode 100644 (file)
index 0000000..7b20aec
--- /dev/null
@@ -0,0 +1,7 @@
+quot15 = '''Here are fifteen quotation marks: """""""""""""""'''
+
+apos15 = '''Here are fifteen apostrophes: ''''''''''''''''''  # INVALID
+apos15 = "Here are fifteen apostrophes: '''''''''''''''"
+
+# 'That,' she said, 'is still pointless.'
+str = ''''That,' she said, 'is still pointless.''''
diff --git a/assets/toml-test/tests/invalid/spec/table-9-0.toml b/assets/toml-test/tests/invalid/spec/table-9-0.toml
new file mode 100644 (file)
index 0000000..adc3841
--- /dev/null
@@ -0,0 +1,9 @@
+[fruit]
+apple.color = "red"
+apple.taste.sweet = true
+
+[fruit.apple]  # INVALID
+# [fruit.apple.taste]  # INVALID
+
+[fruit.apple.texture]  # you can add sub-tables
+smooth = true
diff --git a/assets/toml-test/tests/invalid/spec/table-9-1.toml b/assets/toml-test/tests/invalid/spec/table-9-1.toml
new file mode 100644 (file)
index 0000000..3b5644e
--- /dev/null
@@ -0,0 +1,9 @@
+[fruit]
+apple.color = "red"
+apple.taste.sweet = true
+
+# [fruit.apple]  # INVALID
+[fruit.apple.taste]  # INVALID
+
+[fruit.apple.texture]  # you can add sub-tables
+smooth = true
diff --git a/assets/toml-test/tests/invalid/string/bad-byte-escape.toml b/assets/toml-test/tests/invalid/string/bad-byte-escape.toml
new file mode 100644 (file)
index 0000000..4c7be59
--- /dev/null
@@ -0,0 +1 @@
+naughty = "\xAg"
diff --git a/assets/toml-test/tests/invalid/string/bad-codepoint.toml b/assets/toml-test/tests/invalid/string/bad-codepoint.toml
new file mode 100644 (file)
index 0000000..592db75
--- /dev/null
@@ -0,0 +1 @@
+invalid-codepoint = "This string contains a non scalar unicode codepoint \uD801"
diff --git a/assets/toml-test/tests/invalid/string/bad-concat.toml b/assets/toml-test/tests/invalid/string/bad-concat.toml
new file mode 100644 (file)
index 0000000..fc6d3c9
--- /dev/null
@@ -0,0 +1 @@
+no_concat = "first" "second"
diff --git a/assets/toml-test/tests/invalid/string/bad-escape-1.toml b/assets/toml-test/tests/invalid/string/bad-escape-1.toml
new file mode 100644 (file)
index 0000000..60acb0c
--- /dev/null
@@ -0,0 +1 @@
+invalid-escape = "This string has a bad \a escape character."
diff --git a/assets/toml-test/tests/invalid/string/bad-escape-2.toml b/assets/toml-test/tests/invalid/string/bad-escape-2.toml
new file mode 100644 (file)
index 0000000..2a20d8c
--- /dev/null
@@ -0,0 +1,2 @@
+invalid-escape = "This string has a bad \  escape character."
+
diff --git a/assets/toml-test/tests/invalid/string/bad-hex-esc-1.toml b/assets/toml-test/tests/invalid/string/bad-hex-esc-1.toml
new file mode 100644 (file)
index 0000000..199c961
--- /dev/null
@@ -0,0 +1 @@
+bad-hex-esc-1 = "\x0g"
diff --git a/assets/toml-test/tests/invalid/string/bad-hex-esc-2.toml b/assets/toml-test/tests/invalid/string/bad-hex-esc-2.toml
new file mode 100644 (file)
index 0000000..3ff0765
--- /dev/null
@@ -0,0 +1 @@
+bad-hex-esc-2 = "\xG0"
diff --git a/assets/toml-test/tests/invalid/string/bad-hex-esc-3.toml b/assets/toml-test/tests/invalid/string/bad-hex-esc-3.toml
new file mode 100644 (file)
index 0000000..5a1df54
--- /dev/null
@@ -0,0 +1 @@
+bad-hex-esc-3 = "\x"
diff --git a/assets/toml-test/tests/invalid/string/bad-hex-esc-4.toml b/assets/toml-test/tests/invalid/string/bad-hex-esc-4.toml
new file mode 100644 (file)
index 0000000..4df871b
--- /dev/null
@@ -0,0 +1 @@
+bad-hex-esc-4 = "\x 50"
diff --git a/assets/toml-test/tests/invalid/string/bad-hex-esc-5.toml b/assets/toml-test/tests/invalid/string/bad-hex-esc-5.toml
new file mode 100644 (file)
index 0000000..379922f
--- /dev/null
@@ -0,0 +1 @@
+bad-hex-esc-5 = "\x 50"
diff --git a/assets/toml-test/tests/invalid/string/bad-hex-esc.multi b/assets/toml-test/tests/invalid/string/bad-hex-esc.multi
new file mode 100644 (file)
index 0000000..5216ce0
--- /dev/null
@@ -0,0 +1,4 @@
+bad-hex-esc-1 = "\x0g"
+bad-hex-esc-2 = "\xG0"
+bad-hex-esc-3 = "\x"
+bad-hex-esc-4 = "\x 50"
diff --git a/assets/toml-test/tests/invalid/string/bad-multiline.toml b/assets/toml-test/tests/invalid/string/bad-multiline.toml
new file mode 100644 (file)
index 0000000..786046b
--- /dev/null
@@ -0,0 +1,2 @@
+multi = "first line
+second line"
diff --git a/assets/toml-test/tests/invalid/string/bad-slash-escape.toml b/assets/toml-test/tests/invalid/string/bad-slash-escape.toml
new file mode 100644 (file)
index 0000000..154abad
--- /dev/null
@@ -0,0 +1 @@
+invalid-escape = "This string has a bad \/ escape character."
diff --git a/assets/toml-test/tests/invalid/string/bad-uni-esc-1.toml b/assets/toml-test/tests/invalid/string/bad-uni-esc-1.toml
new file mode 100644 (file)
index 0000000..9eae4ab
--- /dev/null
@@ -0,0 +1 @@
+str = "val\ue"
diff --git a/assets/toml-test/tests/invalid/string/bad-uni-esc-2.toml b/assets/toml-test/tests/invalid/string/bad-uni-esc-2.toml
new file mode 100644 (file)
index 0000000..dce8b08
--- /dev/null
@@ -0,0 +1 @@
+str = "val\Ux"
diff --git a/assets/toml-test/tests/invalid/string/bad-uni-esc-3.toml b/assets/toml-test/tests/invalid/string/bad-uni-esc-3.toml
new file mode 100644 (file)
index 0000000..95ea098
--- /dev/null
@@ -0,0 +1,2 @@
+str = "val\U0000000"
+
diff --git a/assets/toml-test/tests/invalid/string/bad-uni-esc-4.toml b/assets/toml-test/tests/invalid/string/bad-uni-esc-4.toml
new file mode 100644 (file)
index 0000000..b90d0fb
--- /dev/null
@@ -0,0 +1 @@
+str = "val\U0000"
diff --git a/assets/toml-test/tests/invalid/string/bad-uni-esc-5.toml b/assets/toml-test/tests/invalid/string/bad-uni-esc-5.toml
new file mode 100644 (file)
index 0000000..448d3c6
--- /dev/null
@@ -0,0 +1 @@
+str = "val\Ugggggggg"
diff --git a/assets/toml-test/tests/invalid/string/basic-byte-escapes.toml b/assets/toml-test/tests/invalid/string/basic-byte-escapes.toml
new file mode 100644 (file)
index 0000000..e94452a
--- /dev/null
@@ -0,0 +1 @@
+answer = "\x33"
diff --git a/assets/toml-test/tests/invalid/string/basic-multiline-out-of-range-unicode-escape-1.toml b/assets/toml-test/tests/invalid/string/basic-multiline-out-of-range-unicode-escape-1.toml
new file mode 100644 (file)
index 0000000..b27e203
--- /dev/null
@@ -0,0 +1 @@
+a = """\UFFFFFFFF"""
diff --git a/assets/toml-test/tests/invalid/string/basic-multiline-out-of-range-unicode-escape-2.toml b/assets/toml-test/tests/invalid/string/basic-multiline-out-of-range-unicode-escape-2.toml
new file mode 100644 (file)
index 0000000..17a9361
--- /dev/null
@@ -0,0 +1 @@
+a = """\U00D80000"""
diff --git a/assets/toml-test/tests/invalid/string/basic-multiline-quotes.toml b/assets/toml-test/tests/invalid/string/basic-multiline-quotes.toml
new file mode 100644 (file)
index 0000000..02ebf13
--- /dev/null
@@ -0,0 +1 @@
+str5 = """Here are three quotation marks: """."""
diff --git a/assets/toml-test/tests/invalid/string/basic-multiline-unknown-escape.toml b/assets/toml-test/tests/invalid/string/basic-multiline-unknown-escape.toml
new file mode 100644 (file)
index 0000000..35c5cc5
--- /dev/null
@@ -0,0 +1 @@
+a = """\@"""
diff --git a/assets/toml-test/tests/invalid/string/basic-out-of-range-unicode-escape-1.toml b/assets/toml-test/tests/invalid/string/basic-out-of-range-unicode-escape-1.toml
new file mode 100644 (file)
index 0000000..ada1f55
--- /dev/null
@@ -0,0 +1 @@
+a = "\UFFFFFFFF"
diff --git a/assets/toml-test/tests/invalid/string/basic-out-of-range-unicode-escape-2.toml b/assets/toml-test/tests/invalid/string/basic-out-of-range-unicode-escape-2.toml
new file mode 100644 (file)
index 0000000..d4833b3
--- /dev/null
@@ -0,0 +1 @@
+a = "\U00D80000"
diff --git a/assets/toml-test/tests/invalid/string/basic-unknown-escape.toml b/assets/toml-test/tests/invalid/string/basic-unknown-escape.toml
new file mode 100644 (file)
index 0000000..381dd85
--- /dev/null
@@ -0,0 +1 @@
+a = "\@"
diff --git a/assets/toml-test/tests/invalid/string/literal-multiline-quotes-1.toml b/assets/toml-test/tests/invalid/string/literal-multiline-quotes-1.toml
new file mode 100644 (file)
index 0000000..9cfb763
--- /dev/null
@@ -0,0 +1,2 @@
+a = '''6 apostrophes: ''''''
+
diff --git a/assets/toml-test/tests/invalid/string/literal-multiline-quotes-2.toml b/assets/toml-test/tests/invalid/string/literal-multiline-quotes-2.toml
new file mode 100644 (file)
index 0000000..9924236
--- /dev/null
@@ -0,0 +1 @@
+a = '''15 apostrophes: ''''''''''''''''''
diff --git a/assets/toml-test/tests/invalid/string/missing-quotes.toml b/assets/toml-test/tests/invalid/string/missing-quotes.toml
new file mode 100644 (file)
index 0000000..2292793
--- /dev/null
@@ -0,0 +1 @@
+name = value
diff --git a/assets/toml-test/tests/invalid/string/multiline-bad-escape-1.toml b/assets/toml-test/tests/invalid/string/multiline-bad-escape-1.toml
new file mode 100644 (file)
index 0000000..5de9e15
--- /dev/null
@@ -0,0 +1,2 @@
+k = """t\a"""
+
diff --git a/assets/toml-test/tests/invalid/string/multiline-bad-escape-2.toml b/assets/toml-test/tests/invalid/string/multiline-bad-escape-2.toml
new file mode 100644 (file)
index 0000000..3d1ac10
--- /dev/null
@@ -0,0 +1,2 @@
+# \<Space> is not a valid escape.
+k = """t\ t"""
diff --git a/assets/toml-test/tests/invalid/string/multiline-bad-escape-3.toml b/assets/toml-test/tests/invalid/string/multiline-bad-escape-3.toml
new file mode 100644 (file)
index 0000000..95621eb
--- /dev/null
@@ -0,0 +1,3 @@
+# \<Space> is not a valid escape.
+k = """t\ """
+
diff --git a/assets/toml-test/tests/invalid/string/multiline-escape-space.toml b/assets/toml-test/tests/invalid/string/multiline-escape-space.toml
new file mode 100644 (file)
index 0000000..13570d3
--- /dev/null
@@ -0,0 +1,3 @@
+a = """
+  foo \ \n
+  bar"""
diff --git a/assets/toml-test/tests/invalid/string/multiline-no-close-2.toml b/assets/toml-test/tests/invalid/string/multiline-no-close-2.toml
new file mode 100644 (file)
index 0000000..f469402
--- /dev/null
@@ -0,0 +1 @@
+x="""
diff --git a/assets/toml-test/tests/invalid/string/multiline-no-close.toml b/assets/toml-test/tests/invalid/string/multiline-no-close.toml
new file mode 100644 (file)
index 0000000..4ca9597
--- /dev/null
@@ -0,0 +1,2 @@
+invalid = """
+    this will fail
diff --git a/assets/toml-test/tests/invalid/string/multiline-quotes-1.toml b/assets/toml-test/tests/invalid/string/multiline-quotes-1.toml
new file mode 100644 (file)
index 0000000..9f7a42b
--- /dev/null
@@ -0,0 +1 @@
+a = """6 quotes: """"""
diff --git a/assets/toml-test/tests/invalid/string/no-close.toml b/assets/toml-test/tests/invalid/string/no-close.toml
new file mode 100644 (file)
index 0000000..0c292fc
--- /dev/null
@@ -0,0 +1 @@
+no-ending-quote = "One time, at band camp
diff --git a/assets/toml-test/tests/invalid/string/text-after-string.toml b/assets/toml-test/tests/invalid/string/text-after-string.toml
new file mode 100644 (file)
index 0000000..c92a6f1
--- /dev/null
@@ -0,0 +1 @@
+string = "Is there life after strings?" No.
diff --git a/assets/toml-test/tests/invalid/string/wrong-close.toml b/assets/toml-test/tests/invalid/string/wrong-close.toml
new file mode 100644 (file)
index 0000000..0f5c801
--- /dev/null
@@ -0,0 +1 @@
+bad-ending-quote = "double and single'
diff --git a/assets/toml-test/tests/invalid/table/append-with-dotted-keys-1.toml b/assets/toml-test/tests/invalid/table/append-with-dotted-keys-1.toml
new file mode 100644 (file)
index 0000000..0b5b4bb
--- /dev/null
@@ -0,0 +1,17 @@
+# First a.b.c defines a table: a.b.c = {z=9}
+#
+# Then we define a.b.c.t = "str" to add a str to the above table, making it:
+#
+#   a.b.c = {z=9, t="..."}
+#
+# While this makes sense, logically, it was decided this is not valid TOML as
+# it's too confusing/convoluted.
+# 
+# See: https://github.com/toml-lang/toml/issues/846
+#      https://github.com/toml-lang/toml/pull/859
+
+[a.b.c]
+  z = 9
+
+[a]
+  b.c.t = "Using dotted keys to add to [a.b.c] after explicitly defining it above is not allowed"
diff --git a/assets/toml-test/tests/invalid/table/append-with-dotted-keys-2.toml b/assets/toml-test/tests/invalid/table/append-with-dotted-keys-2.toml
new file mode 100644 (file)
index 0000000..3f0a011
--- /dev/null
@@ -0,0 +1,8 @@
+# This is the same issue as in injection-1.toml, except that nests one level
+# deeper. See that file for a more complete description.
+
+[a.b.c.d]
+  z = 9
+
+[a]
+  b.c.d.k.t = "Using dotted keys to add to [a.b.c.d] after explicitly defining it above is not allowed"
diff --git a/assets/toml-test/tests/invalid/table/array-empty.toml b/assets/toml-test/tests/invalid/table/array-empty.toml
new file mode 100644 (file)
index 0000000..a470ca3
--- /dev/null
@@ -0,0 +1,2 @@
+[[]]
+name = "Born to Run"
diff --git a/assets/toml-test/tests/invalid/table/array-implicit.toml b/assets/toml-test/tests/invalid/table/array-implicit.toml
new file mode 100644 (file)
index 0000000..05f2507
--- /dev/null
@@ -0,0 +1,14 @@
+# This test is a bit tricky. It should fail because the first use of
+# `[[albums.songs]]` without first declaring `albums` implies that `albums`
+# must be a table. The alternative would be quite weird. Namely, it wouldn't
+# comply with the TOML spec: "Each double-bracketed sub-table will belong to 
+# the most *recently* defined table element *above* it."
+#
+# This is in contrast to the *valid* test, table-array-implicit where
+# `[[albums.songs]]` works by itself, so long as `[[albums]]` isn't declared
+# later. (Although, `[albums]` could be.)
+[[albums.songs]]
+name = "Glory Days"
+
+[[albums]]
+name = "Born in the USA"
diff --git a/assets/toml-test/tests/invalid/table/array-missing-bracket.toml b/assets/toml-test/tests/invalid/table/array-missing-bracket.toml
new file mode 100644 (file)
index 0000000..39c73b0
--- /dev/null
@@ -0,0 +1,2 @@
+[[albums]
+name = "Born to Run"
diff --git a/assets/toml-test/tests/invalid/table/duplicate-key-dotted-table.toml b/assets/toml-test/tests/invalid/table/duplicate-key-dotted-table.toml
new file mode 100644 (file)
index 0000000..ade637b
--- /dev/null
@@ -0,0 +1,4 @@
+[fruit]
+apple.color = "red"
+
+[fruit.apple] # INVALID
diff --git a/assets/toml-test/tests/invalid/table/duplicate-key-dotted-table2.toml b/assets/toml-test/tests/invalid/table/duplicate-key-dotted-table2.toml
new file mode 100644 (file)
index 0000000..609b660
--- /dev/null
@@ -0,0 +1,4 @@
+[fruit]
+apple.taste.sweet = true
+
+[fruit.apple.taste] # INVALID
diff --git a/assets/toml-test/tests/invalid/table/duplicate-key-table.toml b/assets/toml-test/tests/invalid/table/duplicate-key-table.toml
new file mode 100644 (file)
index 0000000..cedf05f
--- /dev/null
@@ -0,0 +1,5 @@
+[fruit]
+type = "apple"
+
+[fruit.type]
+apple = "yes"
diff --git a/assets/toml-test/tests/invalid/table/duplicate-table-array.toml b/assets/toml-test/tests/invalid/table/duplicate-table-array.toml
new file mode 100644 (file)
index 0000000..a1d8705
--- /dev/null
@@ -0,0 +1,2 @@
+[tbl]
+[[tbl]]
diff --git a/assets/toml-test/tests/invalid/table/duplicate-table-array2.toml b/assets/toml-test/tests/invalid/table/duplicate-table-array2.toml
new file mode 100644 (file)
index 0000000..72eacbd
--- /dev/null
@@ -0,0 +1,2 @@
+[[tbl]]
+[tbl]
diff --git a/assets/toml-test/tests/invalid/table/duplicate.toml b/assets/toml-test/tests/invalid/table/duplicate.toml
new file mode 100644 (file)
index 0000000..73ef1cc
--- /dev/null
@@ -0,0 +1,5 @@
+[a]
+b = 1
+
+[a]
+c = 2
diff --git a/assets/toml-test/tests/invalid/table/empty-implicit-table.toml b/assets/toml-test/tests/invalid/table/empty-implicit-table.toml
new file mode 100644 (file)
index 0000000..0cc36d0
--- /dev/null
@@ -0,0 +1 @@
+[naughty..naughty]
diff --git a/assets/toml-test/tests/invalid/table/empty.toml b/assets/toml-test/tests/invalid/table/empty.toml
new file mode 100644 (file)
index 0000000..fe51488
--- /dev/null
@@ -0,0 +1 @@
+[]
diff --git a/assets/toml-test/tests/invalid/table/equals-sign.toml b/assets/toml-test/tests/invalid/table/equals-sign.toml
new file mode 100644 (file)
index 0000000..eb5e742
--- /dev/null
@@ -0,0 +1 @@
+[name=bad]
diff --git a/assets/toml-test/tests/invalid/table/llbrace.toml b/assets/toml-test/tests/invalid/table/llbrace.toml
new file mode 100644 (file)
index 0000000..047978e
--- /dev/null
@@ -0,0 +1 @@
+[ [table]]
diff --git a/assets/toml-test/tests/invalid/table/nested-brackets-close.toml b/assets/toml-test/tests/invalid/table/nested-brackets-close.toml
new file mode 100644 (file)
index 0000000..c8b5a67
--- /dev/null
@@ -0,0 +1,2 @@
+[a]b]
+zyx = 42
diff --git a/assets/toml-test/tests/invalid/table/nested-brackets-open.toml b/assets/toml-test/tests/invalid/table/nested-brackets-open.toml
new file mode 100644 (file)
index 0000000..246d7e9
--- /dev/null
@@ -0,0 +1,2 @@
+[a[b]
+zyx = 42
diff --git a/assets/toml-test/tests/invalid/table/quoted-no-close.toml b/assets/toml-test/tests/invalid/table/quoted-no-close.toml
new file mode 100644 (file)
index 0000000..6e7c1a1
--- /dev/null
@@ -0,0 +1,2 @@
+["where will it end]
+name = value
diff --git a/assets/toml-test/tests/invalid/table/redefine.toml b/assets/toml-test/tests/invalid/table/redefine.toml
new file mode 100644 (file)
index 0000000..fc23bf7
--- /dev/null
@@ -0,0 +1,6 @@
+# Define b as int, and try to use it as a table: error
+[a]
+b = 1
+
+[a.b]
+c = 2
diff --git a/assets/toml-test/tests/invalid/table/rrbrace.toml b/assets/toml-test/tests/invalid/table/rrbrace.toml
new file mode 100644 (file)
index 0000000..3a4dee4
--- /dev/null
@@ -0,0 +1 @@
+[[table] ]
diff --git a/assets/toml-test/tests/invalid/table/text-after-table.toml b/assets/toml-test/tests/invalid/table/text-after-table.toml
new file mode 100644 (file)
index 0000000..87da9db
--- /dev/null
@@ -0,0 +1 @@
+[error] this shouldn't be here
diff --git a/assets/toml-test/tests/invalid/table/whitespace.toml b/assets/toml-test/tests/invalid/table/whitespace.toml
new file mode 100644 (file)
index 0000000..0a6a6a6
--- /dev/null
@@ -0,0 +1 @@
+[invalid key]
diff --git a/assets/toml-test/tests/invalid/table/with-pound.toml b/assets/toml-test/tests/invalid/table/with-pound.toml
new file mode 100644 (file)
index 0000000..e7b777e
--- /dev/null
@@ -0,0 +1,2 @@
+[key#group]
+answer = 42
diff --git a/assets/toml-test/tests/valid/array/array.json b/assets/toml-test/tests/valid/array/array.json
new file mode 100644 (file)
index 0000000..4e9d45b
--- /dev/null
@@ -0,0 +1,68 @@
+{
+  "comments": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    }
+  ],
+  "dates": [
+    {
+      "type": "datetime",
+      "value": "1987-07-05T17:45:00Z"
+    },
+    {
+      "type": "datetime",
+      "value": "1979-05-27T07:32:00Z"
+    },
+    {
+      "type": "datetime",
+      "value": "2006-06-01T11:00:00Z"
+    }
+  ],
+  "floats": [
+    {
+      "type": "float",
+      "value": "1.1"
+    },
+    {
+      "type": "float",
+      "value": "2.1"
+    },
+    {
+      "type": "float",
+      "value": "3.1"
+    }
+  ],
+  "ints": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    },
+    {
+      "type": "integer",
+      "value": "3"
+    }
+  ],
+  "strings": [
+    {
+      "type": "string",
+      "value": "a"
+    },
+    {
+      "type": "string",
+      "value": "b"
+    },
+    {
+      "type": "string",
+      "value": "c"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/array.toml b/assets/toml-test/tests/valid/array/array.toml
new file mode 100644 (file)
index 0000000..ab88465
--- /dev/null
@@ -0,0 +1,12 @@
+ints = [1, 2, 3, ]
+floats = [1.1, 2.1, 3.1]
+strings = ["a", "b", "c"]
+dates = [
+  1987-07-05T17:45:00Z,
+  1979-05-27T07:32:00Z,
+  2006-06-01T11:00:00Z,
+]
+comments = [
+         1,
+         2, #this is ok
+]
diff --git a/assets/toml-test/tests/valid/array/bool.json b/assets/toml-test/tests/valid/array/bool.json
new file mode 100644 (file)
index 0000000..7cede3f
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "a": [
+    {
+      "type": "bool",
+      "value": "true"
+    },
+    {
+      "type": "bool",
+      "value": "false"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/bool.toml b/assets/toml-test/tests/valid/array/bool.toml
new file mode 100644 (file)
index 0000000..d2010c5
--- /dev/null
@@ -0,0 +1 @@
+a = [true, false]
diff --git a/assets/toml-test/tests/valid/array/empty.json b/assets/toml-test/tests/valid/array/empty.json
new file mode 100644 (file)
index 0000000..7b1ca0c
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "thevoid": [
+    [
+      [
+        [
+          []
+        ]
+      ]
+    ]
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/empty.toml b/assets/toml-test/tests/valid/array/empty.toml
new file mode 100644 (file)
index 0000000..fa58dc6
--- /dev/null
@@ -0,0 +1 @@
+thevoid = [[[[[]]]]]
diff --git a/assets/toml-test/tests/valid/array/hetergeneous.json b/assets/toml-test/tests/valid/array/hetergeneous.json
new file mode 100644 (file)
index 0000000..751b624
--- /dev/null
@@ -0,0 +1,34 @@
+{
+  "mixed": [
+    [
+      {
+        "type": "integer",
+        "value": "1"
+      },
+      {
+        "type": "integer",
+        "value": "2"
+      }
+    ],
+    [
+      {
+        "type": "string",
+        "value": "a"
+      },
+      {
+        "type": "string",
+        "value": "b"
+      }
+    ],
+    [
+      {
+        "type": "float",
+        "value": "1.1"
+      },
+      {
+        "type": "float",
+        "value": "2.1"
+      }
+    ]
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/hetergeneous.toml b/assets/toml-test/tests/valid/array/hetergeneous.toml
new file mode 100644 (file)
index 0000000..a246fcf
--- /dev/null
@@ -0,0 +1 @@
+mixed = [[1, 2], ["a", "b"], [1.1, 2.1]]
diff --git a/assets/toml-test/tests/valid/array/mixed-int-array.json b/assets/toml-test/tests/valid/array/mixed-int-array.json
new file mode 100644 (file)
index 0000000..2f3ac5e
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "arrays-and-ints": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    [
+      {
+        "type": "string",
+        "value": "Arrays are not integers."
+      }
+    ]
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/mixed-int-array.toml b/assets/toml-test/tests/valid/array/mixed-int-array.toml
new file mode 100644 (file)
index 0000000..051ec73
--- /dev/null
@@ -0,0 +1 @@
+arrays-and-ints =  [1, ["Arrays are not integers."]]
diff --git a/assets/toml-test/tests/valid/array/mixed-int-float.json b/assets/toml-test/tests/valid/array/mixed-int-float.json
new file mode 100644 (file)
index 0000000..e73059b
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "ints-and-floats": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "float",
+      "value": "1.1"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/mixed-int-float.toml b/assets/toml-test/tests/valid/array/mixed-int-float.toml
new file mode 100644 (file)
index 0000000..a5aa9b7
--- /dev/null
@@ -0,0 +1 @@
+ints-and-floats = [1, 1.1]
diff --git a/assets/toml-test/tests/valid/array/mixed-int-string.json b/assets/toml-test/tests/valid/array/mixed-int-string.json
new file mode 100644 (file)
index 0000000..c6acc76
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "strings-and-ints": [
+    {
+      "type": "string",
+      "value": "hi"
+    },
+    {
+      "type": "integer",
+      "value": "42"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/mixed-int-string.toml b/assets/toml-test/tests/valid/array/mixed-int-string.toml
new file mode 100644 (file)
index 0000000..f348308
--- /dev/null
@@ -0,0 +1 @@
+strings-and-ints = ["hi", 42]
diff --git a/assets/toml-test/tests/valid/array/mixed-string-table.json b/assets/toml-test/tests/valid/array/mixed-string-table.json
new file mode 100644 (file)
index 0000000..0de6a6e
--- /dev/null
@@ -0,0 +1,38 @@
+{
+  "contributors": [
+    {
+      "type": "string",
+      "value": "Foo Bar \u003cfoo@example.com\u003e"
+    },
+    {
+      "email": {
+        "type": "string",
+        "value": "bazqux@example.com"
+      },
+      "name": {
+        "type": "string",
+        "value": "Baz Qux"
+      },
+      "url": {
+        "type": "string",
+        "value": "https://example.com/bazqux"
+      }
+    }
+  ],
+  "mixed": [
+    {
+      "k": {
+        "type": "string",
+        "value": "a"
+      }
+    },
+    {
+      "type": "string",
+      "value": "b"
+    },
+    {
+      "type": "integer",
+      "value": "1"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/mixed-string-table.toml b/assets/toml-test/tests/valid/array/mixed-string-table.toml
new file mode 100644 (file)
index 0000000..f0ede9c
--- /dev/null
@@ -0,0 +1,11 @@
+contributors = [
+  "Foo Bar <foo@example.com>",
+  { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" }
+]
+
+# Start with a table as the first element. This tests a case that some libraries
+# might have where they will check if the first entry is a table/map/hash/assoc
+# array and then encode it as a table array. This was a reasonable thing to do
+# before TOML 1.0 since arrays could only contain one type, but now it's no
+# longer.
+mixed = [{k="a"}, "b", 1]
diff --git a/assets/toml-test/tests/valid/array/nested-double.json b/assets/toml-test/tests/valid/array/nested-double.json
new file mode 100644 (file)
index 0000000..c89a8c9
--- /dev/null
@@ -0,0 +1,28 @@
+{
+  "nest": [
+    [
+      [
+        {
+          "type": "string",
+          "value": "a"
+        }
+      ],
+      [
+        {
+          "type": "integer",
+          "value": "1"
+        },
+        {
+          "type": "integer",
+          "value": "2"
+        },
+        [
+          {
+            "type": "integer",
+            "value": "3"
+          }
+        ]
+      ]
+    ]
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/nested-double.toml b/assets/toml-test/tests/valid/array/nested-double.toml
new file mode 100644 (file)
index 0000000..c1de747
--- /dev/null
@@ -0,0 +1,6 @@
+nest = [
+       [
+               ["a"],
+               [1, 2, [3]]
+       ]
+]
diff --git a/assets/toml-test/tests/valid/array/nested-inline-table.json b/assets/toml-test/tests/valid/array/nested-inline-table.json
new file mode 100644 (file)
index 0000000..2ae5fa7
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "a": [
+    {
+      "b": {}
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/nested-inline-table.toml b/assets/toml-test/tests/valid/array/nested-inline-table.toml
new file mode 100644 (file)
index 0000000..e1e24f6
--- /dev/null
@@ -0,0 +1 @@
+a = [ { b = {} } ]
diff --git a/assets/toml-test/tests/valid/array/nested.json b/assets/toml-test/tests/valid/array/nested.json
new file mode 100644 (file)
index 0000000..72c7589
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "nest": [
+    [
+      {
+        "type": "string",
+        "value": "a"
+      }
+    ],
+    [
+      {
+        "type": "string",
+        "value": "b"
+      }
+    ]
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/nested.toml b/assets/toml-test/tests/valid/array/nested.toml
new file mode 100644 (file)
index 0000000..ce33022
--- /dev/null
@@ -0,0 +1 @@
+nest = [["a"], ["b"]]
diff --git a/assets/toml-test/tests/valid/array/nospaces.json b/assets/toml-test/tests/valid/array/nospaces.json
new file mode 100644 (file)
index 0000000..6c89fce
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "ints": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    },
+    {
+      "type": "integer",
+      "value": "3"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/nospaces.toml b/assets/toml-test/tests/valid/array/nospaces.toml
new file mode 100644 (file)
index 0000000..6618936
--- /dev/null
@@ -0,0 +1 @@
+ints = [1,2,3]
diff --git a/assets/toml-test/tests/valid/array/string-quote-comma-2.json b/assets/toml-test/tests/valid/array/string-quote-comma-2.json
new file mode 100644 (file)
index 0000000..7cd5406
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "title": [
+    {
+      "type": "string",
+      "value": " \", "
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/string-quote-comma-2.toml b/assets/toml-test/tests/valid/array/string-quote-comma-2.toml
new file mode 100644 (file)
index 0000000..4758ddc
--- /dev/null
@@ -0,0 +1 @@
+title = [ " \", ",]
diff --git a/assets/toml-test/tests/valid/array/string-quote-comma.json b/assets/toml-test/tests/valid/array/string-quote-comma.json
new file mode 100644 (file)
index 0000000..b78db42
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "title": [
+    {
+      "type": "string",
+      "value": "Client: \"XXXX\", Job: XXXX"
+    },
+    {
+      "type": "string",
+      "value": "Code: XXXX"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/string-quote-comma.toml b/assets/toml-test/tests/valid/array/string-quote-comma.toml
new file mode 100644 (file)
index 0000000..6b458e1
--- /dev/null
@@ -0,0 +1,4 @@
+title = [
+"Client: \"XXXX\", Job: XXXX",
+"Code: XXXX"
+]
diff --git a/assets/toml-test/tests/valid/array/string-with-comma.json b/assets/toml-test/tests/valid/array/string-with-comma.json
new file mode 100644 (file)
index 0000000..42b77ef
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "title": [
+    {
+      "type": "string",
+      "value": "Client: XXXX, Job: XXXX"
+    },
+    {
+      "type": "string",
+      "value": "Code: XXXX"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/string-with-comma.toml b/assets/toml-test/tests/valid/array/string-with-comma.toml
new file mode 100644 (file)
index 0000000..655c40e
--- /dev/null
@@ -0,0 +1,4 @@
+title = [
+"Client: XXXX, Job: XXXX",
+"Code: XXXX"
+]
diff --git a/assets/toml-test/tests/valid/array/strings.json b/assets/toml-test/tests/valid/array/strings.json
new file mode 100644 (file)
index 0000000..27617b4
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "string_array": [
+    {
+      "type": "string",
+      "value": "all"
+    },
+    {
+      "type": "string",
+      "value": "strings"
+    },
+    {
+      "type": "string",
+      "value": "are the same"
+    },
+    {
+      "type": "string",
+      "value": "type"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/strings.toml b/assets/toml-test/tests/valid/array/strings.toml
new file mode 100644 (file)
index 0000000..51894ce
--- /dev/null
@@ -0,0 +1 @@
+string_array = [ "all", 'strings', """are the same""", '''type''']
diff --git a/assets/toml-test/tests/valid/array/table-array-string-backslash.json b/assets/toml-test/tests/valid/array/table-array-string-backslash.json
new file mode 100644 (file)
index 0000000..2c0feb1
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "foo": [
+    {
+      "bar": {
+        "type": "string",
+        "value": "\"{{baz}}\""
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/array/table-array-string-backslash.toml b/assets/toml-test/tests/valid/array/table-array-string-backslash.toml
new file mode 100644 (file)
index 0000000..f0de81e
--- /dev/null
@@ -0,0 +1 @@
+foo = [ { bar="\"{{baz}}\""} ]
diff --git a/assets/toml-test/tests/valid/bool/bool.json b/assets/toml-test/tests/valid/bool/bool.json
new file mode 100644 (file)
index 0000000..be47d6d
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "f": {
+    "type": "bool",
+    "value": "false"
+  },
+  "t": {
+    "type": "bool",
+    "value": "true"
+  }
+}
diff --git a/assets/toml-test/tests/valid/bool/bool.toml b/assets/toml-test/tests/valid/bool/bool.toml
new file mode 100644 (file)
index 0000000..a8a829b
--- /dev/null
@@ -0,0 +1,2 @@
+t = true
+f = false
diff --git a/assets/toml-test/tests/valid/comment/at-eof.json b/assets/toml-test/tests/valid/comment/at-eof.json
new file mode 100644 (file)
index 0000000..af3154a
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "key": {
+    "type": "string",
+    "value": "value"
+  }
+}
diff --git a/assets/toml-test/tests/valid/comment/at-eof.toml b/assets/toml-test/tests/valid/comment/at-eof.toml
new file mode 100644 (file)
index 0000000..090b474
--- /dev/null
@@ -0,0 +1,2 @@
+# This is a full-line comment
+key = "value" # This is a comment at the end of a line
diff --git a/assets/toml-test/tests/valid/comment/at-eof2.json b/assets/toml-test/tests/valid/comment/at-eof2.json
new file mode 100644 (file)
index 0000000..af3154a
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "key": {
+    "type": "string",
+    "value": "value"
+  }
+}
diff --git a/assets/toml-test/tests/valid/comment/at-eof2.toml b/assets/toml-test/tests/valid/comment/at-eof2.toml
new file mode 100644 (file)
index 0000000..090b474
--- /dev/null
@@ -0,0 +1,2 @@
+# This is a full-line comment
+key = "value" # This is a comment at the end of a line
diff --git a/assets/toml-test/tests/valid/comment/everywhere.json b/assets/toml-test/tests/valid/comment/everywhere.json
new file mode 100644 (file)
index 0000000..6e714d1
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "group": {
+    "answer": {
+      "type": "integer",
+      "value": "42"
+    },
+    "dt": {
+      "type": "datetime",
+      "value": "1979-05-27T07:32:12-07:00"
+    },
+    "d": {
+      "type": "date-local",
+      "value": "1979-05-27"
+    },
+    "more": [
+      {
+        "type": "integer",
+        "value": "42"
+      },
+      {
+        "type": "integer",
+        "value": "42"
+      }
+    ]
+  }
+}
diff --git a/assets/toml-test/tests/valid/comment/everywhere.toml b/assets/toml-test/tests/valid/comment/everywhere.toml
new file mode 100644 (file)
index 0000000..a5da1d7
--- /dev/null
@@ -0,0 +1,28 @@
+# Top comment.
+  # Top comment.
+# Top comment.
+
+# [no-extraneous-groups-please]
+
+[group] # Comment
+answer = 42 # Comment
+# no-extraneous-keys-please = 999
+# Inbetween comment.
+more = [ # Comment
+  # What about multiple # comments?
+  # Can you handle it?
+  #
+          # Evil.
+# Evil.
+  42, 42, # Comments within arrays are fun.
+  # What about multiple # comments?
+  # Can you handle it?
+  #
+          # Evil.
+# Evil.
+# ] Did I fool you?
+] # Hopefully not.
+
+# Make sure the space between the datetime and "#" isn't lexed.
+dt = 1979-05-27T07:32:12-07:00  # c
+d = 1979-05-27 # Comment
diff --git a/assets/toml-test/tests/valid/comment/noeol.json b/assets/toml-test/tests/valid/comment/noeol.json
new file mode 100644 (file)
index 0000000..0967ef4
--- /dev/null
@@ -0,0 +1 @@
+{}
diff --git a/assets/toml-test/tests/valid/comment/noeol.toml b/assets/toml-test/tests/valid/comment/noeol.toml
new file mode 100644 (file)
index 0000000..7662df8
--- /dev/null
@@ -0,0 +1 @@
+# single comment without any eol characters
\ No newline at end of file
diff --git a/assets/toml-test/tests/valid/comment/tricky.json b/assets/toml-test/tests/valid/comment/tricky.json
new file mode 100644 (file)
index 0000000..0994864
--- /dev/null
@@ -0,0 +1,98 @@
+{
+  "hash#tag": {
+    "#!": {
+      "type": "string",
+      "value": "hash bang"
+    },
+    "arr3": [
+      {
+        "type": "string",
+        "value": "#"
+      },
+      {
+        "type": "string",
+        "value": "#"
+      },
+      {
+        "type": "string",
+        "value": "###"
+      }
+    ],
+    "arr4": [
+      {
+        "type": "integer",
+        "value": "1"
+      },
+      {
+        "type": "integer",
+        "value": "2"
+      },
+      {
+        "type": "integer",
+        "value": "3"
+      },
+      {
+        "type": "integer",
+        "value": "4"
+      }
+    ],
+    "arr5": [
+      [
+        [
+          [
+            [
+              {
+                "type": "string",
+                "value": "#"
+              }
+            ]
+          ]
+        ]
+      ]
+    ],
+    "tbl1": {
+      "#": {
+        "type": "string",
+        "value": "}#"
+      }
+    }
+  },
+  "section": {
+    "8": {
+      "type": "string",
+      "value": "eight"
+    },
+    "eleven": {
+      "type": "float",
+      "value": "11.1"
+    },
+    "five": {
+      "type": "float",
+      "value": "5.5"
+    },
+    "four": {
+      "type": "string",
+      "value": "# no comment\n# nor this\n#also not comment"
+    },
+    "one": {
+      "type": "string",
+      "value": "11"
+    },
+    "six": {
+      "type": "integer",
+      "value": "6"
+    },
+    "ten": {
+      "type": "float",
+      "value": "1000.0"
+    },
+    "three": {
+      "type": "string",
+      "value": "#"
+    },
+    "two": {
+      "type": "string",
+      "value": "22#"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/comment/tricky.toml b/assets/toml-test/tests/valid/comment/tricky.toml
new file mode 100644 (file)
index 0000000..c95f94d
--- /dev/null
@@ -0,0 +1,31 @@
+[section]#attached comment
+#[notsection]
+one = "11"#cmt
+two = "22#"
+three = '#'
+
+four = """# no comment
+# nor this
+#also not comment"""#is_comment
+
+five = 5.5#66
+six = 6#7
+8 = "eight"
+#nine = 99
+ten = 10e2#1
+eleven = 1.11e1#23
+
+["hash#tag"]
+"#!" = "hash bang"
+arr3 = [ "#", '#', """###""" ]
+arr4 = [ 1,# 9, 9,
+2#,9
+,#9
+3#]
+,4]
+arr5 = [[[[#["#"],
+["#"]]]]#]
+]
+tbl1 = { "#" = '}#'}#}}
+
+
diff --git a/assets/toml-test/tests/valid/datetime/datetime.json b/assets/toml-test/tests/valid/datetime/datetime.json
new file mode 100644 (file)
index 0000000..5146335
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "lower": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:00Z"
+  },
+  "space": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:00Z"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/datetime.toml b/assets/toml-test/tests/valid/datetime/datetime.toml
new file mode 100644 (file)
index 0000000..653d521
--- /dev/null
@@ -0,0 +1,2 @@
+space = 1987-07-05 17:45:00Z
+lower = 1987-07-05t17:45:00z
diff --git a/assets/toml-test/tests/valid/datetime/local-date.json b/assets/toml-test/tests/valid/datetime/local-date.json
new file mode 100644 (file)
index 0000000..8fea2fe
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "bestdayever": {
+    "type": "date-local",
+    "value": "1987-07-05"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/local-date.toml b/assets/toml-test/tests/valid/datetime/local-date.toml
new file mode 100644 (file)
index 0000000..1be4a5f
--- /dev/null
@@ -0,0 +1 @@
+bestdayever = 1987-07-05
diff --git a/assets/toml-test/tests/valid/datetime/local-time.json b/assets/toml-test/tests/valid/datetime/local-time.json
new file mode 100644 (file)
index 0000000..5e527e9
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "besttimeever": {
+    "type": "time-local",
+    "value": "17:45:00"
+  },
+  "milliseconds": {
+    "type": "time-local",
+    "value": "10:32:00.555"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/local-time.toml b/assets/toml-test/tests/valid/datetime/local-time.toml
new file mode 100644 (file)
index 0000000..6b07f6f
--- /dev/null
@@ -0,0 +1,2 @@
+besttimeever = 17:45:00
+milliseconds = 10:32:00.555
diff --git a/assets/toml-test/tests/valid/datetime/local.json b/assets/toml-test/tests/valid/datetime/local.json
new file mode 100644 (file)
index 0000000..12f8df5
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "local": {
+    "type": "datetime-local",
+    "value": "1987-07-05T17:45:00"
+  },
+  "milli": {
+    "type": "datetime-local",
+    "value": "1977-12-21T10:32:00.555"
+  },
+  "space": {
+    "type": "datetime-local",
+    "value": "1987-07-05T17:45:00"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/local.toml b/assets/toml-test/tests/valid/datetime/local.toml
new file mode 100644 (file)
index 0000000..ab425ec
--- /dev/null
@@ -0,0 +1,3 @@
+local = 1987-07-05T17:45:00
+milli = 1977-12-21T10:32:00.555
+space = 1987-07-05 17:45:00
diff --git a/assets/toml-test/tests/valid/datetime/milliseconds.json b/assets/toml-test/tests/valid/datetime/milliseconds.json
new file mode 100644 (file)
index 0000000..c49e400
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "utc1": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56.1234Z"
+  },
+  "utc2": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56.6000Z"
+  },
+  "wita1": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56.1234+08:00"
+  },
+  "wita2": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56.6000+08:00"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/milliseconds.toml b/assets/toml-test/tests/valid/datetime/milliseconds.toml
new file mode 100644 (file)
index 0000000..24b81f8
--- /dev/null
@@ -0,0 +1,4 @@
+utc1  = 1987-07-05T17:45:56.1234Z
+utc2  = 1987-07-05T17:45:56.6Z
+wita1 = 1987-07-05T17:45:56.1234+08:00
+wita2 = 1987-07-05T17:45:56.6+08:00
diff --git a/assets/toml-test/tests/valid/datetime/no-seconds.json b/assets/toml-test/tests/valid/datetime/no-seconds.json
new file mode 100644 (file)
index 0000000..ba3652e
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "without-seconds-1": {
+    "type": "time-local",
+    "value": "13:37:00"
+  },
+  "without-seconds-2": {
+    "type": "datetime",
+    "value": "1979-05-27T07:32:00Z"
+  },
+  "without-seconds-3": {
+    "type": "datetime",
+    "value": "1979-05-27T07:32:00-07:00"
+  },
+  "without-seconds-4": {
+    "type": "datetime-local",
+    "value": "1979-05-27T07:32:00"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/no-seconds.toml b/assets/toml-test/tests/valid/datetime/no-seconds.toml
new file mode 100644 (file)
index 0000000..a0fd260
--- /dev/null
@@ -0,0 +1,5 @@
+# Seconds are optional in date-time and time.
+without-seconds-1 = 13:37
+without-seconds-2 = 1979-05-27 07:32Z
+without-seconds-3 = 1979-05-27 07:32-07:00
+without-seconds-4 = 1979-05-27T07:32
diff --git a/assets/toml-test/tests/valid/datetime/timezone.json b/assets/toml-test/tests/valid/datetime/timezone.json
new file mode 100644 (file)
index 0000000..8dc8328
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "nzdt": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56+13:00"
+  },
+  "nzst": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56+12:00"
+  },
+  "pdt": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56-05:00"
+  },
+  "utc": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:56Z"
+  }
+}
diff --git a/assets/toml-test/tests/valid/datetime/timezone.toml b/assets/toml-test/tests/valid/datetime/timezone.toml
new file mode 100644 (file)
index 0000000..20f3835
--- /dev/null
@@ -0,0 +1,4 @@
+utc  = 1987-07-05T17:45:56Z
+pdt  = 1987-07-05T17:45:56-05:00
+nzst = 1987-07-05T17:45:56+12:00
+nzdt = 1987-07-05T17:45:56+13:00  # DST
diff --git a/assets/toml-test/tests/valid/empty-file.json b/assets/toml-test/tests/valid/empty-file.json
new file mode 100644 (file)
index 0000000..0967ef4
--- /dev/null
@@ -0,0 +1 @@
+{}
diff --git a/assets/toml-test/tests/valid/empty-file.toml b/assets/toml-test/tests/valid/empty-file.toml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/assets/toml-test/tests/valid/example.json b/assets/toml-test/tests/valid/example.json
new file mode 100644 (file)
index 0000000..2ea95a2
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "best-day-ever": {
+    "type": "datetime",
+    "value": "1987-07-05T17:45:00Z"
+  },
+  "numtheory": {
+    "boring": {
+      "type": "bool",
+      "value": "false"
+    },
+    "perfection": [
+      {
+        "type": "integer",
+        "value": "6"
+      },
+      {
+        "type": "integer",
+        "value": "28"
+      },
+      {
+        "type": "integer",
+        "value": "496"
+      }
+    ]
+  }
+}
diff --git a/assets/toml-test/tests/valid/example.toml b/assets/toml-test/tests/valid/example.toml
new file mode 100644 (file)
index 0000000..8cb02e0
--- /dev/null
@@ -0,0 +1,5 @@
+best-day-ever = 1987-07-05T17:45:00Z
+
+[numtheory]
+boring = false
+perfection = [6, 28, 496]
diff --git a/assets/toml-test/tests/valid/float/exponent.json b/assets/toml-test/tests/valid/float/exponent.json
new file mode 100644 (file)
index 0000000..e79a6e1
--- /dev/null
@@ -0,0 +1,34 @@
+{
+  "lower": {
+    "type": "float",
+    "value": "300.0"
+  },
+  "minustenth": {
+    "type": "float",
+    "value": "-0.1"
+  },
+  "neg": {
+    "type": "float",
+    "value": "0.03"
+  },
+  "pointlower": {
+    "type": "float",
+    "value": "310.0"
+  },
+  "pointupper": {
+    "type": "float",
+    "value": "310.0"
+  },
+  "pos": {
+    "type": "float",
+    "value": "300.0"
+  },
+  "upper": {
+    "type": "float",
+    "value": "300.0"
+  },
+  "zero": {
+    "type": "float",
+    "value": "3.0"
+  }
+}
diff --git a/assets/toml-test/tests/valid/float/exponent.toml b/assets/toml-test/tests/valid/float/exponent.toml
new file mode 100644 (file)
index 0000000..573e0a8
--- /dev/null
@@ -0,0 +1,8 @@
+lower = 3e2
+upper = 3E2
+neg = 3e-2
+pos = 3E+2
+zero = 3e0
+pointlower = 3.1e2
+pointupper = 3.1E2
+minustenth = -1E-1
diff --git a/assets/toml-test/tests/valid/float/float.json b/assets/toml-test/tests/valid/float/float.json
new file mode 100644 (file)
index 0000000..f92d8d8
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "negpi": {
+    "type": "float",
+    "value": "-3.14"
+  },
+  "pi": {
+    "type": "float",
+    "value": "3.14"
+  },
+  "pospi": {
+    "type": "float",
+    "value": "3.14"
+  },
+  "zero-intpart": {
+    "type": "float",
+    "value": "0.123"
+  }
+}
diff --git a/assets/toml-test/tests/valid/float/float.toml b/assets/toml-test/tests/valid/float/float.toml
new file mode 100644 (file)
index 0000000..5f02322
--- /dev/null
@@ -0,0 +1,4 @@
+pi = 3.14
+pospi = +3.14
+negpi = -3.14
+zero-intpart = 0.123
diff --git a/assets/toml-test/tests/valid/float/inf-and-nan.json b/assets/toml-test/tests/valid/float/inf-and-nan.json
new file mode 100644 (file)
index 0000000..e3f1ba3
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "infinity": {
+    "type": "float",
+    "value": "inf"
+  },
+  "infinity_neg": {
+    "type": "float",
+    "value": "-inf"
+  },
+  "infinity_plus": {
+    "type": "float",
+    "value": "+inf"
+  },
+  "nan": {
+    "type": "float",
+    "value": "nan"
+  },
+  "nan_neg": {
+    "type": "float",
+    "value": "nan"
+  },
+  "nan_plus": {
+    "type": "float",
+    "value": "nan"
+  }
+}
diff --git a/assets/toml-test/tests/valid/float/inf-and-nan.toml b/assets/toml-test/tests/valid/float/inf-and-nan.toml
new file mode 100644 (file)
index 0000000..c8f8459
--- /dev/null
@@ -0,0 +1,8 @@
+# We don't encode +nan and -nan back with the signs; many languages don't
+# support a sign on NaN (it doesn't really make much sense).
+nan = nan
+nan_neg = -nan
+nan_plus = +nan
+infinity = inf
+infinity_neg = -inf
+infinity_plus = +inf
diff --git a/assets/toml-test/tests/valid/float/long.json b/assets/toml-test/tests/valid/float/long.json
new file mode 100644 (file)
index 0000000..73d7505
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "longpi": {
+    "type": "float",
+    "value": "3.141592653589793"
+  },
+  "neglongpi": {
+    "type": "float",
+    "value": "-3.141592653589793"
+  }
+}
diff --git a/assets/toml-test/tests/valid/float/long.toml b/assets/toml-test/tests/valid/float/long.toml
new file mode 100644 (file)
index 0000000..9558ae4
--- /dev/null
@@ -0,0 +1,2 @@
+longpi = 3.141592653589793
+neglongpi = -3.141592653589793
diff --git a/assets/toml-test/tests/valid/float/underscore.json b/assets/toml-test/tests/valid/float/underscore.json
new file mode 100644 (file)
index 0000000..f54f7b5
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "after": {
+    "type": "float",
+    "value": "3141.5927"
+  },
+  "before": {
+    "type": "float",
+    "value": "3141.5927"
+  },
+  "exponent": {
+    "type": "float",
+    "value": "3.0e14"
+  }
+}
diff --git a/assets/toml-test/tests/valid/float/underscore.toml b/assets/toml-test/tests/valid/float/underscore.toml
new file mode 100644 (file)
index 0000000..343353a
--- /dev/null
@@ -0,0 +1,3 @@
+before = 3_141.5927
+after = 3141.592_7
+exponent = 3e1_4
diff --git a/assets/toml-test/tests/valid/float/zero.json b/assets/toml-test/tests/valid/float/zero.json
new file mode 100644 (file)
index 0000000..61551e8
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "zero": {
+    "type": "float",
+    "value": "0"
+  },
+  "signed-pos": {
+    "type": "float",
+    "value": "0"
+  },
+  "signed-neg": {
+    "type": "float",
+    "value": "0"
+  },
+  "exponent": {
+    "type": "float",
+    "value": "0"
+  },
+  "exponent-two-0": {
+    "type": "float",
+    "value": "0"
+  },
+  "exponent-signed-pos": {
+    "type": "float",
+    "value": "0"
+  },
+  "exponent-signed-neg": {
+    "type": "float",
+    "value": "0"
+  }
+}
diff --git a/assets/toml-test/tests/valid/float/zero.toml b/assets/toml-test/tests/valid/float/zero.toml
new file mode 100644 (file)
index 0000000..e7efb1f
--- /dev/null
@@ -0,0 +1,7 @@
+zero = 0.0
+signed-pos = +0.0
+signed-neg = -0.0
+exponent = 0e0
+exponent-two-0 = 0e00
+exponent-signed-pos = +0e0
+exponent-signed-neg = -0e0
diff --git a/assets/toml-test/tests/valid/implicit-and-explicit-after.json b/assets/toml-test/tests/valid/implicit-and-explicit-after.json
new file mode 100644 (file)
index 0000000..663a34e
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "a": {
+    "b": {
+      "c": {
+        "answer": {
+          "type": "integer",
+          "value": "42"
+        }
+      }
+    },
+    "better": {
+      "type": "integer",
+      "value": "43"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/implicit-and-explicit-after.toml b/assets/toml-test/tests/valid/implicit-and-explicit-after.toml
new file mode 100644 (file)
index 0000000..c0e8865
--- /dev/null
@@ -0,0 +1,5 @@
+[a.b.c]
+answer = 42
+
+[a]
+better = 43
diff --git a/assets/toml-test/tests/valid/implicit-and-explicit-before.json b/assets/toml-test/tests/valid/implicit-and-explicit-before.json
new file mode 100644 (file)
index 0000000..663a34e
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "a": {
+    "b": {
+      "c": {
+        "answer": {
+          "type": "integer",
+          "value": "42"
+        }
+      }
+    },
+    "better": {
+      "type": "integer",
+      "value": "43"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/implicit-and-explicit-before.toml b/assets/toml-test/tests/valid/implicit-and-explicit-before.toml
new file mode 100644 (file)
index 0000000..eee68ff
--- /dev/null
@@ -0,0 +1,5 @@
+[a]
+better = 43
+
+[a.b.c]
+answer = 42
diff --git a/assets/toml-test/tests/valid/implicit-groups.json b/assets/toml-test/tests/valid/implicit-groups.json
new file mode 100644 (file)
index 0000000..347c693
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "a": {
+    "b": {
+      "c": {
+        "answer": {
+          "type": "integer",
+          "value": "42"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/implicit-groups.toml b/assets/toml-test/tests/valid/implicit-groups.toml
new file mode 100644 (file)
index 0000000..b6333e4
--- /dev/null
@@ -0,0 +1,2 @@
+[a.b.c]
+answer = 42
diff --git a/assets/toml-test/tests/valid/inline-table/array.json b/assets/toml-test/tests/valid/inline-table/array.json
new file mode 100644 (file)
index 0000000..fe78bf6
--- /dev/null
@@ -0,0 +1,34 @@
+{
+  "people": [
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Bruce"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Springsteen"
+      }
+    },
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Eric"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Clapton"
+      }
+    },
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Bob"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Seger"
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/inline-table/array.toml b/assets/toml-test/tests/valid/inline-table/array.toml
new file mode 100644 (file)
index 0000000..3fa60d6
--- /dev/null
@@ -0,0 +1,3 @@
+people = [{first_name = "Bruce", last_name = "Springsteen"},
+          {first_name = "Eric", last_name = "Clapton"},
+          {first_name = "Bob", last_name = "Seger"}]
diff --git a/assets/toml-test/tests/valid/inline-table/bool.json b/assets/toml-test/tests/valid/inline-table/bool.json
new file mode 100644 (file)
index 0000000..717952f
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "a": {
+    "a": {
+      "type": "bool",
+      "value": "true"
+    },
+    "b": {
+      "type": "bool",
+      "value": "false"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/bool.toml b/assets/toml-test/tests/valid/inline-table/bool.toml
new file mode 100644 (file)
index 0000000..d228fc2
--- /dev/null
@@ -0,0 +1 @@
+a = {a = true, b = false}
diff --git a/assets/toml-test/tests/valid/inline-table/empty.json b/assets/toml-test/tests/valid/inline-table/empty.json
new file mode 100644 (file)
index 0000000..28beacf
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "empty1": {},
+  "empty2": {},
+  "empty_in_array": [
+    {
+      "not_empty": {
+        "type": "integer",
+        "value": "1"
+      }
+    },
+    {}
+  ],
+  "empty_in_array2": [
+    {},
+    {
+      "not_empty": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  ],
+  "many_empty": [
+    {},
+    {},
+    {}
+  ],
+  "nested_empty": {
+    "empty": {}
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/empty.toml b/assets/toml-test/tests/valid/inline-table/empty.toml
new file mode 100644 (file)
index 0000000..910d458
--- /dev/null
@@ -0,0 +1,6 @@
+empty1 = {}
+empty2 = { }
+empty_in_array = [ { not_empty = 1 }, {} ]
+empty_in_array2 = [{},{not_empty=1}]
+many_empty = [{},{},{}]
+nested_empty = {"empty"={}}
diff --git a/assets/toml-test/tests/valid/inline-table/end-in-bool.json b/assets/toml-test/tests/valid/inline-table/end-in-bool.json
new file mode 100644 (file)
index 0000000..90e700a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "black": {
+    "allow_prereleases": {
+      "type": "bool",
+      "value": "true"
+    },
+    "python": {
+      "type": "string",
+      "value": "\u003e3.6"
+    },
+    "version": {
+      "type": "string",
+      "value": "\u003e=18.9b0"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/end-in-bool.toml b/assets/toml-test/tests/valid/inline-table/end-in-bool.toml
new file mode 100644 (file)
index 0000000..94e5651
--- /dev/null
@@ -0,0 +1 @@
+black = { python=">3.6", version=">=18.9b0", allow_prereleases=true }
diff --git a/assets/toml-test/tests/valid/inline-table/inline-table.json b/assets/toml-test/tests/valid/inline-table/inline-table.json
new file mode 100644 (file)
index 0000000..2468f62
--- /dev/null
@@ -0,0 +1,48 @@
+{
+  "name": {
+    "first": {
+      "type": "string",
+      "value": "Tom"
+    },
+    "last": {
+      "type": "string",
+      "value": "Preston-Werner"
+    }
+  },
+  "point": {
+    "x": {
+      "type": "integer",
+      "value": "1"
+    },
+    "y": {
+      "type": "integer",
+      "value": "2"
+    }
+  },
+  "simple": {
+    "a": {
+      "type": "integer",
+      "value": "1"
+    }
+  },
+  "str-key": {
+    "a": {
+      "type": "integer",
+      "value": "1"
+    }
+  },
+  "table-array": [
+    {
+      "a": {
+        "type": "integer",
+        "value": "1"
+      }
+    },
+    {
+      "b": {
+        "type": "integer",
+        "value": "2"
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/inline-table/inline-table.toml b/assets/toml-test/tests/valid/inline-table/inline-table.toml
new file mode 100644 (file)
index 0000000..257047e
--- /dev/null
@@ -0,0 +1,5 @@
+name = { first = "Tom", last = "Preston-Werner" }
+point = { x = 1, y = 2 }
+simple = { a = 1 }
+str-key = { "a" = 1 }
+table-array = [{ "a" = 1 }, { "b" = 2 }]
diff --git a/assets/toml-test/tests/valid/inline-table/key-dotted.json b/assets/toml-test/tests/valid/inline-table/key-dotted.json
new file mode 100644 (file)
index 0000000..3886803
--- /dev/null
@@ -0,0 +1,140 @@
+{
+  "a": {
+    "a": {
+      "b": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  },
+  "arr": [
+    {
+      "T": {
+        "a": {
+          "b": {
+            "type": "integer",
+            "value": "1"
+          }
+        }
+      },
+      "t": {
+        "a": {
+          "b": {
+            "type": "integer",
+            "value": "1"
+          }
+        }
+      }
+    },
+    {
+      "T": {
+        "a": {
+          "b": {
+            "type": "integer",
+            "value": "2"
+          }
+        }
+      },
+      "t": {
+        "a": {
+          "b": {
+            "type": "integer",
+            "value": "2"
+          }
+        }
+      }
+    }
+  ],
+  "b": {
+    "a": {
+      "b": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  },
+  "c": {
+    "a": {
+      "b": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  },
+  "d": {
+    "a": {
+      "b": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  },
+  "e": {
+    "a": {
+      "b": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  },
+  "inline": {
+    "a": {
+      "b": {
+        "type": "integer",
+        "value": "42"
+      }
+    }
+  },
+  "many": {
+    "dots": {
+      "here": {
+        "dot": {
+          "dot": {
+            "dot": {
+              "a": {
+                "b": {
+                  "c": {
+                    "type": "integer",
+                    "value": "1"
+                  },
+                  "d": {
+                    "type": "integer",
+                    "value": "2"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "tbl": {
+    "a": {
+      "b": {
+        "c": {
+          "d": {
+            "e": {
+              "type": "integer",
+              "value": "1"
+            }
+          }
+        }
+      }
+    },
+    "x": {
+      "a": {
+        "b": {
+          "c": {
+            "d": {
+              "e": {
+                "type": "integer",
+                "value": "1"
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/key-dotted.toml b/assets/toml-test/tests/valid/inline-table/key-dotted.toml
new file mode 100644 (file)
index 0000000..e812943
--- /dev/null
@@ -0,0 +1,23 @@
+inline = {a.b = 42}
+
+many.dots.here.dot.dot.dot = {a.b.c = 1, a.b.d = 2}
+
+a = {   a.b  =  1   }
+b = {   "a"."b"  =  1   }
+c = {   a   .   b  =  1   }
+d = {   'a'   .   "b"  =  1   }
+e = {a.b=1}
+
+[tbl]
+a.b.c = {d.e=1}
+
+[tbl.x]
+a.b.c = {d.e=1}
+
+[[arr]]
+t = {a.b=1}
+T = {a.b=1}
+
+[[arr]]
+t = {a.b=2}
+T = {a.b=2}
diff --git a/assets/toml-test/tests/valid/inline-table/multiline.json b/assets/toml-test/tests/valid/inline-table/multiline.json
new file mode 100644 (file)
index 0000000..f946d81
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "tbl_multiline": {
+    "a": {
+      "type": "integer",
+      "value": "1"
+    },
+    "b": {
+      "type": "string",
+      "value": "multiline\n"
+    },
+    "c": {
+      "type": "string",
+      "value": "and yet\nanother line"
+    },
+    "d": {
+      "type": "integer",
+      "value": "4"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/multiline.toml b/assets/toml-test/tests/valid/inline-table/multiline.toml
new file mode 100644 (file)
index 0000000..a653b18
--- /dev/null
@@ -0,0 +1,4 @@
+tbl_multiline = { a = 1, b = """
+multiline
+""", c = """and yet
+another line""", d = 4 }
diff --git a/assets/toml-test/tests/valid/inline-table/nest.json b/assets/toml-test/tests/valid/inline-table/nest.json
new file mode 100644 (file)
index 0000000..70aebb3
--- /dev/null
@@ -0,0 +1,64 @@
+{
+  "arr_arr_tbl_empty": [
+    [
+      {}
+    ]
+  ],
+  "arr_arr_tbl_val": [
+    [
+      {
+        "one": {
+          "type": "integer",
+          "value": "1"
+        }
+      }
+    ]
+  ],
+  "arr_arr_tbls": [
+    [
+      {
+        "one": {
+          "type": "integer",
+          "value": "1"
+        }
+      },
+      {
+        "two": {
+          "type": "integer",
+          "value": "2"
+        }
+      }
+    ]
+  ],
+  "arr_tbl_tbl": [
+    {
+      "tbl": {
+        "one": {
+          "type": "integer",
+          "value": "1"
+        }
+      }
+    }
+  ],
+  "tbl_arr_tbl": {
+    "arr_tbl": [
+      {
+        "one": {
+          "type": "integer",
+          "value": "1"
+        }
+      }
+    ]
+  },
+  "tbl_tbl_empty": {
+    "tbl_0": {}
+  },
+  "tbl_tbl_val": {
+    "tbl_1": {
+      "one": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/nest.toml b/assets/toml-test/tests/valid/inline-table/nest.toml
new file mode 100644 (file)
index 0000000..2624c1d
--- /dev/null
@@ -0,0 +1,10 @@
+tbl_tbl_empty = { tbl_0 = {} }
+tbl_tbl_val   = { tbl_1 = { one = 1 } }
+tbl_arr_tbl   = { arr_tbl = [ { one = 1 } ] }
+arr_tbl_tbl   = [ { tbl = { one = 1 } } ]
+
+# Array-of-array-of-table is interesting because it can only
+# be represented in inline form.
+arr_arr_tbl_empty = [ [ {} ] ]
+arr_arr_tbl_val = [ [ { one = 1 } ] ]
+arr_arr_tbls  = [ [ { one = 1 }, { two = 2 } ] ]
diff --git a/assets/toml-test/tests/valid/inline-table/newline.json b/assets/toml-test/tests/valid/inline-table/newline.json
new file mode 100644 (file)
index 0000000..c19e588
--- /dev/null
@@ -0,0 +1,50 @@
+{
+  "tbl-1": {
+    "1": {
+      "type": "integer",
+      "value": "2"
+    },
+    "arr": [
+      {
+        "type": "integer",
+        "value": "1"
+      },
+      {
+        "type": "integer",
+        "value": "2"
+      },
+      {
+        "type": "integer",
+        "value": "3"
+      }
+    ],
+    "hello": {
+      "type": "string",
+      "value": "world"
+    },
+    "tbl": {
+      "k": {
+        "type": "integer",
+        "value": "1"
+      }
+    }
+  },
+  "tbl-2": {
+    "k": {
+      "type": "string",
+      "value": "\tHello\n\t"
+    }
+  },
+  "trailing-comma-1": {
+    "c": {
+      "type": "integer",
+      "value": "1"
+    }
+  },
+  "trailing-comma-2": {
+    "c": {
+      "type": "integer",
+      "value": "1"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/inline-table/newline.toml b/assets/toml-test/tests/valid/inline-table/newline.toml
new file mode 100644 (file)
index 0000000..914afe9
--- /dev/null
@@ -0,0 +1,24 @@
+# TOML 1.1 supports newlines in inline tables and trailing commas.
+
+trailing-comma-1 = {
+       c = 1,
+}
+trailing-comma-2 = { c = 1, }
+
+tbl-1 = {
+       hello = "world",
+       1     = 2,
+       arr   = [1,
+                2,
+                3,
+               ],
+       tbl = {
+                k = 1,
+       }
+}
+
+tbl-2 = {
+       k = """
+       Hello
+       """
+}
diff --git a/assets/toml-test/tests/valid/integer/integer.json b/assets/toml-test/tests/valid/integer/integer.json
new file mode 100644 (file)
index 0000000..eee9758
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "answer": {
+    "type": "integer",
+    "value": "42"
+  },
+  "neganswer": {
+    "type": "integer",
+    "value": "-42"
+  },
+  "posanswer": {
+    "type": "integer",
+    "value": "42"
+  },
+  "zero": {
+    "type": "integer",
+    "value": "0"
+  }
+}
diff --git a/assets/toml-test/tests/valid/integer/integer.toml b/assets/toml-test/tests/valid/integer/integer.toml
new file mode 100644 (file)
index 0000000..b62de30
--- /dev/null
@@ -0,0 +1,4 @@
+answer = 42
+posanswer = +42
+neganswer = -42
+zero = 0
diff --git a/assets/toml-test/tests/valid/integer/literals.json b/assets/toml-test/tests/valid/integer/literals.json
new file mode 100644 (file)
index 0000000..1a8555b
--- /dev/null
@@ -0,0 +1,38 @@
+{
+  "bin1": {
+    "type": "integer",
+    "value": "214"
+  },
+  "bin2": {
+    "type": "integer",
+    "value": "5"
+  },
+  "hex1": {
+    "type": "integer",
+    "value": "3735928559"
+  },
+  "hex2": {
+    "type": "integer",
+    "value": "3735928559"
+  },
+  "hex3": {
+    "type": "integer",
+    "value": "3735928559"
+  },
+  "hex4": {
+    "type": "integer",
+    "value": "2439"
+  },
+  "oct1": {
+    "type": "integer",
+    "value": "342391"
+  },
+  "oct2": {
+    "type": "integer",
+    "value": "493"
+  },
+  "oct3": {
+    "type": "integer",
+    "value": "501"
+  }
+}
diff --git a/assets/toml-test/tests/valid/integer/literals.toml b/assets/toml-test/tests/valid/integer/literals.toml
new file mode 100644 (file)
index 0000000..a078590
--- /dev/null
@@ -0,0 +1,11 @@
+bin1 = 0b11010110
+bin2 = 0b1_0_1
+
+oct1 = 0o01234567
+oct2 = 0o755
+oct3 = 0o7_6_5
+
+hex1 = 0xDEADBEEF
+hex2 = 0xdeadbeef
+hex3 = 0xdead_beef
+hex4 = 0x00987
diff --git a/assets/toml-test/tests/valid/integer/long.json b/assets/toml-test/tests/valid/integer/long.json
new file mode 100644 (file)
index 0000000..6f4f0a7
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "int64-max": {
+    "type": "integer",
+    "value": "9223372036854775807"
+  },
+  "int64-max-neg": {
+    "type": "integer",
+    "value": "-9223372036854775808"
+  }
+}
diff --git a/assets/toml-test/tests/valid/integer/long.toml b/assets/toml-test/tests/valid/integer/long.toml
new file mode 100644 (file)
index 0000000..5db5ed7
--- /dev/null
@@ -0,0 +1,2 @@
+int64-max = 9223372036854775807
+int64-max-neg = -9223372036854775808
diff --git a/assets/toml-test/tests/valid/integer/underscore.json b/assets/toml-test/tests/valid/integer/underscore.json
new file mode 100644 (file)
index 0000000..10b9b59
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "kilo": {
+    "type": "integer",
+    "value": "1000"
+  },
+  "x": {
+    "type": "integer",
+    "value": "1111"
+  }
+}
diff --git a/assets/toml-test/tests/valid/integer/underscore.toml b/assets/toml-test/tests/valid/integer/underscore.toml
new file mode 100644 (file)
index 0000000..7c2da5f
--- /dev/null
@@ -0,0 +1,2 @@
+kilo = 1_000
+x = 1_1_1_1
diff --git a/assets/toml-test/tests/valid/integer/zero.json b/assets/toml-test/tests/valid/integer/zero.json
new file mode 100644 (file)
index 0000000..9d5c707
--- /dev/null
@@ -0,0 +1,50 @@
+{
+  "a2": {
+    "type": "integer",
+    "value": "0"
+  },
+  "a3": {
+    "type": "integer",
+    "value": "0"
+  },
+  "b1": {
+    "type": "integer",
+    "value": "0"
+  },
+  "b2": {
+    "type": "integer",
+    "value": "0"
+  },
+  "b3": {
+    "type": "integer",
+    "value": "0"
+  },
+  "d1": {
+    "type": "integer",
+    "value": "0"
+  },
+  "d2": {
+    "type": "integer",
+    "value": "0"
+  },
+  "d3": {
+    "type": "integer",
+    "value": "0"
+  },
+  "h1": {
+    "type": "integer",
+    "value": "0"
+  },
+  "h2": {
+    "type": "integer",
+    "value": "0"
+  },
+  "h3": {
+    "type": "integer",
+    "value": "0"
+  },
+  "o1": {
+    "type": "integer",
+    "value": "0"
+  }
+}
diff --git a/assets/toml-test/tests/valid/integer/zero.toml b/assets/toml-test/tests/valid/integer/zero.toml
new file mode 100644 (file)
index 0000000..4687c28
--- /dev/null
@@ -0,0 +1,15 @@
+d1 = 0
+d2 = +0
+d3 = -0
+
+h1 = 0x0
+h2 = 0x00
+h3 = 0x00000
+
+o1 = 0o0
+a2 = 0o00
+a3 = 0o00000
+
+b1 = 0b0
+b2 = 0b00
+b3 = 0b00000
diff --git a/assets/toml-test/tests/valid/key/alphanum.json b/assets/toml-test/tests/valid/key/alphanum.json
new file mode 100644 (file)
index 0000000..a54e1d3
--- /dev/null
@@ -0,0 +1,46 @@
+{
+  "000111": {
+    "type": "string",
+    "value": "leading"
+  },
+  "10e3": {
+    "type": "string",
+    "value": "false float"
+  },
+  "123": {
+    "type": "string",
+    "value": "num"
+  },
+  "2018_10": {
+    "001": {
+      "type": "integer",
+      "value": "1"
+    }
+  },
+  "34-11": {
+    "type": "integer",
+    "value": "23"
+  },
+  "a-a-a": {
+    "_": {
+      "type": "bool",
+      "value": "false"
+    }
+  },
+  "alpha": {
+    "type": "string",
+    "value": "a"
+  },
+  "one1two2": {
+    "type": "string",
+    "value": "mixed"
+  },
+  "under_score": {
+    "type": "string",
+    "value": "___"
+  },
+  "with-dash": {
+    "type": "string",
+    "value": "dashed"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/alphanum.toml b/assets/toml-test/tests/valid/key/alphanum.toml
new file mode 100644 (file)
index 0000000..0632e9c
--- /dev/null
@@ -0,0 +1,14 @@
+alpha = "a"
+123 = "num"
+000111 = "leading"
+10e3 = "false float"
+one1two2 = "mixed"
+with-dash = "dashed"
+under_score = "___"
+34-11 = 23
+
+[2018_10]
+001 = 1
+
+[a-a-a]
+_ = false
diff --git a/assets/toml-test/tests/valid/key/case-sensitive.json b/assets/toml-test/tests/valid/key/case-sensitive.json
new file mode 100644 (file)
index 0000000..1f205d2
--- /dev/null
@@ -0,0 +1,38 @@
+{
+  "Section": {
+    "M": {
+      "type": "string",
+      "value": "latin letter M"
+    },
+    "name": {
+      "type": "string",
+      "value": "different section!!"
+    },
+    "Μ": {
+      "type": "string",
+      "value": "greek capital letter MU"
+    },
+    "μ": {
+      "type": "string",
+      "value": "greek small letter mu"
+    }
+  },
+  "sectioN": {
+    "type": "string",
+    "value": "NN"
+  },
+  "section": {
+    "NAME": {
+      "type": "string",
+      "value": "upper"
+    },
+    "Name": {
+      "type": "string",
+      "value": "capitalized"
+    },
+    "name": {
+      "type": "string",
+      "value": "lower"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/case-sensitive.toml b/assets/toml-test/tests/valid/key/case-sensitive.toml
new file mode 100644 (file)
index 0000000..e02b3a5
--- /dev/null
@@ -0,0 +1,13 @@
+sectioN = "NN"
+
+[section]
+name = "lower"
+NAME = "upper"
+Name = "capitalized"
+
+[Section]
+name = "different section!!"
+"μ" = "greek small letter mu"
+"Μ" = "greek capital letter MU"
+M = "latin letter M"
+
diff --git a/assets/toml-test/tests/valid/key/dotted.json b/assets/toml-test/tests/valid/key/dotted.json
new file mode 100644 (file)
index 0000000..a527a72
--- /dev/null
@@ -0,0 +1,132 @@
+{
+  "a": {
+    "few": {
+      "dots": {
+        "polka": {
+          "dance-with": {
+            "type": "string",
+            "value": "Dot"
+          },
+          "dot": {
+            "type": "string",
+            "value": "again?"
+          }
+        }
+      }
+    }
+  },
+  "arr": [
+    {
+      "a": {
+        "b": {
+          "c": {
+            "type": "integer",
+            "value": "1"
+          },
+          "d": {
+            "type": "integer",
+            "value": "2"
+          }
+        }
+      }
+    },
+    {
+      "a": {
+        "b": {
+          "c": {
+            "type": "integer",
+            "value": "3"
+          },
+          "d": {
+            "type": "integer",
+            "value": "4"
+          }
+        }
+      }
+    }
+  ],
+  "count": {
+    "a": {
+      "type": "integer",
+      "value": "1"
+    },
+    "b": {
+      "type": "integer",
+      "value": "2"
+    },
+    "c": {
+      "type": "integer",
+      "value": "3"
+    },
+    "d": {
+      "type": "integer",
+      "value": "4"
+    },
+    "e": {
+      "type": "integer",
+      "value": "5"
+    },
+    "f": {
+      "type": "integer",
+      "value": "6"
+    },
+    "g": {
+      "type": "integer",
+      "value": "7"
+    },
+    "h": {
+      "type": "integer",
+      "value": "8"
+    },
+    "i": {
+      "type": "integer",
+      "value": "9"
+    },
+    "j": {
+      "type": "integer",
+      "value": "10"
+    },
+    "k": {
+      "type": "integer",
+      "value": "11"
+    },
+    "l": {
+      "type": "integer",
+      "value": "12"
+    }
+  },
+  "many": {
+    "dots": {
+      "here": {
+        "dot": {
+          "dot": {
+            "dot": {
+              "type": "integer",
+              "value": "42"
+            }
+          }
+        }
+      }
+    }
+  },
+  "name": {
+    "first": {
+      "type": "string",
+      "value": "Arthur"
+    },
+    "last": {
+      "type": "string",
+      "value": "Dent"
+    }
+  },
+  "tbl": {
+    "a": {
+      "b": {
+        "c": {
+          "type": "float",
+          "value": "42.666"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/dotted.toml b/assets/toml-test/tests/valid/key/dotted.toml
new file mode 100644 (file)
index 0000000..52d62d7
--- /dev/null
@@ -0,0 +1,35 @@
+# Note: this file contains literal tab characters.
+
+name.first = "Arthur"
+"name".'last' = "Dent"
+
+many.dots.here.dot.dot.dot = 42
+
+# Space are ignored, and key parts can be quoted.
+count.a       = 1
+count . b     = 2
+"count"."c"   = 3
+"count" . "d" = 4
+'count'.'e'   = 5
+'count' . 'f' = 6
+"count".'g'   = 7
+"count" . 'h' = 8
+count.'i'     = 9
+count  .        'j'       = 10
+"count".k     = 11
+"count" . l   = 12
+
+[tbl]
+a.b.c = 42.666
+
+[a.few.dots]
+polka.dot = "again?"
+polka.dance-with = "Dot"
+
+[[arr]]
+a.b.c=1
+a.b.d=2
+
+[[arr]]
+a.b.c=3
+a.b.d=4
diff --git a/assets/toml-test/tests/valid/key/empty.json b/assets/toml-test/tests/valid/key/empty.json
new file mode 100644 (file)
index 0000000..44948a9
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "": {
+    "type": "string",
+    "value": "blank"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/empty.toml b/assets/toml-test/tests/valid/key/empty.toml
new file mode 100644 (file)
index 0000000..0a1640d
--- /dev/null
@@ -0,0 +1 @@
+"" = "blank"
diff --git a/assets/toml-test/tests/valid/key/equals-nospace.json b/assets/toml-test/tests/valid/key/equals-nospace.json
new file mode 100644 (file)
index 0000000..9394e56
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "answer": {
+    "type": "integer",
+    "value": "42"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/equals-nospace.toml b/assets/toml-test/tests/valid/key/equals-nospace.toml
new file mode 100644 (file)
index 0000000..560901c
--- /dev/null
@@ -0,0 +1 @@
+answer=42
diff --git a/assets/toml-test/tests/valid/key/escapes.json b/assets/toml-test/tests/valid/key/escapes.json
new file mode 100644 (file)
index 0000000..e62b3a1
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "\n": {
+    "type": "string",
+    "value": "newline"
+  },
+  "\"": {
+    "type": "string",
+    "value": "just a quote"
+  },
+  "\"quoted\"": {
+    "quote": {
+      "type": "bool",
+      "value": "true"
+    }
+  },
+  "a.b": {
+    "À": {}
+  },
+  "backsp\u0008\u0008": {},
+  "À": {
+    "type": "string",
+    "value": "latin capital letter A with grave"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/escapes.toml b/assets/toml-test/tests/valid/key/escapes.toml
new file mode 100644 (file)
index 0000000..aac3c0a
--- /dev/null
@@ -0,0 +1,10 @@
+"\n" = "newline"
+"\u00c0" = "latin capital letter A with grave"
+"\"" = "just a quote"
+
+["backsp\b\b"]
+
+["\"quoted\""]
+quote = true
+
+["a.b"."\u00c0"]
diff --git a/assets/toml-test/tests/valid/key/numeric-dotted.json b/assets/toml-test/tests/valid/key/numeric-dotted.json
new file mode 100644 (file)
index 0000000..43dd4d1
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "1": {
+    "2": {
+      "type": "integer",
+      "value": "3"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/numeric-dotted.toml b/assets/toml-test/tests/valid/key/numeric-dotted.toml
new file mode 100644 (file)
index 0000000..538204c
--- /dev/null
@@ -0,0 +1 @@
+1.2 = 3
diff --git a/assets/toml-test/tests/valid/key/numeric.json b/assets/toml-test/tests/valid/key/numeric.json
new file mode 100644 (file)
index 0000000..eddb88b
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "1": {
+    "type": "integer",
+    "value": "1"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/numeric.toml b/assets/toml-test/tests/valid/key/numeric.toml
new file mode 100644 (file)
index 0000000..532356f
--- /dev/null
@@ -0,0 +1 @@
+1 = 1
diff --git a/assets/toml-test/tests/valid/key/quoted-dots.json b/assets/toml-test/tests/valid/key/quoted-dots.json
new file mode 100644 (file)
index 0000000..1582c5b
--- /dev/null
@@ -0,0 +1,32 @@
+{
+  "plain": {
+    "type": "integer",
+    "value": "1"
+  },
+  "plain_table": {
+    "plain": {
+      "type": "integer",
+      "value": "3"
+    },
+    "with.dot": {
+      "type": "integer",
+      "value": "4"
+    }
+  },
+  "table": {
+    "withdot": {
+      "key.with.dots": {
+        "type": "integer",
+        "value": "6"
+      },
+      "plain": {
+        "type": "integer",
+        "value": "5"
+      }
+    }
+  },
+  "with.dot": {
+    "type": "integer",
+    "value": "2"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/quoted-dots.toml b/assets/toml-test/tests/valid/key/quoted-dots.toml
new file mode 100644 (file)
index 0000000..65fcddf
--- /dev/null
@@ -0,0 +1,10 @@
+plain = 1
+"with.dot" = 2
+
+[plain_table]
+plain = 3
+"with.dot" = 4
+
+[table.withdot]
+plain = 5
+"key.with.dots" = 6
diff --git a/assets/toml-test/tests/valid/key/space.json b/assets/toml-test/tests/valid/key/space.json
new file mode 100644 (file)
index 0000000..670d16a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  " c d ": {
+    "type": "integer",
+    "value": "2"
+  },
+  " tbl ": {
+    "\ttab\ttab\t": {
+      "type": "string",
+      "value": "tab"
+    }
+  },
+  "a b": {
+    "type": "integer",
+    "value": "1"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/space.toml b/assets/toml-test/tests/valid/key/space.toml
new file mode 100644 (file)
index 0000000..4234f88
--- /dev/null
@@ -0,0 +1,6 @@
+# Keep whitespace inside quotes keys at all positions.
+"a b"   = 1
+" c d " = 2
+
+[ " tbl " ]
+"\ttab\ttab\t" = "tab"
diff --git a/assets/toml-test/tests/valid/key/special-chars.json b/assets/toml-test/tests/valid/key/special-chars.json
new file mode 100644 (file)
index 0000000..fa64c7d
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "=~!@$^\u0026*()_+-`1234567890[]|/?\u003e\u003c.,;:'=": {
+    "type": "integer",
+    "value": "1"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/special-chars.toml b/assets/toml-test/tests/valid/key/special-chars.toml
new file mode 100644 (file)
index 0000000..0ba7168
--- /dev/null
@@ -0,0 +1 @@
+"=~!@$^&*()_+-`1234567890[]|/?><.,;:'=" = 1
diff --git a/assets/toml-test/tests/valid/key/special-word.json b/assets/toml-test/tests/valid/key/special-word.json
new file mode 100644 (file)
index 0000000..59ce693
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "false": {
+    "type": "bool",
+    "value": "false"
+  },
+  "inf": {
+    "type": "integer",
+    "value": "100000000"
+  },
+  "nan": {
+    "type": "string",
+    "value": "ceci n'est pas un nombre"
+  },
+  "true": {
+    "type": "integer",
+    "value": "1"
+  }
+}
diff --git a/assets/toml-test/tests/valid/key/special-word.toml b/assets/toml-test/tests/valid/key/special-word.toml
new file mode 100644 (file)
index 0000000..0b836f1
--- /dev/null
@@ -0,0 +1,5 @@
+false = false
+true = 1
+inf = 100000000
+nan = "ceci n'est pas un nombre"
+
diff --git a/assets/toml-test/tests/valid/newline-crlf.json b/assets/toml-test/tests/valid/newline-crlf.json
new file mode 100644 (file)
index 0000000..acf617e
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "newline": {
+    "type": "string",
+    "value": "crlf"
+  },
+  "os": {
+    "type": "string",
+    "value": "DOS"
+  }
+}
diff --git a/assets/toml-test/tests/valid/newline-crlf.toml b/assets/toml-test/tests/valid/newline-crlf.toml
new file mode 100644 (file)
index 0000000..0030024
--- /dev/null
@@ -0,0 +1,2 @@
+os = "DOS"\r
+newline = "crlf"\r
diff --git a/assets/toml-test/tests/valid/newline-lf.json b/assets/toml-test/tests/valid/newline-lf.json
new file mode 100644 (file)
index 0000000..66cf871
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "newline": {
+    "type": "string",
+    "value": "lf"
+  },
+  "os": {
+    "type": "string",
+    "value": "unix"
+  }
+}
diff --git a/assets/toml-test/tests/valid/newline-lf.toml b/assets/toml-test/tests/valid/newline-lf.toml
new file mode 100644 (file)
index 0000000..0f3377c
--- /dev/null
@@ -0,0 +1,2 @@
+os = "unix"
+newline = "lf"
diff --git a/assets/toml-test/tests/valid/spec-example-1-compact.json b/assets/toml-test/tests/valid/spec-example-1-compact.json
new file mode 100644 (file)
index 0000000..9f4078a
--- /dev/null
@@ -0,0 +1,100 @@
+{
+  "clients": {
+    "data": [
+      [
+        {
+          "type": "string",
+          "value": "gamma"
+        },
+        {
+          "type": "string",
+          "value": "delta"
+        }
+      ],
+      [
+        {
+          "type": "integer",
+          "value": "1"
+        },
+        {
+          "type": "integer",
+          "value": "2"
+        }
+      ]
+    ],
+    "hosts": [
+      {
+        "type": "string",
+        "value": "alpha"
+      },
+      {
+        "type": "string",
+        "value": "omega"
+      }
+    ]
+  },
+  "database": {
+    "connection_max": {
+      "type": "integer",
+      "value": "5000"
+    },
+    "enabled": {
+      "type": "bool",
+      "value": "true"
+    },
+    "ports": [
+      {
+        "type": "integer",
+        "value": "8001"
+      },
+      {
+        "type": "integer",
+        "value": "8001"
+      },
+      {
+        "type": "integer",
+        "value": "8002"
+      }
+    ],
+    "server": {
+      "type": "string",
+      "value": "192.168.1.1"
+    }
+  },
+  "owner": {
+    "dob": {
+      "type": "datetime",
+      "value": "1979-05-27T07:32:00-08:00"
+    },
+    "name": {
+      "type": "string",
+      "value": "Lance Uppercut"
+    }
+  },
+  "servers": {
+    "alpha": {
+      "dc": {
+        "type": "string",
+        "value": "eqdc10"
+      },
+      "ip": {
+        "type": "string",
+        "value": "10.0.0.1"
+      }
+    },
+    "beta": {
+      "dc": {
+        "type": "string",
+        "value": "eqdc10"
+      },
+      "ip": {
+        "type": "string",
+        "value": "10.0.0.2"
+      }
+    }
+  },
+  "title": {
+    "type": "string",
+    "value": "TOML Example"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec-example-1-compact.toml b/assets/toml-test/tests/valid/spec-example-1-compact.toml
new file mode 100644 (file)
index 0000000..15e2b84
--- /dev/null
@@ -0,0 +1,23 @@
+#Useless spaces eliminated.
+title="TOML Example"
+[owner]
+name="Lance Uppercut"
+dob=1979-05-27T07:32:00-08:00#First class dates
+[database]
+server="192.168.1.1"
+ports=[8001,8001,8002]
+connection_max=5000
+enabled=true
+[servers]
+[servers.alpha]
+ip="10.0.0.1"
+dc="eqdc10"
+[servers.beta]
+ip="10.0.0.2"
+dc="eqdc10"
+[clients]
+data=[["gamma","delta"],[1,2]]
+hosts=[
+"alpha",
+"omega"
+]
diff --git a/assets/toml-test/tests/valid/spec-example-1.json b/assets/toml-test/tests/valid/spec-example-1.json
new file mode 100644 (file)
index 0000000..9f4078a
--- /dev/null
@@ -0,0 +1,100 @@
+{
+  "clients": {
+    "data": [
+      [
+        {
+          "type": "string",
+          "value": "gamma"
+        },
+        {
+          "type": "string",
+          "value": "delta"
+        }
+      ],
+      [
+        {
+          "type": "integer",
+          "value": "1"
+        },
+        {
+          "type": "integer",
+          "value": "2"
+        }
+      ]
+    ],
+    "hosts": [
+      {
+        "type": "string",
+        "value": "alpha"
+      },
+      {
+        "type": "string",
+        "value": "omega"
+      }
+    ]
+  },
+  "database": {
+    "connection_max": {
+      "type": "integer",
+      "value": "5000"
+    },
+    "enabled": {
+      "type": "bool",
+      "value": "true"
+    },
+    "ports": [
+      {
+        "type": "integer",
+        "value": "8001"
+      },
+      {
+        "type": "integer",
+        "value": "8001"
+      },
+      {
+        "type": "integer",
+        "value": "8002"
+      }
+    ],
+    "server": {
+      "type": "string",
+      "value": "192.168.1.1"
+    }
+  },
+  "owner": {
+    "dob": {
+      "type": "datetime",
+      "value": "1979-05-27T07:32:00-08:00"
+    },
+    "name": {
+      "type": "string",
+      "value": "Lance Uppercut"
+    }
+  },
+  "servers": {
+    "alpha": {
+      "dc": {
+        "type": "string",
+        "value": "eqdc10"
+      },
+      "ip": {
+        "type": "string",
+        "value": "10.0.0.1"
+      }
+    },
+    "beta": {
+      "dc": {
+        "type": "string",
+        "value": "eqdc10"
+      },
+      "ip": {
+        "type": "string",
+        "value": "10.0.0.2"
+      }
+    }
+  },
+  "title": {
+    "type": "string",
+    "value": "TOML Example"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec-example-1.toml b/assets/toml-test/tests/valid/spec-example-1.toml
new file mode 100644 (file)
index 0000000..52fd1e8
--- /dev/null
@@ -0,0 +1,33 @@
+# This is a TOML document. Boom.
+
+title = "TOML Example"
+
+[owner]
+name = "Lance Uppercut"
+dob = 1979-05-27T07:32:00-08:00 # First class dates? Why not?
+
+[database]
+server = "192.168.1.1"
+ports = [ 8001, 8001, 8002 ]
+connection_max = 5000
+enabled = true
+
+[servers]
+
+  # You can indent as you please. Tabs or spaces. TOML don't care.
+  [servers.alpha]
+  ip = "10.0.0.1"
+  dc = "eqdc10"
+
+  [servers.beta]
+  ip = "10.0.0.2"
+  dc = "eqdc10"
+
+[clients]
+data = [ ["gamma", "delta"], [1, 2] ]
+
+# Line breaks are OK when inside arrays
+hosts = [
+  "alpha",
+  "omega"
+]
diff --git a/assets/toml-test/tests/valid/spec/array-0.json b/assets/toml-test/tests/valid/spec/array-0.json
new file mode 100644 (file)
index 0000000..f150e9d
--- /dev/null
@@ -0,0 +1,146 @@
+{
+  "colors": [
+    {
+      "type": "string",
+      "value": "red"
+    },
+    {
+      "type": "string",
+      "value": "yellow"
+    },
+    {
+      "type": "string",
+      "value": "green"
+    }
+  ],
+  "contributors": [
+    {
+      "type": "string",
+      "value": "Foo Bar \u003cfoo@example.com\u003e"
+    },
+    {
+      "email": {
+        "type": "string",
+        "value": "bazqux@example.com"
+      },
+      "name": {
+        "type": "string",
+        "value": "Baz Qux"
+      },
+      "url": {
+        "type": "string",
+        "value": "https://example.com/bazqux"
+      }
+    }
+  ],
+  "integers": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    },
+    {
+      "type": "integer",
+      "value": "3"
+    }
+  ],
+  "nested_arrays_of_ints": [
+    [
+      {
+        "type": "integer",
+        "value": "1"
+      },
+      {
+        "type": "integer",
+        "value": "2"
+      }
+    ],
+    [
+      {
+        "type": "integer",
+        "value": "3"
+      },
+      {
+        "type": "integer",
+        "value": "4"
+      },
+      {
+        "type": "integer",
+        "value": "5"
+      }
+    ]
+  ],
+  "nested_mixed_array": [
+    [
+      {
+        "type": "integer",
+        "value": "1"
+      },
+      {
+        "type": "integer",
+        "value": "2"
+      }
+    ],
+    [
+      {
+        "type": "string",
+        "value": "a"
+      },
+      {
+        "type": "string",
+        "value": "b"
+      },
+      {
+        "type": "string",
+        "value": "c"
+      }
+    ]
+  ],
+  "numbers": [
+    {
+      "type": "float",
+      "value": "0.1"
+    },
+    {
+      "type": "float",
+      "value": "0.2"
+    },
+    {
+      "type": "float",
+      "value": "0.5"
+    },
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    },
+    {
+      "type": "integer",
+      "value": "5"
+    }
+  ],
+  "string_array": [
+    {
+      "type": "string",
+      "value": "all"
+    },
+    {
+      "type": "string",
+      "value": "strings"
+    },
+    {
+      "type": "string",
+      "value": "are the same"
+    },
+    {
+      "type": "string",
+      "value": "type"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/spec/array-0.toml b/assets/toml-test/tests/valid/spec/array-0.toml
new file mode 100644 (file)
index 0000000..467a8bc
--- /dev/null
@@ -0,0 +1,12 @@
+integers = [ 1, 2, 3 ]
+colors = [ "red", "yellow", "green" ]
+nested_arrays_of_ints = [ [ 1, 2 ], [3, 4, 5] ]
+nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ]
+string_array = [ "all", 'strings', """are the same""", '''type''' ]
+
+# Mixed-type arrays are allowed
+numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]
+contributors = [
+  "Foo Bar <foo@example.com>",
+  { name = "Baz Qux", email = "bazqux@example.com", url = "https://example.com/bazqux" }
+]
diff --git a/assets/toml-test/tests/valid/spec/array-1.json b/assets/toml-test/tests/valid/spec/array-1.json
new file mode 100644 (file)
index 0000000..334c333
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "integers2": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    },
+    {
+      "type": "integer",
+      "value": "3"
+    }
+  ],
+  "integers3": [
+    {
+      "type": "integer",
+      "value": "1"
+    },
+    {
+      "type": "integer",
+      "value": "2"
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/spec/array-1.toml b/assets/toml-test/tests/valid/spec/array-1.toml
new file mode 100644 (file)
index 0000000..6acd9ca
--- /dev/null
@@ -0,0 +1,8 @@
+integers2 = [
+  1, 2, 3
+]
+
+integers3 = [
+  1,
+  2, # this is ok
+]
diff --git a/assets/toml-test/tests/valid/spec/array-of-tables-0.json b/assets/toml-test/tests/valid/spec/array-of-tables-0.json
new file mode 100644 (file)
index 0000000..2328757
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "products": [
+    {
+      "name": {
+        "type": "string",
+        "value": "Hammer"
+      },
+      "sku": {
+        "type": "integer",
+        "value": "738594937"
+      }
+    },
+    {},
+    {
+      "color": {
+        "type": "string",
+        "value": "gray"
+      },
+      "name": {
+        "type": "string",
+        "value": "Nail"
+      },
+      "sku": {
+        "type": "integer",
+        "value": "284758393"
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/spec/array-of-tables-0.toml b/assets/toml-test/tests/valid/spec/array-of-tables-0.toml
new file mode 100644 (file)
index 0000000..544d142
--- /dev/null
@@ -0,0 +1,11 @@
+[[products]]
+name = "Hammer"
+sku = 738594937
+
+[[products]]  # empty table within the array
+
+[[products]]
+name = "Nail"
+sku = 284758393
+
+color = "gray"
diff --git a/assets/toml-test/tests/valid/spec/array-of-tables-1.json b/assets/toml-test/tests/valid/spec/array-of-tables-1.json
new file mode 100644 (file)
index 0000000..17d4918
--- /dev/null
@@ -0,0 +1,48 @@
+{
+  "fruits": [
+    {
+      "name": {
+        "type": "string",
+        "value": "apple"
+      },
+      "physical": {
+        "color": {
+          "type": "string",
+          "value": "red"
+        },
+        "shape": {
+          "type": "string",
+          "value": "round"
+        }
+      },
+      "varieties": [
+        {
+          "name": {
+            "type": "string",
+            "value": "red delicious"
+          }
+        },
+        {
+          "name": {
+            "type": "string",
+            "value": "granny smith"
+          }
+        }
+      ]
+    },
+    {
+      "name": {
+        "type": "string",
+        "value": "banana"
+      },
+      "varieties": [
+        {
+          "name": {
+            "type": "string",
+            "value": "plantain"
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/spec/array-of-tables-1.toml b/assets/toml-test/tests/valid/spec/array-of-tables-1.toml
new file mode 100644 (file)
index 0000000..7a3971f
--- /dev/null
@@ -0,0 +1,19 @@
+[[fruits]]
+name = "apple"
+
+[fruits.physical]  # subtable
+color = "red"
+shape = "round"
+
+[[fruits.varieties]]  # nested array of tables
+name = "red delicious"
+
+[[fruits.varieties]]
+name = "granny smith"
+
+
+[[fruits]]
+name = "banana"
+
+[[fruits.varieties]]
+name = "plantain"
diff --git a/assets/toml-test/tests/valid/spec/array-of-tables-2.json b/assets/toml-test/tests/valid/spec/array-of-tables-2.json
new file mode 100644 (file)
index 0000000..f2e3f36
--- /dev/null
@@ -0,0 +1,46 @@
+{
+  "points": [
+    {
+      "x": {
+        "type": "integer",
+        "value": "1"
+      },
+      "y": {
+        "type": "integer",
+        "value": "2"
+      },
+      "z": {
+        "type": "integer",
+        "value": "3"
+      }
+    },
+    {
+      "x": {
+        "type": "integer",
+        "value": "7"
+      },
+      "y": {
+        "type": "integer",
+        "value": "8"
+      },
+      "z": {
+        "type": "integer",
+        "value": "9"
+      }
+    },
+    {
+      "x": {
+        "type": "integer",
+        "value": "2"
+      },
+      "y": {
+        "type": "integer",
+        "value": "4"
+      },
+      "z": {
+        "type": "integer",
+        "value": "8"
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/spec/array-of-tables-2.toml b/assets/toml-test/tests/valid/spec/array-of-tables-2.toml
new file mode 100644 (file)
index 0000000..ba5584a
--- /dev/null
@@ -0,0 +1,3 @@
+points = [ { x = 1, y = 2, z = 3 },
+           { x = 7, y = 8, z = 9 },
+           { x = 2, y = 4, z = 8 } ]
diff --git a/assets/toml-test/tests/valid/spec/boolean-0.json b/assets/toml-test/tests/valid/spec/boolean-0.json
new file mode 100644 (file)
index 0000000..f956ec0
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "bool1": {
+    "type": "bool",
+    "value": "true"
+  },
+  "bool2": {
+    "type": "bool",
+    "value": "false"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/boolean-0.toml b/assets/toml-test/tests/valid/spec/boolean-0.toml
new file mode 100644 (file)
index 0000000..1f80fbd
--- /dev/null
@@ -0,0 +1,2 @@
+bool1 = true
+bool2 = false
diff --git a/assets/toml-test/tests/valid/spec/comment-0.json b/assets/toml-test/tests/valid/spec/comment-0.json
new file mode 100644 (file)
index 0000000..d979607
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "another": {
+    "type": "string",
+    "value": "# This is not a comment"
+  },
+  "key": {
+    "type": "string",
+    "value": "value"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/comment-0.toml b/assets/toml-test/tests/valid/spec/comment-0.toml
new file mode 100644 (file)
index 0000000..fae57c6
--- /dev/null
@@ -0,0 +1,3 @@
+# This is a full-line comment
+key = "value"  # This is a comment at the end of a line
+another = "# This is not a comment"
diff --git a/assets/toml-test/tests/valid/spec/float-0.json b/assets/toml-test/tests/valid/spec/float-0.json
new file mode 100644 (file)
index 0000000..ae7d5a5
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "flt1": {
+    "type": "float",
+    "value": "1"
+  },
+  "flt2": {
+    "type": "float",
+    "value": "3.1415"
+  },
+  "flt3": {
+    "type": "float",
+    "value": "-0.01"
+  },
+  "flt4": {
+    "type": "float",
+    "value": "5e+22"
+  },
+  "flt5": {
+    "type": "float",
+    "value": "1e+06"
+  },
+  "flt6": {
+    "type": "float",
+    "value": "-0.02"
+  },
+  "flt7": {
+    "type": "float",
+    "value": "6.626e-34"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/float-0.toml b/assets/toml-test/tests/valid/spec/float-0.toml
new file mode 100644 (file)
index 0000000..7b29c65
--- /dev/null
@@ -0,0 +1,12 @@
+# fractional
+flt1 = +1.0
+flt2 = 3.1415
+flt3 = -0.01
+
+# exponent
+flt4 = 5e+22
+flt5 = 1e06
+flt6 = -2E-2
+
+# both
+flt7 = 6.626e-34
diff --git a/assets/toml-test/tests/valid/spec/float-1.json b/assets/toml-test/tests/valid/spec/float-1.json
new file mode 100644 (file)
index 0000000..592a4d2
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "flt8": {
+    "type": "float",
+    "value": "224617.445991228"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/float-1.toml b/assets/toml-test/tests/valid/spec/float-1.toml
new file mode 100644 (file)
index 0000000..3c8f0aa
--- /dev/null
@@ -0,0 +1 @@
+flt8 = 224_617.445_991_228
diff --git a/assets/toml-test/tests/valid/spec/float-2.json b/assets/toml-test/tests/valid/spec/float-2.json
new file mode 100644 (file)
index 0000000..9507720
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "sf1": {
+    "type": "float",
+    "value": "+Inf"
+  },
+  "sf2": {
+    "type": "float",
+    "value": "+Inf"
+  },
+  "sf3": {
+    "type": "float",
+    "value": "-Inf"
+  },
+  "sf4": {
+    "type": "float",
+    "value": "nan"
+  },
+  "sf5": {
+    "type": "float",
+    "value": "nan"
+  },
+  "sf6": {
+    "type": "float",
+    "value": "nan"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/float-2.toml b/assets/toml-test/tests/valid/spec/float-2.toml
new file mode 100644 (file)
index 0000000..4cede55
--- /dev/null
@@ -0,0 +1,9 @@
+# infinity
+sf1 = inf  # positive infinity
+sf2 = +inf # positive infinity
+sf3 = -inf # negative infinity
+
+# not a number
+sf4 = nan  # actual sNaN/qNaN encoding is implementation-specific
+sf5 = +nan # same as `nan`
+sf6 = -nan # valid, actual encoding is implementation-specific
diff --git a/assets/toml-test/tests/valid/spec/inline-table-0.json b/assets/toml-test/tests/valid/spec/inline-table-0.json
new file mode 100644 (file)
index 0000000..8c0d315
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "animal": {
+    "type": {
+      "name": {
+        "type": "string",
+        "value": "pug"
+      }
+    }
+  },
+  "name": {
+    "first": {
+      "type": "string",
+      "value": "Tom"
+    },
+    "last": {
+      "type": "string",
+      "value": "Preston-Werner"
+    }
+  },
+  "point": {
+    "x": {
+      "type": "integer",
+      "value": "1"
+    },
+    "y": {
+      "type": "integer",
+      "value": "2"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/inline-table-0.toml b/assets/toml-test/tests/valid/spec/inline-table-0.toml
new file mode 100644 (file)
index 0000000..26062b5
--- /dev/null
@@ -0,0 +1,3 @@
+name = { first = "Tom", last = "Preston-Werner" }
+point = { x = 1, y = 2 }
+animal = { type.name = "pug" }
diff --git a/assets/toml-test/tests/valid/spec/inline-table-1.json b/assets/toml-test/tests/valid/spec/inline-table-1.json
new file mode 100644 (file)
index 0000000..8c0d315
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "animal": {
+    "type": {
+      "name": {
+        "type": "string",
+        "value": "pug"
+      }
+    }
+  },
+  "name": {
+    "first": {
+      "type": "string",
+      "value": "Tom"
+    },
+    "last": {
+      "type": "string",
+      "value": "Preston-Werner"
+    }
+  },
+  "point": {
+    "x": {
+      "type": "integer",
+      "value": "1"
+    },
+    "y": {
+      "type": "integer",
+      "value": "2"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/inline-table-1.toml b/assets/toml-test/tests/valid/spec/inline-table-1.toml
new file mode 100644 (file)
index 0000000..6f72155
--- /dev/null
@@ -0,0 +1,10 @@
+[name]
+first = "Tom"
+last = "Preston-Werner"
+
+[point]
+x = 1
+y = 2
+
+[animal]
+type.name = "pug"
diff --git a/assets/toml-test/tests/valid/spec/inline-table-2.json b/assets/toml-test/tests/valid/spec/inline-table-2.json
new file mode 100644 (file)
index 0000000..406691d
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "product": {
+    "type": {
+      "name": {
+        "type": "string",
+        "value": "Nail"
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/inline-table-2.toml b/assets/toml-test/tests/valid/spec/inline-table-2.toml
new file mode 100644 (file)
index 0000000..aabb500
--- /dev/null
@@ -0,0 +1,3 @@
+[product]
+type = { name = "Nail" }
+# type.edible = false  # INVALID
diff --git a/assets/toml-test/tests/valid/spec/inline-table-3.json b/assets/toml-test/tests/valid/spec/inline-table-3.json
new file mode 100644 (file)
index 0000000..406691d
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "product": {
+    "type": {
+      "name": {
+        "type": "string",
+        "value": "Nail"
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/inline-table-3.toml b/assets/toml-test/tests/valid/spec/inline-table-3.toml
new file mode 100644 (file)
index 0000000..970949c
--- /dev/null
@@ -0,0 +1,3 @@
+[product]
+type.name = "Nail"
+# type = { edible = false }  # INVALID
diff --git a/assets/toml-test/tests/valid/spec/integer-0.json b/assets/toml-test/tests/valid/spec/integer-0.json
new file mode 100644 (file)
index 0000000..72cbbbb
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "int1": {
+    "type": "integer",
+    "value": "99"
+  },
+  "int2": {
+    "type": "integer",
+    "value": "42"
+  },
+  "int3": {
+    "type": "integer",
+    "value": "0"
+  },
+  "int4": {
+    "type": "integer",
+    "value": "-17"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/integer-0.toml b/assets/toml-test/tests/valid/spec/integer-0.toml
new file mode 100644 (file)
index 0000000..da14ea2
--- /dev/null
@@ -0,0 +1,4 @@
+int1 = +99
+int2 = 42
+int3 = 0
+int4 = -17
diff --git a/assets/toml-test/tests/valid/spec/integer-1.json b/assets/toml-test/tests/valid/spec/integer-1.json
new file mode 100644 (file)
index 0000000..f431f47
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "int5": {
+    "type": "integer",
+    "value": "1000"
+  },
+  "int6": {
+    "type": "integer",
+    "value": "5349221"
+  },
+  "int7": {
+    "type": "integer",
+    "value": "5349221"
+  },
+  "int8": {
+    "type": "integer",
+    "value": "12345"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/integer-1.toml b/assets/toml-test/tests/valid/spec/integer-1.toml
new file mode 100644 (file)
index 0000000..0c4b619
--- /dev/null
@@ -0,0 +1,4 @@
+int5 = 1_000
+int6 = 5_349_221
+int7 = 53_49_221  # Indian number system grouping
+int8 = 1_2_3_4_5  # VALID but discouraged
diff --git a/assets/toml-test/tests/valid/spec/integer-2.json b/assets/toml-test/tests/valid/spec/integer-2.json
new file mode 100644 (file)
index 0000000..b937b2b
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "bin1": {
+    "type": "integer",
+    "value": "214"
+  },
+  "hex1": {
+    "type": "integer",
+    "value": "3735928559"
+  },
+  "hex2": {
+    "type": "integer",
+    "value": "3735928559"
+  },
+  "hex3": {
+    "type": "integer",
+    "value": "3735928559"
+  },
+  "oct1": {
+    "type": "integer",
+    "value": "342391"
+  },
+  "oct2": {
+    "type": "integer",
+    "value": "493"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/integer-2.toml b/assets/toml-test/tests/valid/spec/integer-2.toml
new file mode 100644 (file)
index 0000000..ecffca6
--- /dev/null
@@ -0,0 +1,11 @@
+# hexadecimal with prefix `0x`
+hex1 = 0xDEADBEEF
+hex2 = 0xdeadbeef
+hex3 = 0xdead_beef
+
+# octal with prefix `0o`
+oct1 = 0o01234567
+oct2 = 0o755 # useful for Unix file permissions
+
+# binary with prefix `0b`
+bin1 = 0b11010110
diff --git a/assets/toml-test/tests/valid/spec/key-value-pair-0.json b/assets/toml-test/tests/valid/spec/key-value-pair-0.json
new file mode 100644 (file)
index 0000000..af3154a
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "key": {
+    "type": "string",
+    "value": "value"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/key-value-pair-0.toml b/assets/toml-test/tests/valid/spec/key-value-pair-0.toml
new file mode 100644 (file)
index 0000000..e5b34eb
--- /dev/null
@@ -0,0 +1 @@
+key = "value"
diff --git a/assets/toml-test/tests/valid/spec/keys-0.json b/assets/toml-test/tests/valid/spec/keys-0.json
new file mode 100644 (file)
index 0000000..6130c71
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "1234": {
+    "type": "string",
+    "value": "value"
+  },
+  "bare-key": {
+    "type": "string",
+    "value": "value"
+  },
+  "bare_key": {
+    "type": "string",
+    "value": "value"
+  },
+  "key": {
+    "type": "string",
+    "value": "value"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-0.toml b/assets/toml-test/tests/valid/spec/keys-0.toml
new file mode 100644 (file)
index 0000000..657ff24
--- /dev/null
@@ -0,0 +1,4 @@
+key = "value"
+bare_key = "value"
+bare-key = "value"
+1234 = "value"
diff --git a/assets/toml-test/tests/valid/spec/keys-1.json b/assets/toml-test/tests/valid/spec/keys-1.json
new file mode 100644 (file)
index 0000000..fb75603
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "127.0.0.1": {
+    "type": "string",
+    "value": "value"
+  },
+  "character encoding": {
+    "type": "string",
+    "value": "value"
+  },
+  "key2": {
+    "type": "string",
+    "value": "value"
+  },
+  "quoted \"value\"": {
+    "type": "string",
+    "value": "value"
+  },
+  "ʎǝʞ": {
+    "type": "string",
+    "value": "value"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-1.toml b/assets/toml-test/tests/valid/spec/keys-1.toml
new file mode 100644 (file)
index 0000000..cc2d1d0
--- /dev/null
@@ -0,0 +1,5 @@
+"127.0.0.1" = "value"
+"character encoding" = "value"
+"ʎǝʞ" = "value"
+'key2' = "value"
+'quoted "value"' = "value"
diff --git a/assets/toml-test/tests/valid/spec/keys-3.json b/assets/toml-test/tests/valid/spec/keys-3.json
new file mode 100644 (file)
index 0000000..b8ee719
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "name": {
+    "type": "string",
+    "value": "Orange"
+  },
+  "physical": {
+    "color": {
+      "type": "string",
+      "value": "orange"
+    },
+    "shape": {
+      "type": "string",
+      "value": "round"
+    }
+  },
+  "site": {
+    "google.com": {
+      "type": "bool",
+      "value": "true"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-3.toml b/assets/toml-test/tests/valid/spec/keys-3.toml
new file mode 100644 (file)
index 0000000..8f83571
--- /dev/null
@@ -0,0 +1,4 @@
+name = "Orange"
+physical.color = "orange"
+physical.shape = "round"
+site."google.com" = true
diff --git a/assets/toml-test/tests/valid/spec/keys-4.json b/assets/toml-test/tests/valid/spec/keys-4.json
new file mode 100644 (file)
index 0000000..c33966a
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "fruit": {
+    "color": {
+      "type": "string",
+      "value": "yellow"
+    },
+    "flavor": {
+      "type": "string",
+      "value": "banana"
+    },
+    "name": {
+      "type": "string",
+      "value": "banana"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-4.toml b/assets/toml-test/tests/valid/spec/keys-4.toml
new file mode 100644 (file)
index 0000000..75bf90b
--- /dev/null
@@ -0,0 +1,3 @@
+fruit.name = "banana"     # this is best practice
+fruit. color = "yellow"    # same as fruit.color
+fruit . flavor = "banana"   # same as fruit.flavor
diff --git a/assets/toml-test/tests/valid/spec/keys-5.json b/assets/toml-test/tests/valid/spec/keys-5.json
new file mode 100644 (file)
index 0000000..482b362
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "apple": {
+    "color": {
+      "type": "string",
+      "value": "red"
+    },
+    "skin": {
+      "type": "string",
+      "value": "thin"
+    },
+    "type": {
+      "type": "string",
+      "value": "fruit"
+    }
+  },
+  "orange": {
+    "color": {
+      "type": "string",
+      "value": "orange"
+    },
+    "skin": {
+      "type": "string",
+      "value": "thick"
+    },
+    "type": {
+      "type": "string",
+      "value": "fruit"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-5.toml b/assets/toml-test/tests/valid/spec/keys-5.toml
new file mode 100644 (file)
index 0000000..dc94a8c
--- /dev/null
@@ -0,0 +1,10 @@
+# VALID BUT DISCOURAGED
+
+apple.type = "fruit"
+orange.type = "fruit"
+
+apple.skin = "thin"
+orange.skin = "thick"
+
+apple.color = "red"
+orange.color = "orange"
diff --git a/assets/toml-test/tests/valid/spec/keys-6.json b/assets/toml-test/tests/valid/spec/keys-6.json
new file mode 100644 (file)
index 0000000..482b362
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "apple": {
+    "color": {
+      "type": "string",
+      "value": "red"
+    },
+    "skin": {
+      "type": "string",
+      "value": "thin"
+    },
+    "type": {
+      "type": "string",
+      "value": "fruit"
+    }
+  },
+  "orange": {
+    "color": {
+      "type": "string",
+      "value": "orange"
+    },
+    "skin": {
+      "type": "string",
+      "value": "thick"
+    },
+    "type": {
+      "type": "string",
+      "value": "fruit"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-6.toml b/assets/toml-test/tests/valid/spec/keys-6.toml
new file mode 100644 (file)
index 0000000..705686c
--- /dev/null
@@ -0,0 +1,9 @@
+# RECOMMENDED
+
+apple.type = "fruit"
+apple.skin = "thin"
+apple.color = "red"
+
+orange.type = "fruit"
+orange.skin = "thick"
+orange.color = "orange"
diff --git a/assets/toml-test/tests/valid/spec/keys-7.json b/assets/toml-test/tests/valid/spec/keys-7.json
new file mode 100644 (file)
index 0000000..5ab0e06
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "3": {
+    "14159": {
+      "type": "string",
+      "value": "pi"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/keys-7.toml b/assets/toml-test/tests/valid/spec/keys-7.toml
new file mode 100644 (file)
index 0000000..2efd659
--- /dev/null
@@ -0,0 +1 @@
+3.14159 = "pi"
diff --git a/assets/toml-test/tests/valid/spec/local-date-0.json b/assets/toml-test/tests/valid/spec/local-date-0.json
new file mode 100644 (file)
index 0000000..9e281f5
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "ld1": {
+    "type": "date-local",
+    "value": "1979-05-27"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/local-date-0.toml b/assets/toml-test/tests/valid/spec/local-date-0.toml
new file mode 100644 (file)
index 0000000..6670e5d
--- /dev/null
@@ -0,0 +1 @@
+ld1 = 1979-05-27
diff --git a/assets/toml-test/tests/valid/spec/local-date-time-0.json b/assets/toml-test/tests/valid/spec/local-date-time-0.json
new file mode 100644 (file)
index 0000000..d42d49d
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "ldt1": {
+    "type": "datetime-local",
+    "value": "1979-05-27T07:32:00"
+  },
+  "ldt2": {
+    "type": "datetime-local",
+    "value": "1979-05-27T00:32:00.999999"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/local-date-time-0.toml b/assets/toml-test/tests/valid/spec/local-date-time-0.toml
new file mode 100644 (file)
index 0000000..38700d2
--- /dev/null
@@ -0,0 +1,2 @@
+ldt1 = 1979-05-27T07:32:00
+ldt2 = 1979-05-27T00:32:00.999999
diff --git a/assets/toml-test/tests/valid/spec/local-time-0.json b/assets/toml-test/tests/valid/spec/local-time-0.json
new file mode 100644 (file)
index 0000000..93803fc
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "lt1": {
+    "type": "time-local",
+    "value": "07:32:00"
+  },
+  "lt2": {
+    "type": "time-local",
+    "value": "00:32:00.999999"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/local-time-0.toml b/assets/toml-test/tests/valid/spec/local-time-0.toml
new file mode 100644 (file)
index 0000000..dbd058a
--- /dev/null
@@ -0,0 +1,2 @@
+lt1 = 07:32:00
+lt2 = 00:32:00.999999
diff --git a/assets/toml-test/tests/valid/spec/offset-date-time-0.json b/assets/toml-test/tests/valid/spec/offset-date-time-0.json
new file mode 100644 (file)
index 0000000..26d59a8
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "odt1": {
+    "type": "datetime",
+    "value": "1979-05-27T07:32:00Z"
+  },
+  "odt2": {
+    "type": "datetime",
+    "value": "1979-05-27T00:32:00-07:00"
+  },
+  "odt3": {
+    "type": "datetime",
+    "value": "1979-05-27T00:32:00.999999-07:00"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/offset-date-time-0.toml b/assets/toml-test/tests/valid/spec/offset-date-time-0.toml
new file mode 100644 (file)
index 0000000..52eaff2
--- /dev/null
@@ -0,0 +1,3 @@
+odt1 = 1979-05-27T07:32:00Z
+odt2 = 1979-05-27T00:32:00-07:00
+odt3 = 1979-05-27T00:32:00.999999-07:00
diff --git a/assets/toml-test/tests/valid/spec/offset-date-time-1.json b/assets/toml-test/tests/valid/spec/offset-date-time-1.json
new file mode 100644 (file)
index 0000000..fa17a4e
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "odt4": {
+    "type": "datetime",
+    "value": "1979-05-27T07:32:00Z"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/offset-date-time-1.toml b/assets/toml-test/tests/valid/spec/offset-date-time-1.toml
new file mode 100644 (file)
index 0000000..da9bd3b
--- /dev/null
@@ -0,0 +1 @@
+odt4 = 1979-05-27 07:32:00Z
diff --git a/assets/toml-test/tests/valid/spec/string-0.json b/assets/toml-test/tests/valid/spec/string-0.json
new file mode 100644 (file)
index 0000000..3c26fa1
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "str": {
+    "type": "string",
+    "value": "I'm a string. \"You can quote me\". Name\tJosé\nLocation\tSF."
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-0.toml b/assets/toml-test/tests/valid/spec/string-0.toml
new file mode 100644 (file)
index 0000000..b611549
--- /dev/null
@@ -0,0 +1 @@
+str = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF."
diff --git a/assets/toml-test/tests/valid/spec/string-1.json b/assets/toml-test/tests/valid/spec/string-1.json
new file mode 100644 (file)
index 0000000..316d0f4
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "str1": {
+    "type": "string",
+    "value": "Roses are red\nViolets are blue"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-1.toml b/assets/toml-test/tests/valid/spec/string-1.toml
new file mode 100644 (file)
index 0000000..337ad08
--- /dev/null
@@ -0,0 +1,3 @@
+str1 = """
+Roses are red
+Violets are blue"""
diff --git a/assets/toml-test/tests/valid/spec/string-2.json b/assets/toml-test/tests/valid/spec/string-2.json
new file mode 100644 (file)
index 0000000..09faeb6
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "str2": {
+    "type": "string",
+    "value": "Roses are red\nViolets are blue"
+  },
+  "str3": {
+    "type": "string",
+    "value": "Roses are red\r\nViolets are blue"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-2.toml b/assets/toml-test/tests/valid/spec/string-2.toml
new file mode 100644 (file)
index 0000000..ce5a73b
--- /dev/null
@@ -0,0 +1,5 @@
+# On a Unix system, the above multi-line string will most likely be the same as:
+str2 = "Roses are red\nViolets are blue"
+
+# On a Windows system, it will most likely be equivalent to:
+str3 = "Roses are red\r\nViolets are blue"
diff --git a/assets/toml-test/tests/valid/spec/string-3.json b/assets/toml-test/tests/valid/spec/string-3.json
new file mode 100644 (file)
index 0000000..c55424f
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "str1": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  },
+  "str2": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  },
+  "str3": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-3.toml b/assets/toml-test/tests/valid/spec/string-3.toml
new file mode 100644 (file)
index 0000000..20b4aa7
--- /dev/null
@@ -0,0 +1,15 @@
+# The following strings are byte-for-byte equivalent:
+str1 = "The quick brown fox jumps over the lazy dog."
+
+str2 = """
+The quick brown \
+
+
+  fox jumps over \
+    the lazy dog."""
+
+str3 = """\
+       The quick brown \
+       fox jumps over \
+       the lazy dog.\
+       """
diff --git a/assets/toml-test/tests/valid/spec/string-4.json b/assets/toml-test/tests/valid/spec/string-4.json
new file mode 100644 (file)
index 0000000..52ddb19
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "str4": {
+    "type": "string",
+    "value": "Here are two quotation marks: \"\". Simple enough."
+  },
+  "str5": {
+    "type": "string",
+    "value": "Here are three quotation marks: \"\"\"."
+  },
+  "str6": {
+    "type": "string",
+    "value": "Here are fifteen quotation marks: \"\"\"\"\"\"\"\"\"\"\"\"\"\"\"."
+  },
+  "str7": {
+    "type": "string",
+    "value": "\"This,\" she said, \"is just a pointless statement.\""
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-4.toml b/assets/toml-test/tests/valid/spec/string-4.toml
new file mode 100644 (file)
index 0000000..8f51b11
--- /dev/null
@@ -0,0 +1,7 @@
+str4 = """Here are two quotation marks: "". Simple enough."""
+# str5 = """Here are three quotation marks: """."""  # INVALID
+str5 = """Here are three quotation marks: ""\"."""
+str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\"."""
+
+# "This," she said, "is just a pointless statement."
+str7 = """"This," she said, "is just a pointless statement.""""
diff --git a/assets/toml-test/tests/valid/spec/string-5.json b/assets/toml-test/tests/valid/spec/string-5.json
new file mode 100644 (file)
index 0000000..bce72d9
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "quoted": {
+    "type": "string",
+    "value": "Tom \"Dubs\" Preston-Werner"
+  },
+  "regex": {
+    "type": "string",
+    "value": "\u003c\\i\\c*\\s*\u003e"
+  },
+  "winpath": {
+    "type": "string",
+    "value": "C:\\Users\\nodejs\\templates"
+  },
+  "winpath2": {
+    "type": "string",
+    "value": "\\\\ServerX\\admin$\\system32\\"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-5.toml b/assets/toml-test/tests/valid/spec/string-5.toml
new file mode 100644 (file)
index 0000000..36772bb
--- /dev/null
@@ -0,0 +1,5 @@
+# What you see is what you get.
+winpath  = 'C:\Users\nodejs\templates'
+winpath2 = '\\ServerX\admin$\system32\'
+quoted   = 'Tom "Dubs" Preston-Werner'
+regex    = '<\i\c*\s*>'
diff --git a/assets/toml-test/tests/valid/spec/string-6.json b/assets/toml-test/tests/valid/spec/string-6.json
new file mode 100644 (file)
index 0000000..aa7663e
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "lines": {
+    "type": "string",
+    "value": "The first newline is\ntrimmed in raw strings.\n   All other whitespace\n   is preserved.\n"
+  },
+  "regex2": {
+    "type": "string",
+    "value": "I [dw]on't need \\d{2} apples"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-6.toml b/assets/toml-test/tests/valid/spec/string-6.toml
new file mode 100644 (file)
index 0000000..bc88494
--- /dev/null
@@ -0,0 +1,7 @@
+regex2 = '''I [dw]on't need \d{2} apples'''
+lines  = '''
+The first newline is
+trimmed in raw strings.
+   All other whitespace
+   is preserved.
+'''
diff --git a/assets/toml-test/tests/valid/spec/string-7.json b/assets/toml-test/tests/valid/spec/string-7.json
new file mode 100644 (file)
index 0000000..ad0fff2
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "apos15": {
+    "type": "string",
+    "value": "Here are fifteen apostrophes: '''''''''''''''"
+  },
+  "quot15": {
+    "type": "string",
+    "value": "Here are fifteen quotation marks: \"\"\"\"\"\"\"\"\"\"\"\"\"\"\""
+  },
+  "str": {
+    "type": "string",
+    "value": "'That,' she said, 'is still pointless.'"
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/string-7.toml b/assets/toml-test/tests/valid/spec/string-7.toml
new file mode 100644 (file)
index 0000000..82890b0
--- /dev/null
@@ -0,0 +1,7 @@
+quot15 = '''Here are fifteen quotation marks: """""""""""""""'''
+
+# apos15 = '''Here are fifteen apostrophes: ''''''''''''''''''  # INVALID
+apos15 = "Here are fifteen apostrophes: '''''''''''''''"
+
+# 'That,' she said, 'is still pointless.'
+str = ''''That,' she said, 'is still pointless.''''
diff --git a/assets/toml-test/tests/valid/spec/table-0.json b/assets/toml-test/tests/valid/spec/table-0.json
new file mode 100644 (file)
index 0000000..b6e7fb5
--- /dev/null
@@ -0,0 +1,3 @@
+{
+  "table": {}
+}
diff --git a/assets/toml-test/tests/valid/spec/table-0.toml b/assets/toml-test/tests/valid/spec/table-0.toml
new file mode 100644 (file)
index 0000000..f1098fd
--- /dev/null
@@ -0,0 +1 @@
+[table]
diff --git a/assets/toml-test/tests/valid/spec/table-1.json b/assets/toml-test/tests/valid/spec/table-1.json
new file mode 100644 (file)
index 0000000..f8521e0
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "table-1": {
+    "key1": {
+      "type": "string",
+      "value": "some string"
+    },
+    "key2": {
+      "type": "integer",
+      "value": "123"
+    }
+  },
+  "table-2": {
+    "key1": {
+      "type": "string",
+      "value": "another string"
+    },
+    "key2": {
+      "type": "integer",
+      "value": "456"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-1.toml b/assets/toml-test/tests/valid/spec/table-1.toml
new file mode 100644 (file)
index 0000000..6b4884c
--- /dev/null
@@ -0,0 +1,7 @@
+[table-1]
+key1 = "some string"
+key2 = 123
+
+[table-2]
+key1 = "another string"
+key2 = 456
diff --git a/assets/toml-test/tests/valid/spec/table-2.json b/assets/toml-test/tests/valid/spec/table-2.json
new file mode 100644 (file)
index 0000000..afb74d5
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "dog": {
+    "tater.man": {
+      "type": {
+        "name": {
+          "type": "string",
+          "value": "pug"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-2.toml b/assets/toml-test/tests/valid/spec/table-2.toml
new file mode 100644 (file)
index 0000000..32cbe79
--- /dev/null
@@ -0,0 +1,2 @@
+[dog."tater.man"]
+type.name = "pug"
diff --git a/assets/toml-test/tests/valid/spec/table-3.json b/assets/toml-test/tests/valid/spec/table-3.json
new file mode 100644 (file)
index 0000000..0e40e3f
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "a": {
+    "b": {
+      "c": {}
+    }
+  },
+  "d": {
+    "e": {
+      "f": {}
+    }
+  },
+  "g": {
+    "h": {
+      "i": {}
+    }
+  },
+  "j": {
+    "ʞ": {
+      "l": {}
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-3.toml b/assets/toml-test/tests/valid/spec/table-3.toml
new file mode 100644 (file)
index 0000000..0b10db3
--- /dev/null
@@ -0,0 +1,4 @@
+[a.b.c]            # this is best practice
+[ d.e.f ]          # same as [d.e.f]
+[ g .  h  . i ]    # same as [g.h.i]
+[ j . "ʞ" . 'l' ]  # same as [j."ʞ".'l']
diff --git a/assets/toml-test/tests/valid/spec/table-4.json b/assets/toml-test/tests/valid/spec/table-4.json
new file mode 100644 (file)
index 0000000..3c390c6
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "x": {
+    "y": {
+      "z": {
+        "w": {}
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-4.toml b/assets/toml-test/tests/valid/spec/table-4.toml
new file mode 100644 (file)
index 0000000..256e6c0
--- /dev/null
@@ -0,0 +1,6 @@
+# [x] you
+# [x.y] don't
+# [x.y.z] need these
+[x.y.z.w] # for this to work
+
+[x] # defining a super-table afterward is ok
diff --git a/assets/toml-test/tests/valid/spec/table-5.json b/assets/toml-test/tests/valid/spec/table-5.json
new file mode 100644 (file)
index 0000000..2ec8407
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "animal": {},
+  "fruit": {
+    "apple": {},
+    "orange": {}
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-5.toml b/assets/toml-test/tests/valid/spec/table-5.toml
new file mode 100644 (file)
index 0000000..03fe3a3
--- /dev/null
@@ -0,0 +1,4 @@
+# VALID BUT DISCOURAGED
+[fruit.apple]
+[animal]
+[fruit.orange]
diff --git a/assets/toml-test/tests/valid/spec/table-6.json b/assets/toml-test/tests/valid/spec/table-6.json
new file mode 100644 (file)
index 0000000..2ec8407
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "animal": {},
+  "fruit": {
+    "apple": {},
+    "orange": {}
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-6.toml b/assets/toml-test/tests/valid/spec/table-6.toml
new file mode 100644 (file)
index 0000000..ef330e4
--- /dev/null
@@ -0,0 +1,4 @@
+# RECOMMENDED
+[fruit.apple]
+[fruit.orange]
+[animal]
diff --git a/assets/toml-test/tests/valid/spec/table-7.json b/assets/toml-test/tests/valid/spec/table-7.json
new file mode 100644 (file)
index 0000000..3bdfe95
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "breed": {
+    "type": "string",
+    "value": "pug"
+  },
+  "name": {
+    "type": "string",
+    "value": "Fido"
+  },
+  "owner": {
+    "member_since": {
+      "type": "date-local",
+      "value": "1999-08-04"
+    },
+    "name": {
+      "type": "string",
+      "value": "Regina Dogman"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-7.toml b/assets/toml-test/tests/valid/spec/table-7.toml
new file mode 100644 (file)
index 0000000..c57a229
--- /dev/null
@@ -0,0 +1,8 @@
+# Top-level table begins.
+name = "Fido"
+breed = "pug"
+
+# Top-level table ends.
+[owner]
+name = "Regina Dogman"
+member_since = 1999-08-04
diff --git a/assets/toml-test/tests/valid/spec/table-8.json b/assets/toml-test/tests/valid/spec/table-8.json
new file mode 100644 (file)
index 0000000..dd59a51
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "fruit": {
+    "apple": {
+      "color": {
+        "type": "string",
+        "value": "red"
+      },
+      "taste": {
+        "sweet": {
+          "type": "bool",
+          "value": "true"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-8.toml b/assets/toml-test/tests/valid/spec/table-8.toml
new file mode 100644 (file)
index 0000000..d5a2c11
--- /dev/null
@@ -0,0 +1,7 @@
+fruit.apple.color = "red"
+# Defines a table named fruit
+# Defines a table named fruit.apple
+
+fruit.apple.taste.sweet = true
+# Defines a table named fruit.apple.taste
+# fruit and fruit.apple were already created
diff --git a/assets/toml-test/tests/valid/spec/table-9.json b/assets/toml-test/tests/valid/spec/table-9.json
new file mode 100644 (file)
index 0000000..89e8d5e
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "fruit": {
+    "apple": {
+      "color": {
+        "type": "string",
+        "value": "red"
+      },
+      "taste": {
+        "sweet": {
+          "type": "bool",
+          "value": "true"
+        }
+      },
+      "texture": {
+        "smooth": {
+          "type": "bool",
+          "value": "true"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/spec/table-9.toml b/assets/toml-test/tests/valid/spec/table-9.toml
new file mode 100644 (file)
index 0000000..ae2d65b
--- /dev/null
@@ -0,0 +1,9 @@
+[fruit]
+apple.color = "red"
+apple.taste.sweet = true
+
+# [fruit.apple]  # INVALID
+# [fruit.apple.taste]  # INVALID
+
+[fruit.apple.texture]  # you can add sub-tables
+smooth = true
diff --git a/assets/toml-test/tests/valid/string/double-quote-escape.json b/assets/toml-test/tests/valid/string/double-quote-escape.json
new file mode 100644 (file)
index 0000000..0c4ac37
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "test": {
+    "type": "string",
+    "value": "\"one\""
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/double-quote-escape.toml b/assets/toml-test/tests/valid/string/double-quote-escape.toml
new file mode 100644 (file)
index 0000000..78e7e72
--- /dev/null
@@ -0,0 +1 @@
+test = "\"one\""
diff --git a/assets/toml-test/tests/valid/string/empty.json b/assets/toml-test/tests/valid/string/empty.json
new file mode 100644 (file)
index 0000000..efe96c3
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "answer": {
+    "type": "string",
+    "value": ""
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/empty.toml b/assets/toml-test/tests/valid/string/empty.toml
new file mode 100644 (file)
index 0000000..e37e681
--- /dev/null
@@ -0,0 +1 @@
+answer = ""
diff --git a/assets/toml-test/tests/valid/string/escape-esc.json b/assets/toml-test/tests/valid/string/escape-esc.json
new file mode 100644 (file)
index 0000000..be39241
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "esc": {
+    "type": "string",
+    "value": "\u001b There is no escape! \u001b"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/escape-esc.toml b/assets/toml-test/tests/valid/string/escape-esc.toml
new file mode 100644 (file)
index 0000000..1e158fe
--- /dev/null
@@ -0,0 +1 @@
+esc = "\e There is no escape! \e"
diff --git a/assets/toml-test/tests/valid/string/escape-tricky.json b/assets/toml-test/tests/valid/string/escape-tricky.json
new file mode 100644 (file)
index 0000000..572e0a5
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "end_esc": {
+    "type": "string",
+    "value": "String does not end here\" but ends here\\"
+  },
+  "lit_end_esc": {
+    "type": "string",
+    "value": "String ends here\\"
+  },
+  "lit_multiline_end": {
+    "type": "string",
+    "value": "There is no escape\\"
+  },
+  "lit_multiline_not_unicode": {
+    "type": "string",
+    "value": "\\u007f"
+  },
+  "multiline_end_esc": {
+    "type": "string",
+    "value": "When will it end? \"\"\"...\"\"\" should be here\""
+  },
+  "multiline_not_unicode": {
+    "type": "string",
+    "value": "\\u0041"
+  },
+  "multiline_unicode": {
+    "type": "string",
+    "value": " "
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/escape-tricky.toml b/assets/toml-test/tests/valid/string/escape-tricky.toml
new file mode 100644 (file)
index 0000000..dc204cb
--- /dev/null
@@ -0,0 +1,15 @@
+end_esc = "String does not end here\" but ends here\\"
+lit_end_esc = 'String ends here\'
+
+multiline_unicode = """
+\u00a0"""
+
+multiline_not_unicode = """
+\\u0041"""
+
+multiline_end_esc = """When will it end? \"""...""\" should be here\""""
+
+lit_multiline_not_unicode = '''
+\u007f'''
+
+lit_multiline_end = '''There is no escape\'''
diff --git a/assets/toml-test/tests/valid/string/escaped-escape.json b/assets/toml-test/tests/valid/string/escaped-escape.json
new file mode 100644 (file)
index 0000000..112c0c9
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "answer": {
+    "type": "string",
+    "value": "\\x64"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/escaped-escape.toml b/assets/toml-test/tests/valid/string/escaped-escape.toml
new file mode 100644 (file)
index 0000000..d575876
--- /dev/null
@@ -0,0 +1 @@
+answer = "\\x64"
diff --git a/assets/toml-test/tests/valid/string/escapes.json b/assets/toml-test/tests/valid/string/escapes.json
new file mode 100644 (file)
index 0000000..d849574
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "backslash": {
+    "type": "string",
+    "value": "This string has a \\ backslash character."
+  },
+  "backspace": {
+    "type": "string",
+    "value": "This string has a \u0008 backspace character."
+  },
+  "carriage": {
+    "type": "string",
+    "value": "This string has a \r carriage return character."
+  },
+  "delete": {
+    "type": "string",
+    "value": "This string has a \7f delete control code."
+  },
+  "formfeed": {
+    "type": "string",
+    "value": "This string has a \u000c form feed character."
+  },
+  "newline": {
+    "type": "string",
+    "value": "This string has a \n new line character."
+  },
+  "notunicode1": {
+    "type": "string",
+    "value": "This string does not have a unicode \\u escape."
+  },
+  "notunicode2": {
+    "type": "string",
+    "value": "This string does not have a unicode \\u escape."
+  },
+  "notunicode3": {
+    "type": "string",
+    "value": "This string does not have a unicode \\u0075 escape."
+  },
+  "notunicode4": {
+    "type": "string",
+    "value": "This string does not have a unicode \\u escape."
+  },
+  "quote": {
+    "type": "string",
+    "value": "This string has a \" quote character."
+  },
+  "tab": {
+    "type": "string",
+    "value": "This string has a \t tab character."
+  },
+  "unitseparator": {
+    "type": "string",
+    "value": "This string has a \u001f unit separator control code."
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/escapes.toml b/assets/toml-test/tests/valid/string/escapes.toml
new file mode 100644 (file)
index 0000000..78f7ebd
--- /dev/null
@@ -0,0 +1,13 @@
+backspace = "This string has a \b backspace character."
+tab = "This string has a \t tab character."
+newline = "This string has a \n new line character."
+formfeed = "This string has a \f form feed character."
+carriage = "This string has a \r carriage return character."
+quote = "This string has a \" quote character."
+backslash = "This string has a \\ backslash character."
+notunicode1 = "This string does not have a unicode \\u escape."
+notunicode2 = "This string does not have a unicode \u005Cu escape."
+notunicode3 = "This string does not have a unicode \\u0075 escape."
+notunicode4 = "This string does not have a unicode \\\u0075 escape."
+delete = "This string has a \u007F delete control code."
+unitseparator = "This string has a \u001F unit separator control code."
diff --git a/assets/toml-test/tests/valid/string/hex-escape.json b/assets/toml-test/tests/valid/string/hex-escape.json
new file mode 100644 (file)
index 0000000..0eae986
--- /dev/null
@@ -0,0 +1,34 @@
+{
+  "bs": {
+    "type": "string",
+    "value": "\7f"
+  },
+  "hello": {
+    "type": "string",
+    "value": "hello\n"
+  },
+  "higher-than-127": {
+    "type": "string",
+    "value": "Sørmirbæren"
+  },
+  "literal": {
+    "type": "string",
+    "value": "\\x20 \\x09 \\x0d\\x0a"
+  },
+  "multiline": {
+    "type": "string",
+    "value": "  \t \u001b \r\n\n\7f\n\u0000\nhello\n\nSørmirbæren\n"
+  },
+  "multiline-literal": {
+    "type": "string",
+    "value": "\\x20 \\x09 \\x0d\\x0a\n"
+  },
+  "nul": {
+    "type": "string",
+    "value": "\u0000"
+  },
+  "whitespace": {
+    "type": "string",
+    "value": "  \t \u001b \r\n"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/hex-escape.toml b/assets/toml-test/tests/valid/string/hex-escape.toml
new file mode 100644 (file)
index 0000000..26d1668
--- /dev/null
@@ -0,0 +1,21 @@
+# \x for the first 255 codepoints
+
+whitespace      = "\x20 \x09 \x1b \x0d\x0a"
+bs              = "\x7f"
+nul             = "\x00"
+hello           = "\x68\x65\x6c\x6c\x6f\x0a"
+higher-than-127 = "S\xf8rmirb\xe6ren"
+
+multiline = """
+\x20 \x09 \x1b \x0d\x0a
+\x7f
+\x00
+\x68\x65\x6c\x6c\x6f\x0a
+\x53\xF8\x72\x6D\x69\x72\x62\xE6\x72\x65\x6E
+"""
+
+# Not inside literals.
+literal = '\x20 \x09 \x0d\x0a'
+multiline-literal = '''
+\x20 \x09 \x0d\x0a
+'''
diff --git a/assets/toml-test/tests/valid/string/multiline-escaped-crlf.json b/assets/toml-test/tests/valid/string/multiline-escaped-crlf.json
new file mode 100644 (file)
index 0000000..aa5e3ee
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "0": {
+    "type": "string",
+    "value": ""
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/multiline-escaped-crlf.toml b/assets/toml-test/tests/valid/string/multiline-escaped-crlf.toml
new file mode 100644 (file)
index 0000000..97d697d
--- /dev/null
@@ -0,0 +1,4 @@
+# The following line should be an unescaped backslash followed by a Windows\r
+# newline sequence ("\r\n")\r
+0="""\\r
+"""\r
diff --git a/assets/toml-test/tests/valid/string/multiline-quotes.json b/assets/toml-test/tests/valid/string/multiline-quotes.json
new file mode 100644 (file)
index 0000000..af9c4c8
--- /dev/null
@@ -0,0 +1,46 @@
+{
+  "escaped": {
+    "type": "string",
+    "value": "lol\"\"\""
+  },
+  "lit_one": {
+    "type": "string",
+    "value": "'one quote'"
+  },
+  "lit_one_space": {
+    "type": "string",
+    "value": " 'one quote' "
+  },
+  "lit_two": {
+    "type": "string",
+    "value": "''two quotes''"
+  },
+  "lit_two_space": {
+    "type": "string",
+    "value": " ''two quotes'' "
+  },
+  "mismatch1": {
+    "type": "string",
+    "value": "aaa'''bbb"
+  },
+  "mismatch2": {
+    "type": "string",
+    "value": "aaa\"\"\"bbb"
+  },
+  "one": {
+    "type": "string",
+    "value": "\"one quote\""
+  },
+  "one_space": {
+    "type": "string",
+    "value": " \"one quote\" "
+  },
+  "two": {
+    "type": "string",
+    "value": "\"\"two quotes\"\""
+  },
+  "two_space": {
+    "type": "string",
+    "value": " \"\"two quotes\"\" "
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/multiline-quotes.toml b/assets/toml-test/tests/valid/string/multiline-quotes.toml
new file mode 100644 (file)
index 0000000..085e127
--- /dev/null
@@ -0,0 +1,19 @@
+# Make sure that quotes inside multiline strings are allowed, including right
+# after the opening '''/""" and before the closing '''/"""
+
+lit_one = ''''one quote''''
+lit_two = '''''two quotes'''''
+lit_one_space = ''' 'one quote' '''
+lit_two_space = ''' ''two quotes'' '''
+
+one = """"one quote""""
+two = """""two quotes"""""
+one_space = """ "one quote" """
+two_space = """ ""two quotes"" """
+
+mismatch1 = """aaa'''bbb"""
+mismatch2 = '''aaa"""bbb'''
+
+# Three opening """, then one escaped ", then two "" (allowed), and then three
+# closing """
+escaped = """lol\""""""
diff --git a/assets/toml-test/tests/valid/string/multiline.json b/assets/toml-test/tests/valid/string/multiline.json
new file mode 100644 (file)
index 0000000..66e572b
--- /dev/null
@@ -0,0 +1,54 @@
+{
+  "equivalent_one": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  },
+  "equivalent_three": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  },
+  "equivalent_two": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  },
+  "escape-bs-1": {
+    "type": "string",
+    "value": "a \\\nb"
+  },
+  "escape-bs-2": {
+    "type": "string",
+    "value": "a \\b"
+  },
+  "escape-bs-3": {
+    "type": "string",
+    "value": "a \\\\\n  b"
+  },
+  "keep-ws-before": {
+    "type": "string",
+    "value": "a   \tb"
+  },
+  "multiline_empty_four": {
+    "type": "string",
+    "value": ""
+  },
+  "multiline_empty_one": {
+    "type": "string",
+    "value": ""
+  },
+  "multiline_empty_three": {
+    "type": "string",
+    "value": ""
+  },
+  "multiline_empty_two": {
+    "type": "string",
+    "value": ""
+  },
+  "no-space": {
+    "type": "string",
+    "value": "ab"
+  },
+  "whitespace-after-bs": {
+    "type": "string",
+    "value": "The quick brown fox jumps over the lazy dog."
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/multiline.toml b/assets/toml-test/tests/valid/string/multiline.toml
new file mode 100644 (file)
index 0000000..f3b3c2e
--- /dev/null
@@ -0,0 +1,52 @@
+# NOTE: this file includes some literal tab characters.
+
+multiline_empty_one = """"""
+
+# A newline immediately following the opening delimiter will be trimmed.
+multiline_empty_two = """
+"""
+
+# \ at the end of line trims newlines as well; note that last \ is followed by
+# two spaces, which are ignored.
+multiline_empty_three = """\
+    """
+multiline_empty_four = """\
+   \
+   \  
+   """
+
+equivalent_one = "The quick brown fox jumps over the lazy dog."
+equivalent_two = """
+The quick brown \
+
+
+  fox jumps over \
+    the lazy dog."""
+
+equivalent_three = """\
+       The quick brown \
+       fox jumps over \
+       the lazy dog.\
+       """
+
+whitespace-after-bs = """\
+       The quick brown \
+       fox jumps over \   
+       the lazy dog.\  
+       """
+
+no-space = """a\
+    b"""
+
+# Has tab character.
+keep-ws-before = """a          \
+   b"""
+
+escape-bs-1 = """a \\
+b"""
+
+escape-bs-2 = """a \\\
+b"""
+
+escape-bs-3 = """a \\\\
+  b"""
diff --git a/assets/toml-test/tests/valid/string/nl.json b/assets/toml-test/tests/valid/string/nl.json
new file mode 100644 (file)
index 0000000..8eae09a
--- /dev/null
@@ -0,0 +1,22 @@
+{
+  "lit_nl_end": {
+    "type": "string",
+    "value": "value\\n"
+  },
+  "lit_nl_mid": {
+    "type": "string",
+    "value": "val\\nue"
+  },
+  "lit_nl_uni": {
+    "type": "string",
+    "value": "val\\ue"
+  },
+  "nl_end": {
+    "type": "string",
+    "value": "value\n"
+  },
+  "nl_mid": {
+    "type": "string",
+    "value": "val\nue"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/nl.toml b/assets/toml-test/tests/valid/string/nl.toml
new file mode 100644 (file)
index 0000000..1e09a8b
--- /dev/null
@@ -0,0 +1,6 @@
+nl_mid = "val\nue"
+nl_end = """value\n"""
+
+lit_nl_end = '''value\n'''
+lit_nl_mid = 'val\nue'
+lit_nl_uni = 'val\ue'
diff --git a/assets/toml-test/tests/valid/string/raw-multiline.json b/assets/toml-test/tests/valid/string/raw-multiline.json
new file mode 100644 (file)
index 0000000..4159eb0
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "firstnl": {
+    "type": "string",
+    "value": "This string has a ' quote character."
+  },
+  "multiline": {
+    "type": "string",
+    "value": "This string\nhas ' a quote character\nand more than\none newline\nin it."
+  },
+  "oneline": {
+    "type": "string",
+    "value": "This string has a ' quote character."
+  },
+  "multiline_with_tab": {
+    "type": "string",
+    "value": "First line\n\t Followed by a tab"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/raw-multiline.toml b/assets/toml-test/tests/valid/string/raw-multiline.toml
new file mode 100644 (file)
index 0000000..fff00d9
--- /dev/null
@@ -0,0 +1,18 @@
+# Single ' should be allowed.
+oneline = '''This string has a ' quote character.'''
+
+# A newline immediately following the opening delimiter will be trimmed.
+firstnl = '''
+This string has a ' quote character.'''
+
+# All other whitespace and newline characters remain intact.
+multiline = '''
+This string
+has ' a quote character
+and more than
+one newline
+in it.'''
+
+# Tab character in literal string does not need to be escaped
+multiline_with_tab = '''First line
+        Followed by a tab'''
diff --git a/assets/toml-test/tests/valid/string/raw.json b/assets/toml-test/tests/valid/string/raw.json
new file mode 100644 (file)
index 0000000..3e1cfd1
--- /dev/null
@@ -0,0 +1,34 @@
+{
+  "backslash": {
+    "type": "string",
+    "value": "This string has a \\\\ backslash character."
+  },
+  "backspace": {
+    "type": "string",
+    "value": "This string has a \\b backspace character."
+  },
+  "carriage": {
+    "type": "string",
+    "value": "This string has a \\r carriage return character."
+  },
+  "formfeed": {
+    "type": "string",
+    "value": "This string has a \\f form feed character."
+  },
+  "newline": {
+    "type": "string",
+    "value": "This string has a \\n new line character."
+  },
+  "slash": {
+    "type": "string",
+    "value": "This string has a \\/ slash character."
+  },
+  "tab": {
+    "type": "string",
+    "value": "This string has a \\t tab character."
+  },
+  "unescaped_tab": {
+    "type": "string",
+    "value": "This string has an \t unescaped tab character."
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/raw.toml b/assets/toml-test/tests/valid/string/raw.toml
new file mode 100644 (file)
index 0000000..993307f
--- /dev/null
@@ -0,0 +1,8 @@
+backspace = 'This string has a \b backspace character.'
+tab = 'This string has a \t tab character.'
+unescaped_tab = 'This string has an     unescaped tab character.'
+newline = 'This string has a \n new line character.'
+formfeed = 'This string has a \f form feed character.'
+carriage = 'This string has a \r carriage return character.'
+slash = 'This string has a \/ slash character.'
+backslash = 'This string has a \\ backslash character.'
diff --git a/assets/toml-test/tests/valid/string/simple.json b/assets/toml-test/tests/valid/string/simple.json
new file mode 100644 (file)
index 0000000..2561cda
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "answer": {
+    "type": "string",
+    "value": "You are not drinking enough whisky."
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/simple.toml b/assets/toml-test/tests/valid/string/simple.toml
new file mode 100644 (file)
index 0000000..e17ade6
--- /dev/null
@@ -0,0 +1 @@
+answer = "You are not drinking enough whisky."
diff --git a/assets/toml-test/tests/valid/string/unicode-escape.json b/assets/toml-test/tests/valid/string/unicode-escape.json
new file mode 100644 (file)
index 0000000..9ae728b
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "answer4": {
+    "type": "string",
+    "value": "δ"
+  },
+  "answer8": {
+    "type": "string",
+    "value": "δ"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/unicode-escape.toml b/assets/toml-test/tests/valid/string/unicode-escape.toml
new file mode 100644 (file)
index 0000000..82faecb
--- /dev/null
@@ -0,0 +1,2 @@
+answer4 = "\u03B4"
+answer8 = "\U000003B4"
diff --git a/assets/toml-test/tests/valid/string/unicode-literal.json b/assets/toml-test/tests/valid/string/unicode-literal.json
new file mode 100644 (file)
index 0000000..7f15df4
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "answer": {
+    "type": "string",
+    "value": "δ"
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/unicode-literal.toml b/assets/toml-test/tests/valid/string/unicode-literal.toml
new file mode 100644 (file)
index 0000000..c65723c
--- /dev/null
@@ -0,0 +1 @@
+answer = "δ"
diff --git a/assets/toml-test/tests/valid/string/with-pound.json b/assets/toml-test/tests/valid/string/with-pound.json
new file mode 100644 (file)
index 0000000..2cb8beb
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "pound": {
+    "type": "string",
+    "value": "We see no # comments here."
+  },
+  "poundcomment": {
+    "type": "string",
+    "value": "But there are # some comments here."
+  }
+}
diff --git a/assets/toml-test/tests/valid/string/with-pound.toml b/assets/toml-test/tests/valid/string/with-pound.toml
new file mode 100644 (file)
index 0000000..5fd8746
--- /dev/null
@@ -0,0 +1,2 @@
+pound = "We see no # comments here."
+poundcomment = "But there are # some comments here." # Did I # mess you up?
diff --git a/assets/toml-test/tests/valid/table/array-implicit.json b/assets/toml-test/tests/valid/table/array-implicit.json
new file mode 100644 (file)
index 0000000..ee164c5
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "albums": {
+    "songs": [
+      {
+        "name": {
+          "type": "string",
+          "value": "Glory Days"
+        }
+      }
+    ]
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/array-implicit.toml b/assets/toml-test/tests/valid/table/array-implicit.toml
new file mode 100644 (file)
index 0000000..3157ac9
--- /dev/null
@@ -0,0 +1,2 @@
+[[albums.songs]]
+name = "Glory Days"
diff --git a/assets/toml-test/tests/valid/table/array-many.json b/assets/toml-test/tests/valid/table/array-many.json
new file mode 100644 (file)
index 0000000..fe78bf6
--- /dev/null
@@ -0,0 +1,34 @@
+{
+  "people": [
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Bruce"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Springsteen"
+      }
+    },
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Eric"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Clapton"
+      }
+    },
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Bob"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Seger"
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/table/array-many.toml b/assets/toml-test/tests/valid/table/array-many.toml
new file mode 100644 (file)
index 0000000..46062be
--- /dev/null
@@ -0,0 +1,11 @@
+[[people]]
+first_name = "Bruce"
+last_name = "Springsteen"
+
+[[people]]
+first_name = "Eric"
+last_name = "Clapton"
+
+[[people]]
+first_name = "Bob"
+last_name = "Seger"
diff --git a/assets/toml-test/tests/valid/table/array-nest.json b/assets/toml-test/tests/valid/table/array-nest.json
new file mode 100644 (file)
index 0000000..97f55c8
--- /dev/null
@@ -0,0 +1,44 @@
+{
+  "albums": [
+    {
+      "name": {
+        "type": "string",
+        "value": "Born to Run"
+      },
+      "songs": [
+        {
+          "name": {
+            "type": "string",
+            "value": "Jungleland"
+          }
+        },
+        {
+          "name": {
+            "type": "string",
+            "value": "Meeting Across the River"
+          }
+        }
+      ]
+    },
+    {
+      "name": {
+        "type": "string",
+        "value": "Born in the USA"
+      },
+      "songs": [
+        {
+          "name": {
+            "type": "string",
+            "value": "Glory Days"
+          }
+        },
+        {
+          "name": {
+            "type": "string",
+            "value": "Dancing in the Dark"
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/table/array-nest.toml b/assets/toml-test/tests/valid/table/array-nest.toml
new file mode 100644 (file)
index 0000000..d659a3d
--- /dev/null
@@ -0,0 +1,17 @@
+[[albums]]
+name = "Born to Run"
+
+  [[albums.songs]]
+  name = "Jungleland"
+
+  [[albums.songs]]
+  name = "Meeting Across the River"
+
+[[albums]]
+name = "Born in the USA"
+  
+  [[albums.songs]]
+  name = "Glory Days"
+
+  [[albums.songs]]
+  name = "Dancing in the Dark"
diff --git a/assets/toml-test/tests/valid/table/array-one.json b/assets/toml-test/tests/valid/table/array-one.json
new file mode 100644 (file)
index 0000000..5cd67de
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "people": [
+    {
+      "first_name": {
+        "type": "string",
+        "value": "Bruce"
+      },
+      "last_name": {
+        "type": "string",
+        "value": "Springsteen"
+      }
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/table/array-one.toml b/assets/toml-test/tests/valid/table/array-one.toml
new file mode 100644 (file)
index 0000000..cd7e1b6
--- /dev/null
@@ -0,0 +1,3 @@
+[[people]]
+first_name = "Bruce"
+last_name = "Springsteen"
diff --git a/assets/toml-test/tests/valid/table/array-table-array.json b/assets/toml-test/tests/valid/table/array-table-array.json
new file mode 100644 (file)
index 0000000..5c3d649
--- /dev/null
@@ -0,0 +1,24 @@
+{
+  "a": [
+    {
+      "b": [
+        {
+          "c": {
+            "d": {
+              "type": "string",
+              "value": "val0"
+            }
+          }
+        },
+        {
+          "c": {
+            "d": {
+              "type": "string",
+              "value": "val1"
+            }
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/assets/toml-test/tests/valid/table/array-table-array.toml b/assets/toml-test/tests/valid/table/array-table-array.toml
new file mode 100644 (file)
index 0000000..a07b0c7
--- /dev/null
@@ -0,0 +1,7 @@
+[[a]]
+    [[a.b]]
+        [a.b.c]
+            d = "val0"
+    [[a.b]]
+        [a.b.c]
+            d = "val1"
diff --git a/assets/toml-test/tests/valid/table/empty.json b/assets/toml-test/tests/valid/table/empty.json
new file mode 100644 (file)
index 0000000..3e82cda
--- /dev/null
@@ -0,0 +1,3 @@
+{
+  "a": {}
+}
diff --git a/assets/toml-test/tests/valid/table/empty.toml b/assets/toml-test/tests/valid/table/empty.toml
new file mode 100644 (file)
index 0000000..8bb6a0a
--- /dev/null
@@ -0,0 +1 @@
+[a]
diff --git a/assets/toml-test/tests/valid/table/keyword.json b/assets/toml-test/tests/valid/table/keyword.json
new file mode 100644 (file)
index 0000000..a15dfae
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "true": {},
+  "false": {},
+  "inf": {},
+  "nan": {}
+}
diff --git a/assets/toml-test/tests/valid/table/keyword.toml b/assets/toml-test/tests/valid/table/keyword.toml
new file mode 100644 (file)
index 0000000..bc3d52a
--- /dev/null
@@ -0,0 +1,9 @@
+[true]
+
+[false]
+
+[inf]
+
+[nan]
+
+
diff --git a/assets/toml-test/tests/valid/table/names.json b/assets/toml-test/tests/valid/table/names.json
new file mode 100644 (file)
index 0000000..66d8ea5
--- /dev/null
@@ -0,0 +1,30 @@
+{
+  "a": {
+    " x ": {},
+    "b": {
+      "c": {}
+    },
+    "b.c": {},
+    "d.e": {}
+  },
+  "d": {
+    "e": {
+      "f": {}
+    }
+  },
+  "g": {
+    "h": {
+      "i": {}
+    }
+  },
+  "j": {
+    "ʞ": {
+      "l": {}
+    }
+  },
+  "x": {
+    "1": {
+      "2": {}
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/names.toml b/assets/toml-test/tests/valid/table/names.toml
new file mode 100644 (file)
index 0000000..092da2f
--- /dev/null
@@ -0,0 +1,9 @@
+[a.b.c]
+[a."b.c"]
+[a.'d.e']
+[a.' x ']
+[ d.e.f ]
+[ g . h . i ]
+[ j . "ʞ" . 'l' ]
+
+[x.1.2]
diff --git a/assets/toml-test/tests/valid/table/no-eol.json b/assets/toml-test/tests/valid/table/no-eol.json
new file mode 100644 (file)
index 0000000..b6e7fb5
--- /dev/null
@@ -0,0 +1,3 @@
+{
+  "table": {}
+}
diff --git a/assets/toml-test/tests/valid/table/no-eol.toml b/assets/toml-test/tests/valid/table/no-eol.toml
new file mode 100644 (file)
index 0000000..f1098fd
--- /dev/null
@@ -0,0 +1 @@
+[table]
diff --git a/assets/toml-test/tests/valid/table/sub-empty.json b/assets/toml-test/tests/valid/table/sub-empty.json
new file mode 100644 (file)
index 0000000..ed10cd2
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "a": {
+    "b": {}
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/sub-empty.toml b/assets/toml-test/tests/valid/table/sub-empty.toml
new file mode 100644 (file)
index 0000000..70b7fe1
--- /dev/null
@@ -0,0 +1,2 @@
+[a]
+[a.b]
diff --git a/assets/toml-test/tests/valid/table/sub.json b/assets/toml-test/tests/valid/table/sub.json
new file mode 100644 (file)
index 0000000..cb81a3f
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "a": {
+    "extend": {
+      "key": {
+        "type": "integer",
+        "value": "2"
+      },
+      "more": {
+        "key": {
+          "type": "integer",
+          "value": "3"
+        }
+      }
+    },
+    "key": {
+      "type": "integer",
+      "value": "1"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/sub.toml b/assets/toml-test/tests/valid/table/sub.toml
new file mode 100644 (file)
index 0000000..e8299c2
--- /dev/null
@@ -0,0 +1,9 @@
+[a]
+key = 1
+
+# a.extend is a key inside the "a" table.
+[a.extend]
+key = 2
+
+[a.extend.more]
+key = 3
diff --git a/assets/toml-test/tests/valid/table/whitespace.json b/assets/toml-test/tests/valid/table/whitespace.json
new file mode 100644 (file)
index 0000000..c770470
--- /dev/null
@@ -0,0 +1,3 @@
+{
+  "valid key": {}
+}
diff --git a/assets/toml-test/tests/valid/table/whitespace.toml b/assets/toml-test/tests/valid/table/whitespace.toml
new file mode 100644 (file)
index 0000000..daf881d
--- /dev/null
@@ -0,0 +1 @@
+["valid key"]
diff --git a/assets/toml-test/tests/valid/table/with-literal-string.json b/assets/toml-test/tests/valid/table/with-literal-string.json
new file mode 100644 (file)
index 0000000..7784695
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "a": {
+    "\"b\"": {
+      "c": {
+        "answer": {
+          "type": "integer",
+          "value": "42"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/with-literal-string.toml b/assets/toml-test/tests/valid/table/with-literal-string.toml
new file mode 100644 (file)
index 0000000..b81643d
--- /dev/null
@@ -0,0 +1,4 @@
+['a']
+[a.'"b"']
+[a.'"b"'.c]
+answer = 42 
diff --git a/assets/toml-test/tests/valid/table/with-pound.json b/assets/toml-test/tests/valid/table/with-pound.json
new file mode 100644 (file)
index 0000000..f32d2f2
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "key#group": {
+    "answer": {
+      "type": "integer",
+      "value": "42"
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/with-pound.toml b/assets/toml-test/tests/valid/table/with-pound.toml
new file mode 100644 (file)
index 0000000..33f2c4f
--- /dev/null
@@ -0,0 +1,2 @@
+["key#group"]
+answer = 42
diff --git a/assets/toml-test/tests/valid/table/with-single-quotes.json b/assets/toml-test/tests/valid/table/with-single-quotes.json
new file mode 100644 (file)
index 0000000..347c693
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "a": {
+    "b": {
+      "c": {
+        "answer": {
+          "type": "integer",
+          "value": "42"
+        }
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/with-single-quotes.toml b/assets/toml-test/tests/valid/table/with-single-quotes.toml
new file mode 100644 (file)
index 0000000..56e52cc
--- /dev/null
@@ -0,0 +1,4 @@
+['a']
+[a.'b']
+[a.'b'.c]
+answer = 42 
diff --git a/assets/toml-test/tests/valid/table/without-super.json b/assets/toml-test/tests/valid/table/without-super.json
new file mode 100644 (file)
index 0000000..3c390c6
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "x": {
+    "y": {
+      "z": {
+        "w": {}
+      }
+    }
+  }
+}
diff --git a/assets/toml-test/tests/valid/table/without-super.toml b/assets/toml-test/tests/valid/table/without-super.toml
new file mode 100644 (file)
index 0000000..73ed68b
--- /dev/null
@@ -0,0 +1,5 @@
+# [x] you
+# [x.y] don't
+# [x.y.z] need these
+[x.y.z.w] # for this to work
+[x] # defining a super-table afterwards is ok
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644 (file)
index 0000000..52df2e9
--- /dev/null
@@ -0,0 +1,63 @@
+const TESTS_DIR: include_dir::Dir =
+    include_dir::include_dir!("$CARGO_MANIFEST_DIR/assets/toml-test/tests");
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct Valid<'a> {
+    pub name: &'a std::path::Path,
+    pub fixture: &'a [u8],
+    pub expected: &'a [u8],
+}
+
+pub fn valid() -> impl Iterator<Item = Valid<'static>> {
+    let valid_dir = TESTS_DIR.get_dir("valid").unwrap();
+    valid_files(valid_dir).chain(valid_dir.dirs().flat_map(|d| {
+        assert_eq!(d.dirs().count(), 0);
+        valid_files(d)
+    }))
+}
+
+fn valid_files<'d>(
+    dir: &'d include_dir::Dir<'static>,
+) -> impl Iterator<Item = Valid<'static>> + 'd {
+    dir.files()
+        .filter(|f| f.path().extension().unwrap_or_default() == "toml")
+        .map(move |f| {
+            let t = f;
+            let j = dir
+                .files()
+                .find(|f| {
+                    f.path().parent() == t.path().parent()
+                        && f.path().file_stem() == t.path().file_stem()
+                        && f.path().extension().unwrap() == "json"
+                })
+                .unwrap();
+            let name = t.path();
+            let fixture = t.contents();
+            let expected = j.contents();
+            Valid {
+                name,
+                fixture,
+                expected,
+            }
+        })
+}
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub struct Invalid<'a> {
+    pub name: &'a std::path::Path,
+    pub fixture: &'a [u8],
+}
+
+pub fn invalid() -> impl Iterator<Item = Invalid<'static>> {
+    let invalid_dir = TESTS_DIR.get_dir("invalid").unwrap();
+    assert_eq!(invalid_dir.files().count(), 0);
+    invalid_dir.dirs().flat_map(|d| {
+        assert_eq!(d.dirs().count(), 0);
+        d.files().map(|f| {
+            let t = f;
+            let name = f.path();
+            let fixture = t.contents();
+            Invalid { name, fixture }
+        })
+    })
+}