Commit ad7959c5 authored by Colin Walters's avatar Colin Walters
Browse files

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
parent 91d7c8de
......@@ -18,6 +18,7 @@ TAGS
*.stp
*.exe
*.def
*.test
# autofoo stuff here
compile
......
......@@ -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"], [
......
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
......
......@@ -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);
}
......
......@@ -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);
......
......@@ -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);
......
......@@ -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);
}
......
......@@ -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 */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment