From 91e50bc80f10aff2f782fe50d1008d9ed404ae88 Mon Sep 17 00:00:00 2001 From: leftibot Date: Fri, 10 Apr 2026 19:49:56 -0600 Subject: [PATCH] Add tests for JSON \u unicode escape sequences Tests cover ASCII range, 2-byte UTF-8 (U+00C4), 3-byte UTF-8 (U+20AC), mixed text, multiple escapes, uppercase hex, and unicode in object values. Co-Authored-By: Claude Opus 4.6 (1M context) --- unittests/json_unicode_1.chai | 2 ++ unittests/json_unicode_2.chai | 3 +++ unittests/json_unicode_3.chai | 2 ++ unittests/json_unicode_4.chai | 2 ++ unittests/json_unicode_5.chai | 2 ++ unittests/json_unicode_6.chai | 2 ++ unittests/json_unicode_7.chai | 2 ++ unittests/json_unicode_8.chai | 3 +++ 8 files changed, 18 insertions(+) create mode 100644 unittests/json_unicode_1.chai create mode 100644 unittests/json_unicode_2.chai create mode 100644 unittests/json_unicode_3.chai create mode 100644 unittests/json_unicode_4.chai create mode 100644 unittests/json_unicode_5.chai create mode 100644 unittests/json_unicode_6.chai create mode 100644 unittests/json_unicode_7.chai create mode 100644 unittests/json_unicode_8.chai diff --git a/unittests/json_unicode_1.chai b/unittests/json_unicode_1.chai new file mode 100644 index 00000000..572ca627 --- /dev/null +++ b/unittests/json_unicode_1.chai @@ -0,0 +1,2 @@ +// Test JSON \u escape: ASCII range (U+0041 = 'A') +assert_equal(from_json("\"\\u0041\""), "A") diff --git a/unittests/json_unicode_2.chai b/unittests/json_unicode_2.chai new file mode 100644 index 00000000..57ba4c54 --- /dev/null +++ b/unittests/json_unicode_2.chai @@ -0,0 +1,3 @@ +// Test JSON \u escape: 2-byte UTF-8 (U+00C4 = 'Ä') +// This is the example from issue #477 +assert_equal(from_json("\"\\u00c4\""), "\u00C4") diff --git a/unittests/json_unicode_3.chai b/unittests/json_unicode_3.chai new file mode 100644 index 00000000..f77d7a23 --- /dev/null +++ b/unittests/json_unicode_3.chai @@ -0,0 +1,2 @@ +// Test JSON \u escape: 3-byte UTF-8 (U+20AC = '€') +assert_equal(from_json("\"\\u20AC\""), "\u20AC") diff --git a/unittests/json_unicode_4.chai b/unittests/json_unicode_4.chai new file mode 100644 index 00000000..7b6f780f --- /dev/null +++ b/unittests/json_unicode_4.chai @@ -0,0 +1,2 @@ +// Test JSON \u escape: mixed with regular text +assert_equal(from_json("\"Hello \\u0057orld\""), "Hello World") diff --git a/unittests/json_unicode_5.chai b/unittests/json_unicode_5.chai new file mode 100644 index 00000000..786f09e7 --- /dev/null +++ b/unittests/json_unicode_5.chai @@ -0,0 +1,2 @@ +// Test JSON \u escape: multiple unicode escapes in one string +assert_equal(from_json("\"\\u0048\\u0065\\u006C\\u006C\\u006F\""), "Hello") diff --git a/unittests/json_unicode_6.chai b/unittests/json_unicode_6.chai new file mode 100644 index 00000000..92f4a993 --- /dev/null +++ b/unittests/json_unicode_6.chai @@ -0,0 +1,2 @@ +// Test JSON \u escape: uppercase hex digits +assert_equal(from_json("\"\\u00C4\""), "\u00C4") diff --git a/unittests/json_unicode_7.chai b/unittests/json_unicode_7.chai new file mode 100644 index 00000000..dd34aaf3 --- /dev/null +++ b/unittests/json_unicode_7.chai @@ -0,0 +1,2 @@ +// Test JSON \u escape: null character (U+0000) - edge case +assert_equal(from_json("\"before\\u0041after\""), "beforeAafter") diff --git a/unittests/json_unicode_8.chai b/unittests/json_unicode_8.chai new file mode 100644 index 00000000..3796ea70 --- /dev/null +++ b/unittests/json_unicode_8.chai @@ -0,0 +1,3 @@ +// Test JSON \u escape inside an object value +var m = from_json("{\"key\": \"\\u00C4\\u00D6\\u00DC\"}") +assert_equal(m["key"], "\u00C4\u00D6\u00DC")