1999-12-23  DJ Delorie  <dj@cygnus.com>

Here are some notes about adding and using this testsuite.

First, all the programs are linked with libcygwin0.a, which is just
like libcygwin.a, except that it wants cygwin0.dll, not
cygwin1.dll.  The testsuite adds the winsup build directory to the
PATH so that cygwin0.dll can be found by windows during testing.

Because we'll probably run into complaints about using two DLLs, we
run cygrun.exe for each test.  All this does is run the test with
CreateProcess() so that we don't attempt to do the special code for
when a cygwin program calls another cygwin program, as this might be a
"multiple cygwins" problem.

Any test that needs to test command line args or redirection needs to
run such a child program itself, as the testsuite will not do any
arguments or redirection for it.  Same for fork, signals, etc.

The testsuite/winsup.api subdirectory is for testing the API to
cygwin1.dll ONLY.  Create other subdirs under testsuite/ for other
classes of testing.

Tests in winsup.api/*.c or winsup.api/*/*.c (only one subdirectory
level is allowed) either compile, run, and exit(0) or they fail.
Either abort or exit with a non-zero code to indicate failure.  Don't
print anything to the screen if you can avoid it (except for failure
reasons, of course).  One .c file per test, no compile options are
allowed (we're testing the api, not the compiler).

Tests whose filename is mentioned in known-bugs.tcl will be *expected*
to fail, and will "fail" if they compile, run, and return zero.

"make check" will only work if you run it *on* an NT machine.
Cross-checking is not supported.

To test a subset of the test-suite, use
$ make check CYGWIN_TESTSUITE_TESTS=regexp


