freebsd-dev/usr.bin/bmake/tests
Enji Cooper 430f7286a5 Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed
after r298107

Summary of changes:

- Replace all instances of FILES/TESTS with ${PACKAGE}FILES. This ensures that
  namespacing is kept with FILES appropriately, and that this shouldn't need
  to be repeated if the namespace changes -- only the definition of PACKAGE
  needs to be changed
- Allow PACKAGE to be overridden by callers instead of forcing it to always be
  `tests`. In the event we get to the point where things can be split up
  enough in the base system, it would make more sense to group the tests
  with the blocks they're a part of, e.g. byacc with byacc-tests, etc
- Remove PACKAGE definitions where possible, i.e. where FILES wasn't used
  previously.
- Remove unnecessary TESTSPACKAGE definitions; this has been elided into
  bsd.tests.mk
- Remove unnecessary BINDIRs used previously with ${PACKAGE}FILES;
  ${PACKAGE}FILESDIR is now automatically defined in bsd.test.mk.
- Fix installation of files under data/ subdirectories in lib/libc/tests/hash
  and lib/libc/tests/net/getaddrinfo
- Remove unnecessary .include <bsd.own.mk>s (some opportunistic cleanup)

Document the proposed changes in share/examples/tests/tests/... via examples
so it's clear that ${PACKAGES}FILES is the suggested way forward in terms of
replacing FILES. share/mk/bsd.README didn't seem like the appropriate method
of communicating that info.

MFC after: never probably
X-MFC with: r298107
PR: 209114
Relnotes: yes
Tested with: buildworld, installworld, checkworld; buildworld, packageworld
Sponsored by: EMC / Isilon Storage Division
2016-05-04 23:20:53 +00:00
..
archives Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
basic Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
execution Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
shell Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
suffixes Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
syntax Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
sysmk Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
variables Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
common.sh
Makefile Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed 2016-05-04 23:20:53 +00:00
Makefile.depend DIRDEPS_BUILD: Connect MK_TESTS. 2016-03-09 22:46:01 +00:00
Makefile.inc Test directories can build in parallel fine. 2016-02-16 02:13:59 +00:00
README
test-new.mk

$FreeBSD$

This directory contains regression tests for make(1).

To invoke the tests, please refer to tests(7).

----------------------------------------------------------------------------

The rest of this file is intended for developers.

The tests are invoked via the test.sh script or prove(1) from p5-Test-Harness.
Tests are normally executed in a special test directory that is built under
/tmp. The reason for this is, that make tests are generally influenced by
all file in a directory, by files in one of make's obscure object directories
as well as in other directories make happens to look into. Therefor the
test scripts build a clean environment in the temp directory and the
tests are executed by cd-ing into that directory and invoking make. The
output of the make run (standard output, standard error and the exit status)
are written into files that are created in another directory. So the layout
for the shell/builtin test looks like:

	./shell/builtin/			- directory with test stuff
	/tmp/make.${USER}/shell/builtin		- actual test directory
	/tmp/make.${USER}/shell/builtin.OUTPUT	- output files

So a full test consists of the following steps:

	setup	- Set up the test environment by creating the test directory
		  and populating it with the needed files. If the test
		  directory already exists an error is printed.

	run	- Run the test and produce the output into the output
		  directory.

	show	- Show the result files on the screen.

	compare	- Compare the results in the output directory with those
		  in the test source directory. This just prints whether
		  the test was ok or not in the format used by prove(1).

	diff	- Diff the output files and the expected output files.

	reset	- Reset the test to its initial state.

	clean	- Remove both the test directory and the output directory.

Each of these steps can independently be invoked with the test script
contained in each directory. These test scripts are called test.t.
Additionally the scripts understand the following commands:

	test	- Run setup, run and compare.

	prove	- Run setup, run, compare and clean. This is identically
		  to invoking the script without an argument.

	desc	- Print a short test description.

	update	- Update the expected results from the actual results.

The test script has the following syntax:

	% test.t [-v] [-m path_to_make_binary] command

To invoke it via prove(1) use:

	% [MAKE_PROG=path_to_make_binary] prove [options] [files/directories]

Example:
	% sh test.t -m `pwd`/../obj/make run
	% MAKE_PROG=/usr/obj/usr/src/usr.bin/make/make prove -r

The test scripts use the following environment variables that can be set
by the user in the test script's environment:

	WORK_BASE
		- Base directory for working files. If not set
		  /tmp/make.${USER} is used.

	MAKE_PROG
		- Path to the make program to test. If not set
		  /usr/bin/make is used.

The following variables are available to test scripts:

	SRC_BASE
		- test source base directory. This is determined by
		  repeatedly doing cd .. and checking for common.sh.
		  Therefor this can fail if a test source directory is 
		  actually a symbolic link and is physically not located
		  below the directory containing common.sh.

	SUBDIR	
		- subdirectory below WORK_BASE and SRC_BASE for current test

	WORK_DIR
		- ${WORK_BASE}/${SUBDIR}

	SRC_DIR
		- ${SRC_BASE}/${SUBDIR}

The following variables and functions may be defined by the test script.
This also lists special filenames.

	DESC
		A one-line description of the test.

	TEST_MAKE_DIRS
		A list of pairs of directory names and modes. These
		directories are created during setup and reset. When
		the directory already exists (during reset) only the
		mode change is applied.

		TEST_MAKE_DIRS="subdir 775 subdir/sub 555"

	TEST_COPY_FILES
		A list of pairs of file names and modes. These files
		are copied from the source to the working directory
		during setup and reset. When the file already exists
		(during reset) only the mode change is applied. Files
		may be copied from/to sub-directories. The sub-directory
		in the working directory must already exists (see
		TEST_MAKE_DIRS).

		TEST_COPY_FILES="libtest.a 444 subdir/libfoo.a 444"

	TEST_TOUCH
		List of pairs of file names and arguments to touch(1).
		During setup and reset for each list element touch(1)
		is executed.

		TEST_TOUCH="file1 '-t 200501011257'"

	TEST_LINK
		List of pairs of filenames. Each pair is passed to ln(1).
		All names are prefixed with the working directory.

	Makefile
		If a file with this name exists in the source directory
		it is automatically copied to the working directory.

	setup_test()
		If this function exists it is executed at the end of the
		setup.

	reset_test()
		If this function exists it is executed at the end of the
		reset.

	TEST_CLEAN_FILES
		A list of file to be deleted when resetting.

	TEST_N
		Number of tests in this script. If not set this is assumed
		to be 1.

	TEST_<number>
		Arguments to make for test number <number>. If not set
		the default argument of test<number> is used. To run a test
		without argument to make, set TEST_<number> to the empty string.

	TEST_<number>_SKIP
		To skip a test (for whatever reason) this should be set
		to a string explaining the reason for skipping the test.

	TEST_<number>_TODO
		For a test that should fail this is a short string describing
		what the problem in make(1) is that should be fixed.

	run_test()
		Function to run a test. This function gets a single argument
		which is the number of the test to executed. The default
		function evaluates the variable TEST_<number> and calls
		make with the arguments in this variable.