mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-01 18:00:40 -08:00
Make json-serialize always return a unibyte string (bug#70007)
The JSON format is defined as a byte sequence and will always be used as such, so returning a multibyte string makes little sense. * src/json.c (json_out_to_string): Remove. (Fjson_serialize): Return unibyte string. * test/src/json-tests.el (json-serialize/roundtrip) (json-serialize/roundtrip-scalars, json-serialize/string): Update tests. * doc/lispref/text.texi (Parsing JSON): Document. * etc/NEWS: Announce.
This commit is contained in:
parent
89c99891b2
commit
e55e2e1c6b
4 changed files with 36 additions and 37 deletions
|
|
@ -36,7 +36,7 @@
|
|||
(json
|
||||
"[null,false,true,0,123,-456,3.75,\"abc\uFFFFαβγ𝔸𝐁𝖢\\\"\\\\\"]")
|
||||
(json-bytes (encode-coding-string json 'utf-8)))
|
||||
(should (equal (json-serialize lisp) json)) ; or `json-bytes'?
|
||||
(should (equal (json-serialize lisp) json-bytes))
|
||||
(with-temp-buffer
|
||||
;; multibyte buffer
|
||||
(json-insert lisp)
|
||||
|
|
@ -82,28 +82,29 @@
|
|||
"\"abc\uFFFFαβγ𝔸𝐁𝖢\\\"\\\\\"")))
|
||||
(cl-destructuring-bind (lisp json) case
|
||||
(ert-info ((format "%S ↔ %S" lisp json))
|
||||
(should (equal (json-serialize lisp) json))
|
||||
(with-temp-buffer
|
||||
(json-insert lisp)
|
||||
(should (equal (buffer-string) json))
|
||||
(should (eobp)))
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(json-insert lisp)
|
||||
(should (equal (buffer-string) (encode-coding-string json 'utf-8)))
|
||||
(should (eobp)))
|
||||
(should (equal (json-parse-string json) lisp))
|
||||
(with-temp-buffer
|
||||
(insert json)
|
||||
(goto-char 1)
|
||||
(should (equal (json-parse-buffer) lisp))
|
||||
(should (eobp)))
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(insert (encode-coding-string json 'utf-8))
|
||||
(goto-char 1)
|
||||
(should (equal (json-parse-buffer) lisp))
|
||||
(should (eobp)))))))
|
||||
(let ((json-bytes (encode-coding-string json 'utf-8)))
|
||||
(should (equal (json-serialize lisp) json-bytes))
|
||||
(with-temp-buffer
|
||||
(json-insert lisp)
|
||||
(should (equal (buffer-string) json))
|
||||
(should (eobp)))
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(json-insert lisp)
|
||||
(should (equal (buffer-string) (encode-coding-string json 'utf-8)))
|
||||
(should (eobp)))
|
||||
(should (equal (json-parse-string json) lisp))
|
||||
(with-temp-buffer
|
||||
(insert json)
|
||||
(goto-char 1)
|
||||
(should (equal (json-parse-buffer) lisp))
|
||||
(should (eobp)))
|
||||
(with-temp-buffer
|
||||
(set-buffer-multibyte nil)
|
||||
(insert (encode-coding-string json 'utf-8))
|
||||
(goto-char 1)
|
||||
(should (equal (json-parse-buffer) lisp))
|
||||
(should (eobp))))))))
|
||||
|
||||
(ert-deftest json-serialize/object ()
|
||||
(let ((table (make-hash-table :test #'equal)))
|
||||
|
|
@ -226,7 +227,8 @@
|
|||
(should (equal (json-serialize ["foo"]) "[\"foo\"]"))
|
||||
(should (equal (json-serialize ["a\n\fb"]) "[\"a\\n\\fb\"]"))
|
||||
(should (equal (json-serialize ["\nasdфыв\u001f\u007ffgh\t"])
|
||||
"[\"\\nasdфыв\\u001F\u007ffgh\\t\"]"))
|
||||
(encode-coding-string "[\"\\nasdфыв\\u001F\u007ffgh\\t\"]"
|
||||
'utf-8)))
|
||||
(should (equal (json-serialize ["a\0b"]) "[\"a\\u0000b\"]"))
|
||||
(should-error (json-serialize ["\xC3\x84"]))
|
||||
(should-error (json-serialize ["\u00C4\xC3\x84"])))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue