test: Make the emacsclient binary user-configurable
authorAustin Clements <amdragon@MIT.EDU>
Wed, 28 Nov 2012 03:24:59 +0000 (22:24 -0500)
committerDavid Bremner <bremner@debian.org>
Thu, 29 Nov 2012 13:24:12 +0000 (09:24 -0400)
commitd59d9c81522d9127dde089ae9457f44de53f28e9
treec9623fa99e71da96af7af304fbdf69c6f02fd984
parentdba1f6e43247fb66ef1068ad88672dfb6a2df624
test: Make the emacsclient binary user-configurable

And require that if TEST_EMACS is specified, so is TEST_EMACSCLIENT.

Previously, the test framework always used "emacsclient", even if the
Emacs in use was overridden by TEST_EMACS.  This causes problems if
both Emacs 23 and Emacs 24 are installed, the Emacs 23 emacsclient is
the system default, but TEST_EMACS is set to emacs24.  Specifically,
with an Emacs 24 server and an Emacs 23 client, emacs tests that run
very quickly may produce no output from emacsclient, causing the test
to fail.

The Emacs server uses a very simple line-oriented protocol in which
the client sends a request to evaluate an expression and the server
sends a request to print the result of evaluation.  Prior to Emacs bzr
commit 107565 on March 11th, 2012 (released in Emacs 24.1), if
multiple commands were sent to the emacsclient between when it sent
the evaluation command and when it entered its receive loop, it would
only process the first response command, ignoring the rest of the
received buffer.  This wasn't a problem with the Emacs 23 server
because it sent only the command to print the evaluation result.
However, the Emacs 24 server first sends an unprompted command
specifying the PID of the Emacs server, then processes the evaluation
request, then sends the command to print the result.  If the
evaluation is fast enough, it can send both of these commands before
emacsclient enters the receive loop.  Hence, if an Emacs 24 server is
used with an Emacs 23 emacsclient, it may miss the response printing
command, ultimately causing intermittent notmuch test failures.
test/README
test/test-lib.sh