Add test/data/json-quirks.json
diff --git a/script/print-json-token-debug-format.c b/script/print-json-token-debug-format.c
index 7d4827f..7e5001a 100644
--- a/script/print-json-token-debug-format.c
+++ b/script/print-json-token-debug-format.c
@@ -139,6 +139,7 @@
bool all_tokens;
bool human_readable;
+ bool quirks;
} flags = {0};
const char* //
@@ -171,6 +172,10 @@
flags.human_readable = true;
continue;
}
+ if (!strcmp(arg, "q") || !strcmp(arg, "quirks")) {
+ flags.quirks = true;
+ continue;
+ }
return "main: unrecognized flag argument";
}
@@ -218,6 +223,32 @@
return wuffs_base__status__message(&init_status);
}
+ if (flags.quirks) {
+ uint32_t quirks[] = {
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_A,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_CAPITAL_U,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_E,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_QUESTION_MARK,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_SINGLE_QUOTE,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_V,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_ZERO,
+ WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK,
+ WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE,
+ WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA,
+ WUFFS_JSON__QUIRK_ALLOW_INF_NAN_NUMBERS,
+ WUFFS_JSON__QUIRK_ALLOW_LEADING_ASCII_RECORD_SEPARATOR,
+ WUFFS_JSON__QUIRK_ALLOW_LEADING_UNICODE_BYTE_ORDER_MARK,
+ WUFFS_JSON__QUIRK_ALLOW_TRAILING_NEW_LINE,
+ WUFFS_JSON__QUIRK_REPLACE_INVALID_UTF_8,
+ 0,
+ };
+ uint32_t i;
+ for (i = 0; quirks[i]; i++) {
+ wuffs_json__decoder__set_quirk_enabled(&dec, quirks[i], true);
+ }
+ }
+
uint64_t pos = 0;
while (true) {
wuffs_base__status status =
diff --git a/test/c/std/json.c b/test/c/std/json.c
index 0819511..0eb64ec 100644
--- a/test/c/std/json.c
+++ b/test/c/std/json.c
@@ -783,6 +783,11 @@
.src_filename = "test/data/nobel-prizes.json",
};
+golden_test json_json_quirks_gt = {
+ .want_filename = "test/data/json-quirks.tokens",
+ .src_filename = "test/data/json-quirks.json",
+};
+
// ---------------- JSON Tests
const char* //
@@ -811,6 +816,41 @@
&json_australian_abc_gt));
}
+ {
+ uint32_t quirks[] = {
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_A,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_CAPITAL_U,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_E,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_QUESTION_MARK,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_SINGLE_QUOTE,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_V,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_X,
+ WUFFS_JSON__QUIRK_ALLOW_BACKSLASH_ZERO,
+ WUFFS_JSON__QUIRK_ALLOW_COMMENT_BLOCK,
+ WUFFS_JSON__QUIRK_ALLOW_COMMENT_LINE,
+ WUFFS_JSON__QUIRK_ALLOW_EXTRA_COMMA,
+ WUFFS_JSON__QUIRK_ALLOW_INF_NAN_NUMBERS,
+ WUFFS_JSON__QUIRK_ALLOW_LEADING_ASCII_RECORD_SEPARATOR,
+ WUFFS_JSON__QUIRK_ALLOW_LEADING_UNICODE_BYTE_ORDER_MARK,
+ WUFFS_JSON__QUIRK_ALLOW_TRAILING_NEW_LINE,
+ WUFFS_JSON__QUIRK_REPLACE_INVALID_UTF_8,
+ 0,
+ };
+
+ wuffs_json__decoder dec;
+ CHECK_STATUS("initialize",
+ wuffs_json__decoder__initialize(
+ &dec, sizeof dec, WUFFS_VERSION,
+ WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED));
+ uint32_t i;
+ for (i = 0; quirks[i]; i++) {
+ wuffs_json__decoder__set_quirk_enabled(&dec, quirks[i], true);
+ }
+ CHECK_STRING(do_test__wuffs_base__token_decoder(
+ wuffs_json__decoder__upcast_as__wuffs_base__token_decoder(&dec),
+ &json_json_quirks_gt));
+ }
+
return NULL;
}
diff --git a/test/data/json-quirks.json b/test/data/json-quirks.json
new file mode 100644
index 0000000..5d3a877
--- /dev/null
+++ b/test/data/json-quirks.json
@@ -0,0 +1,16 @@
+[
+ 123,
+ nan,
+ +INFINITY,
+ "escaped \a\b\e\f\n\r\t\v\0\'\"\?\\\/ things",
+ {
+ "ABC\u0394E": // U+00000394 GREEK CAPITAL LETTER DELTA.
+ "mno\U0001F4A9q", /* U+0001F4A9 PILE OF POO. */
+ /* And now for some
+ * invalid Unicode. */
+ "ABC\uD800E": // Unpaired surrogate.
+ "mno\U12345678q", // Out of range.
+ },
+ "w\x58\x59z",
+ "invÿlid UTF-8",
+]
diff --git a/test/data/json-quirks.tokens b/test/data/json-quirks.tokens
new file mode 100644
index 0000000..d9a8296
--- /dev/null
+++ b/test/data/json-quirks.tokens
Binary files differ