Subject: todo-test-add-and-delete-file fails on Ubuntu 24.10

From: Paul Eggert <[email-masked]>
Date: Mon, 17 Feb 2025 17:14:19 -0800

Currently (commit 9cedb434ee390a30a690e9f979428c5735cb88e5) the 
todo-mode-tests fail for me. This failure has been happening for a while 
and I finally got up the energy to report it today.

I see the following failure symptoms on Ubuntu 24.10, running on a ZFS 
file system mounted with the options rw, noatime, xattr, posixacl, and 
casesensitive.

   $ cd test
   $ make lisp/calendar/todo-mode-tests
   make[1]: Entering directory 
'/home/eggert/src/gnu/emacs/static-checking/test'
     GEN      lisp/calendar/todo-mode-tests.log
   Running 42 tests (2025-02-17 17:04:52-0800, selector ‘(not (or (tag 
:unstable) (tag :nativecomp)))’)
   Enter a non-existing file name:

... and the test hangs, waiting for me to type a file name I guess.

Of course a test like this shouldn't read from standard input.

If I run this command instead:

   $ make lisp/calendar/todo-mode-tests </dev/null

I get a failure. Here is what I see in the terminal output (from here to 
the end of this email):

make[1]: Entering directory 
'/home/eggert/src/gnu/emacs/static-checking/test'
   GEN      lisp/calendar/todo-mode-tests.log
