On Mon, 11 Jan 2021 at 00:48:42 +1100, Stuart Prescott wrote:
> Looking to the future, tests using SOURCE_BASE_DIR to locate test data would 
> allow build-time tests to be repurposed as autopkgtest tests too, as the 
> autopkgtest could tell the tests where the test input data is to be found. 

Prior art that would be worth looking at: GLib's test infrastructure uses
$G_TEST_SRCDIR and $G_TEST_BUILDDIR. These are usually used via a function
g_test_build_filename() whose first argument is a constant (enum value),
either G_TEST_DIST or G_TEST_BUILT, indicating whether the test data is
found in the source directory or the build directory.

If $G_TEST_SRCDIR and $G_TEST_BUILDDIR aren't set, g_test_build_filename()
defaults both to the directory where the currently-running test executable
was found (by looking at argv[0], /proc/self/exe or similar), which is
enough to make it unnecessary to set those variables for autopkgtests
in at least some cases.

If you intend to propose this as a feature in Qt or other libraries,
it's probably best to distinguish between the equivalent of G_TEST_SRCDIR
and the equivalent of G_TEST_BUILDDIR, so that tests in srcdir != builddir
builds can use test data and helper scripts that are distributed in
git/tarballs (GLib code would use G_TEST_DIST), and also use test data
and helper executables that are generated by the build (GLib code would
use G_TEST_BUILT).

$G_TEST_SRCDIR and $G_TEST_BUILDDIR are usually defined in terms of the
directory containing the test (so typically you'd have something like
G_TEST_SRCDIR=$HOME/src/glib/gobject/tests and
G_TEST_BUILDDIR=$HOME/src/glib/_build/gobject/tests for tests in the
gobject/tests subdirectory of a srcdir != builddir build), but it
would also be reasonable to have a pair of variables that is defined in
terms of the root directory, like the abs_top_srcdir=$HOME/src/glib and
abs_top_builddir=$HOME/src/glib/_build defined by Autotools.

In the non-GLib world, dbus has a similar setup, although instead of
separating the two sets of test data, it copies test files from the
equivalent of $G_TEST_SRCDIR into the equivalent of $G_TEST_BUILDDIR,
so that the tests can look in one location for everything.

    smcv

Reply via email to