* lisp/calendar/todo-mode.el (todo-insert-item--basic): Ensure the
target todo file is in todo-mode.
(todo-edit-item--text): When editing a done item comment, prevent
clobbering match data on finishing the edit.
(todo-edit-item--header): Ensure that decrementing the month of
the date header works for intervals greater than a year, and when
incrementing or decrementing the month crosses one or more years,
adjust the year as needed.
(todo-read-category): If we're outside of todo-mode and there is a
current todo file, use it; otherwise, use the default todo file.
* test/lisp/calendar/todo-mode-tests.el
(todo-test-edit-item-date-month): New test.
* test/lisp/calendar/todo-mode-resources/todo-test-1.todo: Modify
to accommodate new test.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-check-1)
(test-byte-opt-arithmetic, bytecomp-lexbind-check-1)
(bytecomp-lexbind-explain-1):
When comparing interpreted with compiled results, don't consider all
errors to be equal; take the error type into account. (The error
arguments may differ, but there may be good reasons for that.)
* test/lisp/emacs-lisp/bytecomp-tests.el
(test-byte-comp-macro-expand-lexical-override): Remove functions
before testing so that the test can be run twice without failing.
* test/lisp/cedet/srecode-utest-template.el
(srecode-utest-project): Set the current directory in the project
so that we'll find it later (bug#42533). The in-project directory
is /tmp, which is not actually what it is on many machines that
have the temporary directory somewhere else.
* test/src/image-tests.el (image-test-circular-specs): New file.
* src/image.c (parse_image_spec): Return failure for circular lists.
(valid_image_p): Don't look at odd-numbered list elements expecting to
find a property name.
(image_spec_value): Handle circular lists.
(equal_lists): Introduce.
(search_image_cache): Use `equal_lists' (bug#36403).
Problem reported by Pip Cet in:
https://lists.gnu.org/r/emacs-devel/2020-08/msg00444.html
* src/fns.c (Fdelete): Fix correctness bug via a simpler (though more
memory-intensive) approach. It’s probably not worth optimizing
the memory usage yere.
* test/src/fns-tests.el (test-vector-delete): Add test for the bug.
* src/fns.c (Fdelete): When deleting from a vector, call Fequal
only once per vector element. This is faster when Fequal is slow,
and avoids the need to preinitialize the vector result. Finish
when the result is exhausted, not when the input is exhausted;
the two are equivalent but the former may be faster.
* test/src/fns-tests.el (test-vector-delete): New test.
* lisp/ffap.el (ffap-file-name-with-spaces): New variable (bug#8439).
(ffap-search-backward-file-end, ffap-search-forward-file-end)
(ffap-dir-separator-near-point): New functions.
(ffap-string-at-point): Use the variable and the new functions to
guess at files containing strings.
* test/lisp/progmodes/cperl-mode-tests.el: Adjust for `perl-mode`.
(cperl-test-ppss): Rename from `cperl-test-face` and change return value.
(cperl-mode-test-bug-42168): Test the `syntax-ppss` state rather than
the font-lock faces, so it works for both `perl-mode` and `cperl-mode`.
* lisp/mail/flow-fill.el (fill-flowed): Loop until all flowed lines
are collected.
* test/lisp/mail/flow-fill-tests.el
(fill-flow-tests-fill-flowed-decode): Also test for multiple
flowed lines (bug#42855).
* lisp/progmodes/cperl-mode.el (cperl-find-pods-heres):
Recognize {$a++ / $b} correctly as division. (Bug#42168)
* test/lisp/progmodes/cperl-mode-tests.el: New file with test
verifying the fix.
* lisp/emacs-lisp/lisp.el (end-of-defun): Only skip to next line when
after end of defun when ARG is 1 or less.
* test/lisp/emacs-lisp/lisp-tests.el (end-of-defun-twice): New
test (bug#24427).
* lisp/help-fns.el (find-lisp-object-file-name): Check for 'defvar
argument before searching for an internal variable (Bug#24697).
* test/lisp/help-fns-tests.el: New tests.
* test/lisp/gnus/mml-sec-tests.el (mml-secure-en-decrypt-sign-3):
(mml-secure-en-decrypt-sign-1-3-double): These tests are unstable
on Ubuntu (bug#42803).
Thanks to Karl Fogel for pre-commit review.
* lisp/bookmark.el (bookmark-delete-all): New function to delete all
bookmarks.
(bookmark-bmenu-mark-all): New function to mark all bookmarks in the
bookmark list buffer.
(bookmark-bmenu-unmark-all): New function to unmark all bookmarks in
the bookmark list buffer.
(bookmark-bmenu-delete-all): New function to mark for deletion all
bookmarks in the bookmark list buffer.
(bookmark-map): Map "D" to `bookmark-delete-all'.
(bookmark-bmenu-mode-map): New mappping for "M" to
`bookmark-bmenu-mark-all'.
(bookmark-bmenu-mode-map): New mappping for "U" to
`bookmark-bmenu-unmark-all'.
(bookmark-bmenu-mode-map): New mappping for "D" to
`bookmark-bmenu-delete-all'.
(bookmark-bmenu-mark-all): New bookmark menu to
`bookmark-delete-all'.
(easy-menu-define): New bookmark menu to `bookmark-bmenu-mark-all'.
(easy-menu-define): New bookmark menu to
`bookmark-bmenu-unmark-all'.
(easy-menu-define): New bookmark menu to
`bookmark-bmenu-delete-all'.
(bookmark-bmenu-select): Update docstring to include a reference to
`bookmark-bmenu-mark-all'.
(bookmark-bmenu-mode): Update docstring. Add/Update description:
`bookmark-bmenu-mark-all', `bookmark-bmenu-delete-all',
`bookmark-bmenu-execute-deletions', and `bookmark-bmenu-unmark-all'.
* test/lisp/bookmark-resources/test-list.bmk: New bookmark file to
test a list of bookmarks.
* test/lisp/bookmark-tests.el (bookmark-tests-bookmark-file-list): New
reference to the bookmark file used for testing a list of bookmarks.
(bookmark-tests-bookmark-list-0, bookmark-tests-bookmark-list-1,
bookmark-tests-bookmark-list-2): New cached values for testing a
list of bookmark.
(bookmark-tests-cache-timestamp-list): New variable to set
`bookmark-bookmarks-timestamp'.
(with-bookmark-test-list): New macro environment to test a list of
bookmarks.
(with-bookmark-test-file-list): New macro environment to test a list
of bookmarks with example.txt.
(with-bookmark-bmenu-test-list): New macro environment to test
functions about a list of bookmarks from `bookmark-bmenu-list'.
(bookmark-tests-all-names-list, bookmark-tests-get-bookmark-list,
bookmark-tests-get-bookmark-record-list): New functions to test the
records of the list of bookmarks.
(bookmark-tests-make-record-list): New function to test the creation
of a record from example.txt with a list of bookmarks loaded.
(bookmark-tests-delete-all): New function to test
`bookmark-delete-all'.
(bookmark-test-bmenu-any-marks-list): New function to test
`bookmark-bmenu-any-marks' with a list of bookmarks.
(bookmark-test-bmenu-mark-all): New function to test
`bookmark-bmenu-mark-all'.
(bookmark-test-bmenu-unmark-all): New function to test
`bookmark-bmenu-unmark-all'.
(bookmark-test-bmenu-delete-all): New function to test
`bookmark-bmenu-delete-all'.
* test/lisp/gnus/mml-sec-tests.el
(mml-secure-en-decrypt-sign-1-1-single): Mark the test as unstable
(bug#42720). It sometimes fails on some systems (Fedora?) when
run with "-j5", so there may be a race condition in the code somewhere.
* lisp/net/browse-url.el: Turn on lexical-binding.
(browse-url--mailto, browse-url--man, browse-url--browser): Use
imperative form in docstrings.
(browse-url-delete-temp-file): Turn comment into a proper docstring.
* test/lisp/net/browse-url-tests.el: New file with tests for
browse-url.el.
* lisp/emacs-lisp/bytecomp.el (byte-compile-associative):
Translate numerical identity expressions, such as (+ x) and (* x),
into (* x 1) since the previous translation (+ x 0) gets it wrong
for x = -0.0.
* test/lisp/emacs-lisp/bytecomp-tests.el
(byte-opt-testsuite-arith-data): Add test cases.
* test/lisp/emacs-lisp/cconv-tests.el
(cconv-tests-cl-iter-defun-:documentation): Mark as unstable
(bug#42723).
(cconv-tests-iter-defun-:documentation): Ditto.
* lisp/erc/erc.el (erc--unignore-user): Separate into own function
(bug#40137).
(erc-cmd-IGNORE): Ask if the user wants a timeout.
(erc--read-time-period): New function.
* test/lisp/gnus/mml-sec-tests.el
(mml-first-secure-en-decrypt-sign-1): mml-secure-en-decrypt-sign-1
fail sometimes, on some machines, unless it's the first test. I'm
guessing there's a race condition somewhere in the test, but put
it first now to avoid build reports.
These tests are all written by Gemini Lasswell <gazally@runbox.com>.
* test/lisp/emacs-lisp/cconv-tests.el
(top-level): Add two commented out tests which the byte-compiler
can't handle.
(cconv-tests-lambda-:documentation)
(cconv-tests-pcase-lambda-:documentation)
(cconv-tests-defun-:documentation)
(cconv-tests-cl-defun-:documentation)
(cconv-tests-function-:documentation)
(cconv-tests-cl-defgeneric-literal-:documentation)
(cconv-tests-defsubst-:documentation)
(cconv-tests-cl-defsubst-:documentation): New tests.
(cconv-tests-cl-iter-defun-:documentation)
(cconv-tests-iter-defun-:documentation)
(cconv-tests-iter-lambda-:documentation)
(cconv-tests-cl-function-:documentation)
(cconv-tests-cl-defgeneric-:documentation): New failing tests.
* test/lisp/net/network-stream-tests.el
(network-test--resolve-system-name): New function.
(echo-server-with-dns): Skip test if (system-name) doesn't look
like it's going to resolve (bug#42535).
* test/lisp/vc/vc-tests.el (vc-test--svn-enabled): Macos machines
may have a dummy svn program that helpfully just outputs "There's
no svn program here", so also test for the svnadmin program
(bug#42536).
* doc/misc/tramp.texi (Predefined connection information):
Add "direct-async-process".
(Remote processes): New subsection "Improving performance of
asynchronous remote processes".
* lisp/net/tramp-adb.el (tramp-methods) <adb>: Add `tramp-login-program'
and `tramp-login-args'.
(tramp-adb-handle-make-process): Use `tramp-handle-make-process'.
(tramp-adb-maybe-open-connection): Add "set +o vi +o emacs" command.
* lisp/net/tramp-sh.el (tramp-sh-handle-make-process):
Use `tramp-handle-make-process'.
(tramp-sh-file-name-handler-p, tramp-multi-hop-p): New defuns.
(tramp-compute-multi-hops): Use `tramp-multi-hop-p'.
* lisp/net/tramp.el (tramp-dissect-file-name, tramp-dissect-hop-name):
Use `tramp-multi-hop-p'.
(tramp-handle-insert-file-contents, tramp-local-host-p):
Use `tramp-sh-file-name-handler-p'.
(tramp-handle-make-process): New defun.
* test/README: Add another example how to use SELECTOR.
* test/lisp/net/tramp-tests.el (tramp-test03-file-name-method-rules):
Adapt test.
(tramp--test-sh-p): Use `tramp-sh-file-name-handler-p'.