emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Some testing issues


From: Stephen Berman
Subject: Some testing issues
Date: Fri, 07 Jul 2017 23:22:40 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux)

I installed some new tests for todo-mode.el in master c24748a and there
were a few problems that I don't understand; maybe someone here can
enlighten me.

Several of the tests call the function todo-toggle-view-done-items,
which contains this code:

          (if (not (pos-visible-in-window-p shown))
              (recenter)

(`shown' stores the position of the first done item in the category, if
it is shown.)  When using todo-mode and also when stepping through the
function with Edebug, it works as expected.  But when running the tests,
sometimes -- but not always -- it fails with the error "`recenter'ing a
window that does not display current-buffer."  In those cases, the test
failure is prevented by evaluating the following sexp immediately before
calling todo-toggle-view-done-items:

          (set-window-buffer nil (current-buffer))

When using todo-mode this is not necessary, because the selected window
always contains the current buffer when the function is called, but
apparently when running the tests, this isn't always the case, although
according to Edebug it is, AFAICT.  And again, the failure only happens
in some cases, though in those, it is reliably reproducible.  In
addition, in at least one case, when I rerun the test immediately after
it fails, then it succeeds.  And lastly, in one case, the test succeeds
without the set-window-buffer call when run interactively, but fails
without it when run in batch mode from the shell.  Any idea what's going
on here?  (If anyone wants to take a closer look, comments in the test
file point out the problematic cases.)

A second problem concerns trying to reference a message in a test.  The
function todo-toggle-view-done-items outputs a message if the category
contains no done items, and the test captures this by calling
current-message immediately after todo-toggle-view-done-items.  This
works when running the test interactively, but in a batch run,
current-message is nil (though the message is output in the shell).
Why?  (I avoid the failure in batch mode by testing a different but
effectively equivalent condition.)

Finally, one of the tests involves a display overlay that hides the item
header, which as a consequence, when using todo-mode, prevented the
cursor from appearing where the code put point, resulting in a display
bug.  I fixed this (in master 264dd81) by moving point to the first
visible position after the overlay.  But when running the test, the
overlay evidently does not inhibit point, but since the test, following
the bugfix code in todo-mode.el, assumes it does, it fails.  It seems
that the test environment does not reflect the same display mechanisms
that using the code does.  I haven't found a solution or workaround for
this, so the test is currently marked ":expected-result :failed".  I
hope someone can come up with a better alternative.

I'd be grateful for any suggestions or advice.

Steve Berman



reply via email to

[Prev in Thread] Current Thread [Next in Thread]