Hello Tom,
>>> We've often talked about the problem that we have no regression test
>>> coverage for psql's tab completion code. I got interested in this
>>> issue while messing with the filename completion logic therein [1],
>>> so here is a draft patch that adds some testing for that code.
>
>> After you raised the issue, I submitted something last August, which did
>> not attract much attention.
>> https://commitfest.postgresql.org/26/2262/
>> It covers some tab-completion stuff. It uses Expect for the interactive
>> stuff (tab completion, \h, ...).
>
> Now that you mention it, I seem to recall looking at that and not being
> happy with the additional dependency on Expect.
Possibly. You did not say it out very loud.
> Expect is *not* a standard module;
Somehow. It is an old one, though.
> on the machines I have handy, the only one in which it appears in the
> default Perl installation is macOS. (Huh, what's Apple doing out ahead
> of the pack?) I'm pretty sure that Expect also relies on IO::Pty,
Indeed, it does.
> so it's a strictly worse dependency than what I've got here.
If you have to install IO::Pty anyway, ISTM you can also install Expect.
IO::Pty documentation says that it is "mainly used by Expect", which is a
clue that IO::Pty is not much better than Expect as a dependency.
For installation, "apt install libexpect-perl" did the trick for me. "cpan
install Expect" should work as well on most setup.
I guess it is possible to check whether Expect is available and to skip
the corresponding tests if not.
> Can we recast what you did into something like this patch's methods?
Basically it means reimplementing some expect functionality in the script,
including new bugs. Modules were invented to avert that, so I cannot say
I'm happy with the prospect of re-inventing the wheel. Note that Expect is
a pure-perl 1600-LOC module.
Anyway, I'll have a look. At least I used a very limited subset of Expect
capabilities which should help matters along.
--
Fabien.