| This directory contains shell scripts used as tests for Info. They are |
| listed in "info/Makefile.am" and will usually be run with "make check". |
| It should be possible to run a test on its own by running it at the |
| command line and checking the return value, e.g. |
| |
| $ t/goto-quoted.sh |
| $ echo $? |
| 1 |
| |
| shows a test failure. |
| |
| The tests fall into two categories: tests of non-interactive and |
| interactive operation. |
| |
| New tests can be created by copying existing ones. Each test should |
| start with the lines |
| |
| srcdir=${srcdir:-.} |
| . $srcdir/t/Init-test.inc |
| |
| to allow running at the command line, or with either an in-source or |
| out-of-source build with "make check". |
| |
| Any interactive test should also finish with |
| |
| cleanup |
| |
| to cleanup temporary files and spawned processes. 'cleanup' will |
| exit the script with a status of $retval, which the test should set |
| to indicate success or failure. |
| |
| Non interactive tests can run 'info' as $ginfo. The interactive tests |
| use the run_ginfo function. |
| |
| Tests of interactive operation |
| ------------------------------ |
| |
| These use the "pseudotty" program in the info subdirectory, which |
| creates a pseudo-terminal for the input and output of the program. |
| This allows the program to happily enter interactive operation (its standard |
| file descriptors pass the isatty library function) and avoids affecting |
| the output of the terminal the test was invoked from. pseudotty reads and |
| discards all input on its stdin, and passes through any bytes read on |
| its control channel into the pseudo-terminal. It prints the name of the |
| pseudoterminal slave device on standard output. |
| |
| (test script) |
| ^ | |
| | `-control----> pseudotty (master) <---> (slave) stdin/stdout ginfo |
| `-name of slave-----' |
| |
| pseudotty will stop running either when killed, or when it exits after |
| its control channel is closed. |
| |
| Since ginfo is reading to and writing from the pseudoterminal slave |
| device, if pseudotty exits before ginfo does, ginfo will exit with an |
| I/O error. |
| |
| Many of the tests of interactive operation try to position the cursor |
| on a cross-reference by various means, follow the reference, and dump the node |
| reached to a file. (It can be compared with a target file in |
| info/t/node-target, to check that we ended up where we thought we would.) |
| |
| |