[test] Switch to automake-based test-runner
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 27 May 2011 06:44:29 +0000 (02:44 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 27 May 2011 07:40:04 +0000 (03:40 -0400)
Adds check-valgrind among other modes.  We do not run under gtester by
default anymore.

Makefile.am
test/.valgrind-suppressions [new file with mode: 0644]
test/Makefile.am
test/Makefile.decl [deleted file]

index 446c18a..12a42e6 100644 (file)
@@ -1,3 +1,5 @@
+# Process this file with automake to produce Makefile.in
+
 NULL =
 
 SUBDIRS = src test
diff --git a/test/.valgrind-suppressions b/test/.valgrind-suppressions
new file mode 100644 (file)
index 0000000..e69de29
index 63f1396..4d6c460 100644 (file)
@@ -1,6 +1,7 @@
-include Makefile.decl
+# Process this file with automake to produce Makefile.in
 
 NULL =
+EXTRA_DIST =
 CLEANFILES =
 DISTCLEANFILES =
 MAINTAINERCLEANFILES =
@@ -14,7 +15,7 @@ EXTRA_DIST += hb-test.h
 check_PROGRAMS = $(TEST_PROGS)
 noinst_PROGRAMS = $(TEST_PROGS)
 
-TEST_PROGS += \
+TEST_PROGS = \
        test-blob \
        test-buffer \
        test-common \
@@ -65,6 +66,47 @@ CLEANFILES += symbols-tested.txt symbols-exported.txt symbols-untested.txt
 test-symbols: symbols-untested.txt
        @! cat $^ | grep .
 
+TESTS = $(TEST_PROGS)
+TESTS_ENVIRONMENT = \
+       MALLOC_CHECK_=2 \
+       MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) \
+       G_DEBUG=gc-friendly \
+       G_SLICE=always-malloc \
+       $(ENV)
+
+# check-tool: Run tests under $(TOOL)
+check-tool:
+       $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) check \
+       TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) $(top_builddir)/libtool --mode=execute \
+       env $(TOOL)'
+# check-tool-raw: Run tests under $(TOOL), but don't run under libtool
+check-tool-raw:
+       $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) check \
+       TESTS_ENVIRONMENT='$(TESTS_ENVIRONMENT) \
+       env $(TOOL)'
+
+# check-gtester: Run tests under gtester
+GTESTER = gtester
+check-gtester:
+       $(AM_V_at)$(MAKE) $(AM_MAKEFLGS) check-tool-raw TOOL="$(GTESTER) --verbose"
+
+# Check tests under valgrind.  Saves log to valgrind-log
+VALGRIND_FLAGS = \
+       --tool=memcheck --suppressions=$(srcdir)/.valgrind-suppressions \
+       --track-origins=yes \
+       --leak-check=yes
+       $(EXTRA_VALGRIND_FLAGS)
+#      Can't do for now: --show-reachable=yes
+CLEANFILES +=  valgrind-log
+valgrind_verbose = $(valgrind_verbose_$(V))
+valgrind_verbose_ = $(valgrind_verbose_$(AM_DEFAULT_VERBOSITY))
+valgrind_verbose_0 = | \
+       grep '\(^[^=]\|ERROR SUMMARY\|definitely lost\|indirectly lost\)' | grep -v ': 0'
+
+check-valgrind:
+       $(AM_V_at)$(MAKE) $(AM_MAKEFLGS) check-tool TOOL="valgrind $(VALGRIND_FLAGS)" \
+       2>&1 | tee valgrind-log $(valgrind_verbose)
+
 
 else
 check-am:
@@ -72,6 +114,6 @@ check-am:
        @exit 77
 endif
 
-.PHONY: test-symbols
+.PHONY: test-symbols check-tool check-valgrind
 
 -include $(top_srcdir)/git.mk
