			    The Automake test suite

User interface
==============

Running the tests
-----------------

  To run all tests:

    make -k check

  By default, verbose output of a test 't/foo.sh' or 't/foo.tap' is retained
  in the log file 't/foo.log'.  Also, a summary log is created in the file
  'test-suite.log' (in the top-level directory).

  You can use '-jN' for faster completion (it even helps on a uniprocessor
  system, due to unavoidable sleep delays, as noted below):

    make -k -j4

  To rerun only failed tests:

    make -k recheck

  To run only tests that are newer than their last results:

    make -k check RECHECK_LOGS=

  To run only selected tests:

    make -k check TESTS="t/foo.sh t/bar.tap"           (GNU make)
    env TESTS="t/foo.sh t/bar.tap" make -e -k check    (non-GNU make)

 To run the tests in cross-compilation mode, you should first configure
 the automake source tree to a cross-compilation setup.  For example, to
 run with a Linux-to-MinGW cross compiler, you will need something like
 this:

   ./configure --host i586-mingw32msvc --build i686-pc-linux-gnu

 To avoid possible spurious error, you really have to *explicitly* specify
 '--build' in addition to '--host'; the 'lib/config.guess' script can help
 determine the correct value to pass to '--build'.
 Then you can just run the testsuite in the usual way, and the test cases
 using a compiler should automatically use a cross-compilation setup.


Interpretation
--------------

  Successes:
    PASS  - success
    XFAIL - expected failure

  Failures:
    FAIL  - failure
    XPASS - unexpected success

  Other:
    SKIP  - skipped tests (third party tools not available)
    ERROR - some unexpected error condition


About the tests
---------------

  There are two kinds of tests in the Automake testsuite (both implemented
  as shell scripts).  The scripts with the '.sh' suffix are "simple"
  tests, their outcome completely determined by their exit status.  Those
  with the '.tap' suffix use the TAP protocol.

  If you want to run a test by hand, you should be able to do so using the
  'runtest' script provided in the Automake distribution:

      ./runtest t/nogzip.sh
      ./runtest t/add-missing.tap

  This will run the test using the correct shell, and should also work in
  VPATH builds.  Note that, to run the TAP tests this way, you'll need to
  have the prove(1) utility available in $PATH.


Supported shells
----------------

  By default, the tests are run by a proper shell detected at configure
  time.  Here is how you can run the tests with a different shell, say
  '/bin/my-sh':

    # Running through the makefile test driver.
    make check AM_TEST_RUNNER_SHELL=/bin/my-sh         (GNU make)
    AM_TEST_RUNNER_SHELL=/bin/my-sh make -e check      (non-GNU make)

    # Run a test directly from the command line.
    AM_TEST_RUNNER_SHELL=/bin/my-sh ./runtest t/foo.sh

  The test scripts are written with portability in mind, and should run
  with any decent POSIX shell.  However, it is worth nothing that older
  versions of Zsh (pre-4.3) exhibited several bugs and compatibility issues
  with our uses, and are thus not supported for running Automake's test
  scripts.


Reporting failures
------------------

  Send verbose output, i.e., the contents of test-suite.log, of failing
  tests to <bug-automake@gnu.org>, along with the usual version numbers
  (which Automake, which Autoconf, which operating system, which make
  version, which shell, etc.)



Writing test cases
==================

* See also summary information in the top-level HACKING file.

* If you plan to fix a bug, write the test case first.  This way you'll
  make sure the test catches the bug, and that it succeeds once you have
  fixed the bug.

* Sometimes it is better to add to an existing test than to write a new one.
  In any case, it is good to look for existing tests checking for
  something related, and use one or more them as a starting point.
  The posixtarget test is a nearly-minimal test if you end up starting
  from scratch.

* Add a copyright/license paragraph.

* Explain what the test does, i.e., which features it checks, which
  invariants it verifies, or what bugs/issues it guard against.

* Cite the PR number (if any), and the original reporter (if any), so
  we can find or ask for information if needed.

* If a test checks examples or idioms given in the documentation, make
  sure the documentation reference them appropriately in comments, as
  with:

    @c Keep in sync with autodist-config-headers.sh
    @example
    ...
    @end example

* Use "required=..." for required tools.  Do not explicitly require
  tools which can be taken for granted because they're listed in the
  GNU Coding Standards (for example, 'gzip').

* Include 'test-init.sh' in every test script.

* Use the 'skip_' function to skip tests, with a meaningful message if
  possible.  Where convenient, use the 'warn_' function to print generic
  warnings, the 'fail_' function for test failures, and the 'fatal_'
  function for hard errors.  In case a hard error is due to a failed
  set-up of a test scenario, you can use the 'framework_fail_' function
  instead.

* For those tests checking the Automake-provided test harnesses that
  are expected to work also when the 'serial-tests' Automake option
  is used (thus causing the serial testsuite harness to be used in the
  generated Makefile), place a line containing "try-with-serial-tests"
  somewhere in the file (usually in a comment).
  That will ensure that the 'gen-testsuite-part' script generates a
  sibling of that test which uses the serial harness instead of the
  parallel one.  For those tests that are *not* meant to work with the
  parallel testsuite harness at all (these should be very very few),
  set the shell variable 'am_serial_tests' to "yes" before including
  test-init.sh.

* Some tests in the Automake testsuite are auto-generated; those tests
  might have custom extensions, but their basename (that is, with such
  extension stripped) is expected to end with "-w" string, optionally
  followed by decimal digits.  For example, the name of a valid
  auto-generated test can be 'color-w.sh' or 'tap-signal-w09.tap'.
  Please don't name hand-written tests in a way that could cause them
  to be confused with auto-generated tests; for example, 'u-v-w.sh'
  or 'option-w0.tap' are *not* valid name for hand-written tests.

* test-init.sh brings in some commonly required files, and sets a skeleton
  configure.ac.  If possible, append to this file.  In some cases you'll
  have to overwrite it, but this should be the exception.  Note that
  configure.ac registers Makefile.in but do not output anything by
  default.  If you need ./configure to create Makefile, append AC_OUTPUT
  to configure.ac.  In case you don't want your test directory to be
  pre-populate by test-init.sh (this should be a rare occurrence), set
  the 'am_create_testdir' shell variable to "empty" before sourcing
  test-init.sh.

* By default, the testcases are run with the errexit shell flag on,
  to make it easier to catch failures you might not have thought of.
  If  this is undesirable in some testcase, you can use "set +e" to
  disable the errexit flag (but please do so only if you have a very
  good reason).

* End the test script with a ':' command.  Otherwise, when somebody
  changes the test by adding a failing command after the last command,
  the test will spuriously fail because '$?' is nonzero at the end.
  Note that this is relevant even if the errexit shell flag is on, in
  case the test contains commands like "grep ... Makefile.in && exit 1"
  (and there are indeed a lot of such tests).

* Use $ACLOCAL, $AUTOMAKE, $AUTOCONF, $AUTOUPDATE, $AUTOHEADER,
  $PERL, $MAKE, $EGREP, and $FGREP, instead of the corresponding
  commands.

* When you want to redirect the output from a make invocation, use the
  'run_make' function rather than calling $MAKE directly.  Not only is
  this more idiomatic, but it also avoid possible spurious racy failures
  when the make invocations in the testsuite are run in parallel mode
  (as with "make check AM_TESTSUITE_MAKE='make -j4'").

* Do not override Makefile variables using make arguments, as in e.g.:

    $MAKE prefix=/opt install           # BAD

  This is not portable for recursive targets (with non-GNU make,
  targets that call a sub-make may not pass "prefix=/opt" along).
  Instead, use the 'run_make' function, which automatically uses
  the AM_MAKEFLAGS to propagate the variable definitions along to
  sub-make:

    run_make prefix=/opt install        # GOOD

* Use '$sleep' when you have to make sure that some file is newer
  than another.

* Use cat or grep or similar commands to display (part of) files that
  may be interesting for debugging, so that when users send verbose
  output we don't have to ask them for more details.  Display stderr
  output on the stderr file descriptor.  If some redirected command is
  likely to fail, display its output even in the failure case, before
  exiting.

* Use '$PATH_SEPARATOR', not hard-coded ':', as the separator of
  PATH's entries.

* It's more important to make sure that a feature works, than make
  sure that Automake's output looks correct.  It might look correct
  and still fail to work.  In other words, prefer running 'make' over
  grepping Makefile.in (or do both).

* If you run $ACLOCAL, $AUTOMAKE or $AUTOCONF several times in the
  same test and change configure.ac by the meantime, do

    rm -rf autom4te*.cache

  before the following runs.  On fast machines the new configure.ac
  could otherwise have the same timestamp as the old autom4te.cache.

* Use filenames with two consecutive spaces when testing that some
  code preserves filenames with spaces.  This will catch errors like
  `echo $filename | ...`.

* Make sure your test script can be used to faithfully check an
  installed version of automake (as with "make installcheck").  For
  example, if you need to copy or grep an automake-provided script,
  do not assume that they can be found in the '$top_srcdir/lib'
  directory, but use '$am_scriptdir' instead.  The complete list of
  such "$am_...dir" variables can be found in the 't/ax/test-defs.in'
  file.

* When writing input for lex, include the following in the definitions
  section:

    %{
    #define YY_NO_UNISTD_H 1
    %}

  to accommodate non-ANSI systems, since GNU flex generates code that
  includes unistd.h otherwise.  Also add:

    int isatty (int fd) { return 0; }

  to the definitions section if the generated code is to be compiled
  by a C++ compiler, for similar reasons (i.e., the isatty(3) function
  from that same unistd.h header would be required otherwise).

* Add any new test to handwritten_TESTS in 't/list-of-tests.mk', and
  to XFAIL_TESTS in addition if needed (that is, if the test is expected
  to fail).

* In test scripts, prefer using POSIX constructs over their old
  Bourne-only equivalents:

    - use $(...), not `...`, for command substitution;
    - use $((...)), not `expr ...`, for arithmetic processing;
    - liberally use '!' to invert the exit status of a command, e.g.,
      in idioms like "if ! CMD; then ...", instead of relying on clumsy
      paraphrases like "if CMD; then :; else ...".
    - prefer use of ${param%pattern} and ${param#pattern} parameter
      expansions over processing by 'sed' or 'expr'.

* Note however that, when writing Makefile recipes or shell code in a
  configure.ac, you should still use `...` instead, because the Autoconf
  generated configure scripts do not ensure they will find a truly POSIX
  shell (even though they will prefer and use it *if* it's found).

* Do not test an Automake error with "$AUTOMAKE && exit 1", or in three
  years we'll discover that this test failed for some other bogus reason.
  This happened many times.  Better use something like

     AUTOMAKE_fails
     grep 'expected diagnostic' stderr

  Note this doesn't prevent the test from failing for another reason,
  but at least it makes sure the original error is still here.
