1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-20 11:33:09 -08:00
emacs/test/lisp
Basil L. Contovounesios 3f082af536 Various json.el improvements
* etc/NEWS: Announce that json-read-number is now stricter.

* json.el: Bump package version.
(json-encoding-lisp-style-closings, json-pre-element-read-function)
(json-post-element-read-function, json-advance, json-peek)
(json--path): Clarify and improve style of doc strings.
(json-join): Define as an obsolete alias of string-join.
(json-alist-p, json-plist-p): Refactor for speed and declare as
pure, side-effect-free, and error-free.
(json--plist-reverse): Rename function...
(json--plist-nreverse): ...to this, making it destructive for speed.
All callers changed.
(json--plist-to-alist): Remove, replacing single use with map-pairs.
(json--with-indentation): Accept multiple forms as arguments, fix
their indentation, and allow them to be instrumented for debugging.
Add docstring.
(json-pop, json-read-keyword, json-add-to-object)
(json-encode-array): Simplify for speed.
(json-skip-whitespace): Put newline before carriage return for
likely frequency of occurrence, and so that the characters appear in
increasing order.
(json--check-position): Use 1+.
(json-path-to-position): Open code apply-partially.
(json-keywords): Turn into a defconst and mark as obsolete now that
it is no longer used.
(json--post-value, json--number, json--escape): New rx definitions.
(json-encode-keyword): Declare as side-effect-free.
(json-read-number): Reject leading zeros and plus signs, and make
integer part mandatory in accordance with JSON standards and for
consistency with native JSON parsing functions.  Eagerly signal
json-number-format when garbage follows a valid number, e.g., when
reading "1.1.1", instead of leaving that up to the caller.  Remove
optional internal argument from advertised calling convention now
that the function is no longer recursive.
(json-encode-number): Define as an alias of number-to-string.
(json-special-chars): Turn into a defconst.
(json-read-escaped-char, json-new-object, json-read-file)
(json-pretty-print): Simplify.
(json-read-string): For consistency with other json.el error
reporting, remove check for leading '"', and use the integer value
rather than the printed representation of characters in error data.
At EOB signal json-end-of-file instead of json-string-format.
(json--long-string-threshold, json--string-buffer): New variables.
(json-encode-string): Reimplement in terms of buffer manipulation
for speed (bug#20154).
(json-read-object): Escape ?\} properly.
(json--encode-alist): New function extracted from json-encode-alist.
(json-encode-hash-table, json-encode-alist, json-encode-plist): Use
it to avoid destructively modifying the argument when
json-encoding-object-sort-predicate is non-nil without incurring
unnecessary copying (bug#40693).  Encode empty object as "{}" even
when pretty-printing.  Simplify for speed.
(json-read-array): Avoid recomputing list length on each iteration
when json-pre-element-read-function is non-nil.  Make first element
of json-array-format error data a string for consistency with
json-object-format and to make the displayed error message clearer.
(json-readtable-dispatch): Accept any kind of argument, not just
symbols.  Generate the table in a simpler manner so the dispatch
order is clearer.  Remove dispatch on ?+ and ?. now that
json-read-number is stricter and for consistency with native JSON
parsing functions.  Signal json-end-of-file if argument is nil.
(json-read): Simplify accordingly.
(json-encode): Avoid allocating a list on each invocation.

* lisp/jsonrpc.el (jsonrpc--json-read, jsonrpc--json-encode): Check
whether native JSON functions are fboundp only once, at load time.

* lisp/progmodes/python.el (python--parse-json-array): New function.
(python-shell-prompt-detect): Use it to parse JSON directly as a
list rather than converting from a vector.

* test/lisp/json-tests.el (json-tests--with-temp-buffer): Allow
instrumenting for debugging.
(test-json-join, test-json-plist-to-alist): Remove tests.

(test-json-alist-p, test-json-plist-p, test-json-advance)
(test-json-peek, test-json-pop, test-json-skip-whitespace)
(test-json-read-keyword, test-json-encode-keyword)
(test-json-encode-number, test-json-read-escaped-char)
(test-json-read-string, test-json-encode-string)
(test-json-encode-key, test-json-new-object)
(test-json-encode-hash-table, test-json-encode-plist)
(test-json-encode-list, test-json-read-array)
(test-json-encode-array, test-json-read)
(test-json-read-from-string, test-json-encode): Extend tests.

(test-json-plist-reverse): Rename test...
(test-json-plist-nreverse): ...to this and avoid modifying literal
lists.
(test-json-read-number): Rename test...
(test-json-read-integer): ...to this, focusing on integers.
(test-json-add-to-object): Rename test...
(test-json-add-to-alist): ...to this, focusing on alists.
(json-encode-simple-alist): Rename test...
(test-json-encode-alist): ...to this, extending it.
(test-json-encode-alist-with-sort-predicate): Rename test...
(test-json-encode-alist-sort): ...to this, extending it.
(test-json-encode-plist-with-sort-predicate): Rename test...
(test-json-encode-plist-sort): ...to this, extending it.

(test-json-read-keyword-invalid, test-json-read-fraction)
(test-json-read-exponent, test-json-read-fraction-exponent)
(test-json-read-number-invalid)
(test-json-read-escaped-char-invalid, test-json-add-to-plist)
(test-json-add-to-hash-table, test-json-read-object-empty)
(test-json-read-object-invalid, test-json-read-object-function)
(test-json-encode-hash-table-pretty)
(test-json-encode-hash-table-lisp-style)
(test-json-encode-hash-table-sort, test-json-encode-alist-pretty)
(test-json-encode-alist-lisp-style, test-json-encode-plist-pretty)
(test-json-encode-plist-lisp-style, test-json-read-array-function)
(test-json-encode-array-pretty, test-json-encode-array-lisp-style)
(test-json-read-invalid): New tests.

(test-json-path-to-position-no-match): Use should-not.
(test-json-read-object): Move error check to new test
test-json-read-object-invalid.
(test-json-pretty-print-object): Adapt test now that empty objects
are pretty-printed as "{}".
2020-05-22 15:16:13 +01:00
..
bookmark-resources Add tests for bookmark.el (Bug#36452) 2019-07-03 14:49:38 +03:00
calc Calc: GCD(0,x)=GCD(x,0)=|x|, not x (bug#41279) 2020-05-15 20:15:36 +02:00
calendar Use lexical-binding in cal-julian.el and add tests 2020-05-13 01:34:22 +02:00
cedet Use lexical-binding in most semantic tests 2020-04-28 16:11:47 +02:00
custom-resources Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
emacs-lisp Allow back-references in syntax-propertize-rules. 2020-05-19 20:50:14 +02:00
emulation Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
erc Don’t attempt to modify constant strings 2020-05-16 22:25:07 -07:00
eshell Use lexical-binding in most eshell tests 2020-04-29 10:28:07 +02:00
gnus Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
image Fix gravatar tests 2020-03-24 22:21:26 +01:00
international ; * test/lisp/international/mule-util-tests.el: Fix typos. 2020-04-25 00:39:46 +02:00
mail Use lexical-binding in qp.el and add tests 2020-04-30 10:36:54 +02:00
net Use lexical-binding in webjump.el and add tests 2020-05-18 17:58:01 +02:00
nxml Update copyright year to 2020 2020-01-01 00:59:52 +00:00
obsolete Update copyright year to 2020 2020-01-01 00:59:52 +00:00
org Update copyright year to 2020 2020-01-01 00:59:52 +00:00
play Use lexical-binding in animate.el and add tests 2020-05-13 02:06:03 +02:00
progmodes Use lexical-binding in autoconf.el and add tests 2020-05-15 20:42:15 +02:00
so-long-tests Update copyright year to 2020 2020-01-01 00:59:52 +00:00
term Update copyright year to 2020 2020-01-01 00:59:52 +00:00
textmodes Use lexical-binding in po.el and add tests 2020-04-25 09:12:24 +02:00
url Use lexical-binding in most url tests 2020-04-24 20:26:36 +02:00
vc Use lexical-binding in most vc tests 2020-04-28 10:36:34 +02:00
abbrev-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
apropos-tests.el Use lexical-binding in apropos.el and add tests 2020-04-18 18:43:23 +02:00
arc-mode-tests.el Combine archive-int-to-mode and tar-grind-file-mode 2020-05-14 18:43:15 +02:00
auth-source-pass-tests.el * test/lisp/auth-source-pass-tests.el: Test for multiple ports. 2020-01-22 07:37:01 +01:00
auth-source-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
autoinsert-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
autorevert-tests.el Minor cleanup in {autorevert,filenotify,shadowfile}-tests.el 2020-01-22 11:45:26 +01:00
bookmark-tests.el Add more tests for bookmark-bmenu-list 2020-01-26 04:11:38 +01:00
buff-menu-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
button-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
char-fold-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
color-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
comint-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
custom-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
dabbrev-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
delim-col-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
descr-text-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
dired-aux-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
dired-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
dired-x-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
dom-tests.el ; Fix last addition to dom-tests.el 2020-04-30 10:46:54 +01:00
electric-tests.el Add test for bug#39680 2020-05-20 00:15:11 +01:00
elide-head-tests.el Use lexical-binding in elide-head.el and add tests 2020-04-19 08:04:57 +02:00
epg-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
faces-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
ffap-tests.el Fix sxhash-equal on bytecodes, markers, etc. 2020-01-07 11:29:42 -08:00
filenotify-tests.el Skip filenotify tests on hydra.nixos.org 2020-03-07 12:17:01 -08:00
files-tests.el Combine archive-int-to-mode and tar-grind-file-mode 2020-05-14 18:43:15 +02:00
files-x-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
font-lock-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
format-spec-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
help-fns-tests.el Provide default for describe-keymap prompt 2020-02-04 02:04:20 +01:00
help-mode-tests.el Use lexical-binding in help-mode.el and add tests 2020-05-09 20:01:37 +02:00
help-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
hi-lock-tests.el Fix hi-lock test and add new test for unhighlight (bug#40337) 2020-04-14 02:33:52 +03:00
htmlfontify-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
ibuffer-tests.el Remove (or double) redundant backslashes in string literals 2020-01-24 23:04:34 +01:00
ido-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
image-file-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
image-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
imenu-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
info-xref-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
isearch-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
jit-lock-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
json-tests.el Various json.el improvements 2020-05-22 15:16:13 +01:00
jsonrpc-tests.el ; Fix some typos and doc issues (bug#40695) 2020-04-18 17:10:02 +02:00
kmacro-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
ls-lisp-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
makesum-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
man-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
md4-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
minibuffer-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
misc-tests.el Use lexical-binding in misc.el and add tests 2020-04-26 00:30:37 +02:00
mouse-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
obarray-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
paren-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
password-cache-tests.el Don’t attempt to modify constant strings 2020-05-16 22:25:07 -07:00
ps-print-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
register-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
replace-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
rot13-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
scroll-lock-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
ses-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
shadowfile-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
shell-tests.el Fix shell-tests failures 2020-01-20 15:52:27 +01:00
simple-tests.el Merge from origin/emacs-27 2020-04-29 07:50:20 -07:00
sort-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
soundex-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
startup-tests.el Fix documentation related to 'command-switch-alist'. 2020-05-14 19:29:14 +02:00
subr-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
tabify-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
tar-mode-tests.el Combine archive-int-to-mode and tar-grind-file-mode 2020-05-14 18:43:15 +02:00
tempo-tests.el Allow tempo-define-template to reassign tags to new templates 2020-02-21 11:15:00 +02:00
term-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
thingatpt-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
thread-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
time-stamp-tests.el Merge from origin/emacs-27 2020-01-01 01:08:16 +00:00
timezone-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
version-tests.el Use lexical-binding in version.el and add tests 2020-04-28 23:35:52 +02:00
wdired-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
whitespace-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
wid-edit-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
xdg-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00
xml-tests.el Use lexical-binding in most remaining tests 2020-05-01 13:05:26 +02:00
xt-mouse-tests.el Update copyright year to 2020 2020-01-01 00:59:52 +00:00