diff --git a/test/Makefile.decl b/test/Makefile.decl
deleted file mode 100644 (file)
index c226169..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-GTESTER = gtester                      # for non-GLIB packages
-#GTESTER = $(top_builddir)/glib/gtester                        # for the GLIB package
-#GTESTER_REPORT = $(top_builddir)/glib/gtester-report  # for the GLIB package
-
-# initialize variables for unconditional += appending
-EXTRA_DIST =
-TEST_PROGS =
-
-### testing rules
-
-# test: run all tests in cwd and subdirs
-test: test-nonrecursive
-       @ for subdir in $(SUBDIRS) . ; do \
-           test "$$subdir" = "." -o "$$subdir" = "po" || \
-           ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
-         done
-
-# test-nonrecursive: run tests only in cwd
-test-nonrecursive: ${TEST_PROGS}
-       @test -z "${TEST_PROGS}" || MALLOC_CHECK_=2 MALLOC_PERTURB_=$$(($${RANDOM:-256} % 256)) ${GTESTER} --verbose ${TEST_PROGS}
-
-# test-report: run tests in subdirs and generate report
-# perf-report: run tests in subdirs with -m perf and generate report
-# full-report: like test-report: with -m perf and -m slow
-test-report perf-report full-report:   ${TEST_PROGS}
-       @test -z "${TEST_PROGS}" || { \
-         case $@ in \
-         test-report) test_options="-k";; \
-         perf-report) test_options="-k -m=perf";; \
-         full-report) test_options="-k -m=perf -m=slow";; \
-         esac ; \
-         if test -z "$$GTESTER_LOGDIR" ; then  \
-           ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
-         elif test -n "${TEST_PROGS}" ; then \
-           ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
-         fi ; \
-       }
-       @ ignore_logdir=true ; \
-         if test -z "$$GTESTER_LOGDIR" ; then \
-           GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
-           ignore_logdir=false ; \
-         fi ; \
-         if test -d "$(top_srcdir)/.git" ; then \
-           REVISION=`git describe` ; \
-         else \
-           REVISION=$(VERSION) ; \
-         fi ; \
-         for subdir in $(SUBDIRS) . ; do \
-           test "$$subdir" = "." -o "$$subdir" = "po" || \
-           ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
-         done ; \
-         $$ignore_logdir || { \
-           echo '<?xml version="1.0"?>'              > $@.xml ; \
-           echo '<report-collection>'               >> $@.xml ; \
-           echo '<info>'                            >> $@.xml ; \
-           echo '  <package>$(PACKAGE)</package>'   >> $@.xml ; \
-           echo '  <version>$(VERSION)</version>'   >> $@.xml ; \
-           echo "  <revision>$$REVISION</revision>" >> $@.xml ; \
-           echo '</info>'                           >> $@.xml ; \
-           for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
-             sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
-           done ; \
-           echo >> $@.xml ; \
-           echo '</report-collection>' >> $@.xml ; \
-           rm -rf "$$GTESTER_LOGDIR"/ ; \
-           ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
-         }
-.PHONY: test test-report perf-report full-report test-nonrecursive
-
-.PHONY: lcov genlcov lcov-clean
-# use recursive makes in order to ignore errors during check
-lcov:
-       -$(MAKE) $(AM_MAKEFLAGS) -k check
-       $(MAKE) $(AM_MAKEFLAGS) genlcov
-
-# we have to massage the lcov.info file slightly to hide the effect of libtool
-# placing the objects files in the .libs/ directory separate from the *.c
-# we also have to delete tests/.libs/libmoduletestplugin_*.gcda
-genlcov:
-       rm -f $(top_builddir)/tests/.libs/libmoduletestplugin_*.gcda
-       $(LTP) --directory $(top_builddir) --capture --output-file glib-lcov.info --test-name GLIB_PERF --no-checksum --compat-libtool
-       LANG=C $(LTP_GENHTML) --prefix $(top_builddir) --output-directory glib-lcov --title "GLib Code Coverage" --legend --show-details glib-lcov.info
-
-lcov-clean:
-       -$(LTP) --directory $(top_builddir) -z
-       -rm -rf glib-lcov.info glib-lcov
-       -find -name '*.gcda' -print | xargs rm
-
-# run tests in cwd as part of make check
-check-local: test-nonrecursive