Add --enable-installed-tests configure option

See https://live.gnome.org/GnomeGoals/InstalledTests for more
information.

The tests now support being run both uninstalled and installed, so
'make check' works for those who want it.  For tests which need data
files, the way this works is they look in the compiled in value of
SRCDIR by default, and the generated tests use "env G_TEST_DATA=" to
override that.

This patch only converts glib/tests for now; if this patch looks good,
I'll do the rest of the tests.

https://bugzilla.gnome.org/show_bug.cgi?id=699079
This commit is contained in:
Colin Walters 2013-05-06 09:47:00 -04:00
parent 91d7c8de6b
commit ad7959c5b7
8 changed files with 111 additions and 22 deletions

1
.gitignore vendored
View File

@ -18,6 +18,7 @@ TAGS
*.stp
*.exe
*.def
*.test
# autofoo stuff here
compile

View File

@ -258,7 +258,12 @@ AC_ARG_ENABLE(modular_tests,
AS_HELP_STRING([--disable-modular-tests],
[Disable build of test programs (default: no)]),,
[enable_modular_tests=yes])
AM_CONDITIONAL(BUILD_MODULAR_TESTS, test x$enable_modular_tests = xyes)
AC_ARG_ENABLE(installed_tests,
AS_HELP_STRING([--enable-installed-tests],
[Install test programs (default: no)]),,
[enable_installed_tests=no])
AM_CONDITIONAL(BUILD_MODULAR_TESTS, test x$enable_modular_tests = xyes || test x$enable_installed_tests=xyes)
AM_CONDITIONAL(BUILDOPT_INSTALL_TESTS, test x$enable_installed_tests = xyes)
AC_MSG_CHECKING([whether to enable garbage collector friendliness])
AS_IF([test "x$enable_gc_friendly" = "xyes"], [

View File

@ -1,6 +1,8 @@
include $(top_srcdir)/Makefile.decl
NULL =
insttestdir=$(pkglibexecdir)/installed-tests
bookmark_test_files = \
bookmarks/fail-01.xbel \
bookmarks/fail-02.xbel \
@ -65,7 +67,12 @@ AM_CFLAGS = $(GLIB_WARN_CFLAGS)
LDADD = $(top_builddir)/glib/libglib-2.0.la -lm
TEST_PROGS += \
TEST_PROGS += \
1bit-emufutex \
gwakeup \
$(NULL)
all_test_programs = \
array-test \
asyncqueue \
atomic \
@ -86,7 +93,6 @@ TEST_PROGS += \
fileutils \
gdatetime \
gvariant \
gwakeup \
hash \
hmac \
hook \
@ -137,11 +143,43 @@ TEST_PROGS += \
unicode \
uri \
1bit-mutex \
1bit-emufutex \
642026 \
642026-ec
noinst_PROGRAMS = $(TEST_PROGS) test-spawn-echo
if OS_UNIX
all_test_programs += unix
all_test_programs += include
endif
extra_test_binaries = test-spawn-echo
if BUILD_MODULAR_TESTS
TEST_PROGS += $(all_test_programs)
noinst_PROGRAMS = $(TEST_PROGS) $(extra_test_binaries)
endif
if BUILDOPT_INSTALL_TESTS
insttest_PROGRAMS = $(all_test_programs) $(extra_test_binaries)
testmetadir = $(datadir)/installed-tests/$(PACKAGE)
testmeta_DATA = $(all_test_programs:=.test)
testdatadir=$(insttestdir)
testdata_DATA = $(test_files)
testdata_SCRIPTS = $(test_script_files)
bookmarksdir=$(insttestdir)/bookmarks
bookmarks_DATA = $(bookmark_test_files)
markupsdir=$(insttestdir)/markups
markups_DATA = $(all_markup_test_files)
endif
%.test: % Makefile
$(AM_V_GEN) (echo '[Test]' > $@.tmp; \
echo 'Type=session' >> $@.tmp; \
echo 'Exec=env G_TEST_DATA=$(pkglibexecdir)/installed-tests $(pkglibexecdir)/installed-tests/$<' >> $@.tmp; \
mv $@.tmp $@)
atomic_CFLAGS = $(AM_CFLAGS)
if HAVE_GCC
@ -164,9 +202,6 @@ endif
if OS_UNIX
TEST_PROGS += unix
TEST_PROGS += include
# some testing of gtester functionality
XMLLINT = xmllint

View File

@ -268,6 +268,7 @@ main (int argc, char *argv[])
GError *error;
const gchar *name;
gchar *path;
const gchar *datapath;
g_test_init (&argc, &argv, NULL);
@ -278,12 +279,18 @@ main (int argc, char *argv[])
}
error = NULL;
dir = g_dir_open (SRCDIR "/bookmarks", 0, &error);
if (g_getenv ("G_TEST_DATA"))
datapath = g_getenv ("G_TEST_DATA");
else
datapath = SRCDIR;
path = g_build_filename (datapath, "bookmarks", NULL);
dir = g_dir_open (path, 0, &error);
g_free (path);
g_assert_no_error (error);
while ((name = g_dir_read_name (dir)) != NULL)
{
path = g_strdup_printf ("/bookmarks/parse/%s", name);
g_test_add_data_func_full (path, g_build_filename (SRCDIR, "bookmarks", name, NULL),
g_test_add_data_func_full (path, g_build_filename (datapath, "bookmarks", name, NULL),
test_file, g_free);
g_free (path);
}

View File

@ -3,6 +3,8 @@
#include <string.h>
#include <stdlib.h>
static const gchar *datapath;
static GKeyFile *
load_data (const gchar *data,
GKeyFileFlags flags)
@ -1337,10 +1339,13 @@ test_load_fail (void)
{
GKeyFile *file;
GError *error;
gchar *path;
file = g_key_file_new ();
error = NULL;
g_assert (!g_key_file_load_from_file (file, SRCDIR "/keyfile.c", 0, &error));
path = g_build_filename (datapath, "keyfile.c", NULL);
g_assert (!g_key_file_load_from_file (file, path, 0, &error));
g_free (path);
g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE);
g_clear_error (&error);
g_assert (!g_key_file_load_from_file (file, "/nosuchfile", 0, &error));
@ -1395,6 +1400,7 @@ test_page_boundary (void)
GKeyFile *file;
GError *error;
gint i;
gchar *path;
#define GROUP "main_section"
#define KEY_PREFIX "fill_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw_"
@ -1407,7 +1413,9 @@ test_page_boundary (void)
file = g_key_file_new ();
error = NULL;
g_key_file_load_from_file (file, SRCDIR "/pages.ini", G_KEY_FILE_NONE, &error);
path = g_build_filename (datapath, "pages.ini", NULL);
g_key_file_load_from_file (file, path, G_KEY_FILE_NONE, &error);
g_free (path);
g_assert_no_error (error);
for (i = FIRST_KEY; i <= LAST_KEY; i++)
@ -1569,8 +1577,13 @@ test_roundtrip (void)
int
main (int argc, char *argv[])
{
if (g_getenv ("G_TEST_DATA"))
datapath = g_getenv ("G_TEST_DATA");
else
datapath = SRCDIR;
#ifdef G_OS_UNIX
g_setenv ("XDG_DATA_HOME", SRCDIR, TRUE);
g_setenv ("XDG_DATA_HOME", datapath, TRUE);
#endif
g_test_init (&argc, &argv, NULL);

View File

@ -11,14 +11,19 @@
#include <sys/types.h>
#include <fcntl.h>
static const gchar *datapath;
static void
test_basic (void)
{
GMappedFile *file;
GError *error;
gchar *path;
error = NULL;
file = g_mapped_file_new (SRCDIR "/empty", FALSE, &error);
path = g_build_filename (datapath, "empty", NULL);
file = g_mapped_file_new (path, FALSE, &error);
g_free (path);
g_assert_no_error (error);
g_mapped_file_ref (file);
@ -32,9 +37,12 @@ test_empty (void)
{
GMappedFile *file;
GError *error;
gchar *path;
error = NULL;
file = g_mapped_file_new (SRCDIR "/empty", FALSE, &error);
path = g_build_filename (datapath, "empty", NULL);
file = g_mapped_file_new (path, FALSE, &error);
g_free (path);
g_assert_no_error (error);
g_assert (g_mapped_file_get_contents (file) == NULL);
@ -82,7 +90,7 @@ test_writable (void)
char *srcpath;
gchar *tmp_copy_path;
srcpath = g_build_filename (SRCDIR, "4096-random-bytes", NULL);
srcpath = g_build_filename (datapath, "4096-random-bytes", NULL);
tmp_copy_path = g_build_filename (g_get_user_runtime_dir (), "glib-test-4096-random-bytes", NULL);
g_file_get_contents (srcpath, &contents, &len, &error);
@ -129,7 +137,7 @@ test_writable_fd (void)
char *srcpath;
gchar *tmp_copy_path;
srcpath = g_build_filename (SRCDIR, "4096-random-bytes", NULL);
srcpath = g_build_filename (datapath, "4096-random-bytes", NULL);
tmp_copy_path = g_build_filename (g_get_user_runtime_dir (), "glib-test-4096-random-bytes", NULL);
g_file_get_contents (srcpath, &contents, &len, &error);
@ -174,9 +182,12 @@ test_gbytes (void)
GMappedFile *file;
GBytes *bytes;
GError *error;
gchar *path;
error = NULL;
file = g_mapped_file_new (SRCDIR "/empty", FALSE, &error);
path = g_build_filename (datapath, "empty", NULL);
file = g_mapped_file_new (path, FALSE, &error);
g_free (path);
g_assert_no_error (error);
bytes = g_mapped_file_get_bytes (file);
@ -189,6 +200,11 @@ test_gbytes (void)
int
main (int argc, char *argv[])
{
if (g_getenv ("G_TEST_DATA"))
datapath = g_getenv ("G_TEST_DATA");
else
datapath = SRCDIR;
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/mappedfile/basic", test_basic);

View File

@ -8,6 +8,7 @@
static int depth = 0;
static GString *string;
static const gchar *datapath;
static void
indent (int extra)
@ -277,6 +278,11 @@ main (int argc, char *argv[])
const gchar *name;
gchar *path;
if (g_getenv ("G_TEST_DATA"))
datapath = g_getenv ("G_TEST_DATA");
else
datapath = SRCDIR;
g_setenv ("LANG", "en_US.utf-8", TRUE);
setlocale (LC_ALL, "");
@ -292,7 +298,9 @@ main (int argc, char *argv[])
}
error = NULL;
dir = g_dir_open (SRCDIR "/markups", 0, &error);
path = g_build_filename (datapath, "markups", NULL);
dir = g_dir_open (path, 0, &error);
g_free (path);
g_assert_no_error (error);
while ((name = g_dir_read_name (dir)) != NULL)
{
@ -300,7 +308,7 @@ main (int argc, char *argv[])
continue;
path = g_strdup_printf ("/markup/parse/%s", name);
g_test_add_data_func_full (path, g_build_filename (SRCDIR, "markups", name, NULL),
g_test_add_data_func_full (path, g_build_filename (datapath, "markups", name, NULL),
test_parse, g_free);
g_free (path);
}

View File

@ -30,6 +30,8 @@
#define pipe(fds) _pipe(fds, 4096, _O_BINARY)
#endif
static const char *argv0;
static void
debug (void)
{
@ -119,7 +121,7 @@ static void
test_message (void)
{
gchar* argv[] = {
"./protocol",
argv0,
NULL,
"--GTestSubprocess",
"-p", "/glib/testing/protocol/debug",
@ -239,7 +241,7 @@ test_error (void)
for (i = 0; i < G_N_ELEMENTS (tests); i++)
{
gchar* argv[] = {
"./protocol",
argv0,
NULL,
"--GTestSubprocess",
"-p", tests[i],
@ -336,6 +338,8 @@ int
main (int argc,
char**argv)
{
argv0 = argv[0];
g_test_init (&argc, &argv, NULL);
/* we use ourself as the testcase, these are the ones we need internally */