Running 42 tests (2025-02-17 17:06:39-0800, selector ‘(not (or (tag 
:unstable) (tag :nativecomp)))’)
Enter a non-existing file name: Test todo-test-add-and-delete-file 
backtrace:
   read-from-minibuffer("Enter a non-existing file name: " nil (keymap
   completing-read-default("Enter a non-existing file name: " ("todo-te
   completing-read("Enter a non-existing file name: " ("todo-test-1" "t
   todo-validate-name("todo-test-2" file)
   todo-add-file()
   funcall-interactively(todo-add-file)
   call-interactively(todo-add-file)
   (progn (fset 'todo-read-category vnew) (fset 'todo-read-file-name vn
   (unwind-protect (progn (fset 'todo-read-category vnew) (fset 'todo-r
   (let* ((vnew #'(lambda (_prompt) file0)) (vnew #'(lambda (_prompt &o
   (let ((file0 (expand-file-name (concat file ".todo") (let* ((testfil
   todo-test--add-file("todo-test-2" "cat21")
   (let* ((file (concat todo-directory "todo-test-2.todo")) (file-nb (f
   (progn (todo-show) (let* ((fn-724 #'equal) (args-725 (condition-case
   (unwind-protect (progn (todo-show) (let* ((fn-724 #'equal) (args-725
   (let* ((abbreviated-home-dir nil) (process-environment (cons (format
   (progn (let* ((abbreviated-home-dir nil) (process-environment (cons
   (unwind-protect (progn (let* ((abbreviated-home-dir nil) (process-en
   (let* ((coding-system-for-write nil) (temp-file (file-name-as-direct
   #f(lambda () [t] (let* ((coding-system-for-write nil) (temp-file (fi
   #f(compiled-function () #<bytecode 0x232899316c83114>)()
   handler-bind-1(#f(compiled-function () #<bytecode 0x232899316c83114>
   ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
   ert-run-test(#s(ert-test :name todo-test-add-and-delete-file :docume
   ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m
   ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil
   ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp))))
   ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco
   eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n
   command-line-1(("-L" ":." "-l" "ert" "--eval" "(setq treesit-extra-l
   command-line()
   normal-top-level()
Test todo-test-add-and-delete-file condition:
     (end-of-file "Error reading from stdin")
    FAILED   1/42  todo-test-add-and-delete-file (0.023699 sec) at 
lisp/calendar/todo-mode-tests.el:823
Type C-x C-q to return to Todo mode.

Warning (todo):
Type C-x C-q to return to Todo mode.

This also runs a file format check and signals an error if
the format has become invalid.  However, this check cannot
tell if the number of items or categories changed, which
could result in the file containing inconsistent information.
You can repair this inconsistency by invoking the command
`todo-repair-categories-sexp', but this will revert any
renumbering of the categories you have made, so you will
have to renumber them again (see `(todo-mode) Reordering
Categories').

Warning (todo):
Type C-x C-q to return to Todo Archive mode.

This also runs a file format check and signals an error if
the format has become invalid.  However, this check cannot
tell if the number of items or categories changed, which
could result in the file containing inconsistent information.
You can repair this inconsistency by invoking the command
`todo-repair-categories-sexp', but this will revert any
renumbering of the categories you have made, so you will
have to renumber them again (see `(todo-mode) Reordering
Categories').

    passed   2/42  todo-test-current-file-in-edit-mode (0.021512 sec)
    passed   3/42  todo-test-done-items-separator01-bol (0.010045 sec)
    passed   4/42  todo-test-done-items-separator01-eol (0.010608 sec)
    passed   5/42  todo-test-done-items-separator02-bol (0.009315 sec)
    passed   6/42  todo-test-done-items-separator02-eol (0.012330 sec)
    passed   7/42  todo-test-done-items-separator03-bol (0.011992 sec)
    passed   8/42  todo-test-done-items-separator03-eol (0.011536 sec)
    passed   9/42  todo-test-done-items-separator04-bol (0.010800 sec)
    passed  10/42  todo-test-done-items-separator04-eol (0.010216 sec)
    passed  11/42  todo-test-done-items-separator05-bol (0.009597 sec)
    passed  12/42  todo-test-done-items-separator05-eol (0.018598 sec)
    passed  13/42  todo-test-done-items-separator06-bol (0.010261 sec)
    passed  14/42  todo-test-done-items-separator06-eol (0.009223 sec)
    passed  15/42  todo-test-done-items-separator07 (0.009008 sec)
    passed  16/42  todo-test-edit-item-date-month (0.009337 sec)
Warning (todo):
Type C-x C-q to return to Todo mode.

This also runs a file format check and signals an error if
the format has become invalid.  However, this check cannot
tell if the number of items or categories changed, which
could result in the file containing inconsistent information.
You can repair this inconsistency by invoking the command
`todo-repair-categories-sexp', but this will revert any
renumbering of the categories you have made, so you will
have to renumber them again (see `(todo-mode) Reordering
Categories').

Warning (todo):
Type C-x C-q to return to Todo Archive mode.

This also runs a file format check and signals an error if
the format has become invalid.  However, this check cannot
tell if the number of items or categories changed, which
could result in the file containing inconsistent information.
You can repair this inconsistency by invoking the command
`todo-repair-categories-sexp', but this will revert any
renumbering of the categories you have made, so you will
have to renumber them again (see `(todo-mode) Reordering
Categories').

    passed  17/42  todo-test-edit-quit (0.018608 sec)
    passed  18/42  todo-test-item-highlighting (0.001984 sec)
    passed  19/42  todo-test-item-insertion-with-priority-1 (0.009987 sec)
    passed  20/42  todo-test-item-insertion-with-priority-2 (0.009790 sec)
    passed  21/42  todo-test-item-insertion-with-priority-3 (0.009942 sec)
    passed  22/42  todo-test-move-item01 (0.012244 sec)
    passed  23/42  todo-test-move-item02 (0.013235 sec)
    passed  24/42  todo-test-move-item03 (0.011093 sec)
    passed  25/42  todo-test-move-item04 (0.010821 sec)
    passed  26/42  todo-test-move-item05 (0.010157 sec)
    passed  27/42  todo-test-multiline-item-indentation-1 (0.010821 sec)
Type C-x C-q to return to Todo mode.

    passed  28/42  todo-test-multiline-item-indentation-2 (0.009533 sec)
Warning (todo):
Type C-x C-q to return to Todo mode.

This also runs a file format check and signals an error if
the format has become invalid.  However, this check cannot
tell if the number of items or categories changed, which
could result in the file containing inconsistent information.
You can repair this inconsistency by invoking the command
`todo-repair-categories-sexp', but this will revert any
renumbering of the categories you have made, so you will
have to renumber them again (see `(todo-mode) Reordering
Categories').

    passed  29/42  todo-test-multiline-item-indentation-3 (0.009796 sec)
    passed  30/42  todo-test-raise-lower-priority (0.009248 sec)
    passed  31/42  todo-test-revert-buffer01 (0.009938 sec)
    passed  32/42  todo-test-revert-buffer02 (0.008427 sec)
    passed  33/42  todo-test-todo-mark-unmark-category (0.010725 sec)
    passed  34/42  todo-test-todo-quit01 (0.052408 sec)
    passed  35/42  todo-test-todo-quit02 (0.009662 sec)
    passed  36/42  todo-test-toggle-item-header01 (0.001943 sec)
    passed  37/42  todo-test-toggle-item-header02 (0.008954 sec)
    passed  38/42  todo-test-toggle-item-header03 (0.008931 sec)
    passed  39/42  todo-test-toggle-item-header04 (0.009328 sec)
    passed  40/42  todo-test-toggle-item-header05 (0.009975 sec)
Items unarchived.
    passed  41/42  todo-test-toggle-item-header06 (0.018761 sec)
    passed  42/42  todo-test-toggle-item-header07 (0.009436 sec)

Ran 42 tests, 41 results as expected, 1 unexpected (2025-02-17 
17:06:40-0800, 0.558779 sec)

1 unexpected results:
    FAILED  todo-test-add-and-delete-file

make[1]: *** [Makefile:185: lisp/calendar/todo-mode-tests.log] Error 1
make[1]: Leaving directory '/home/eggert/src/gnu/emacs/static-checking/test'
make: *** [Makefile:251: lisp/calendar/todo-mode-tests] Error 2