Subject: Re: bug#74090: 31.0.50; Problems with dabbrev-expand

From: Stephen Berman <[email-masked]>
Date: Mon, 02 Dec 2024 13:15:23 +0100

On Mon, 02 Dec 2024 09:33:51 +0200 Juri Linkov <[email-masked]> wrote:

>> I've added a test but I'm somewhat dissatisfied with it.  I wanted to
>> essentially reproduce the behavior I see with the patch, described
>> above.  However, after killing buffer "foo", the message about no
>> further expansion is from a user-error in dabbrev-expand, and on hitting
>> this in the test run, the test immediately finishes.  So I used
>> should-error with :type 'user-error and the test succeeds, but I cannot
>> test for the final buffer content nor the message displayed by
>> user-error.  If anyone has an idea how to do that or otherwise improve
>> the test, please chime in.
>
> Probably 'condition-case' could help to catch a user-error.
> Or maybe better to set a buffer-local or let-bind 'command-error-function'
> like e.g. in 'minibuffer-error-initialize'.
>
> Then you can let-bind 'set-message-function' to catch a message
> to check it (but I don't remember if the error calls the message function).
>
> OTOH, I don't understand why the test immediately finishes after 'should-error'?
> There are many tests that call 'should-error' sequentially like:
>
>   (ert-deftest abbrev-table-empty-p-test ()
>     (should-error (abbrev-table-empty-p 42))
>     (should-error (abbrev-table-empty-p "aoeu"))
>     (should-error (abbrev-table-empty-p '()))
>     (should-error (abbrev-table-empty-p []))
>
> And indeed implementation of 'should-error' already has 'condition-case'.

Thanks very much for the feedback.  I was wrong about the test
immediately finishing after `should-error'; I guess I misread or
misunderstood the output of the batch run.  Additionally, there was a
typo in the test of the final buffer content, which caused it to fail,
and that probably confused me further.  As for testing the error
message, I overlooked that `should-error' returns an error description
containing the message, so that seems the simplest way to do it.  With
these changes the test succeeds in batch runs and I think now better
reflects the user experience with manual input, so I went ahead and
pushed the fix (commit 6bca138d60e to emacs-30).  If you agree, feel
free to close the bug again (assuming it needs to be reclosed, since you
unarchived it); otherwise, if you see other problems with the test,
please let me know.

Steve Berman