diff --git a/Makefile.am b/Makefile.am index 7258dce..aa6ab7d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,6 +3,6 @@ SUBDIRS = . data build-aux libqmi-glib cli utils docs ACLOCAL_AMFLAGS = -I m4 -DISTCHECK_CONFIGURE_FLAGS = \ - --with-tests=yes \ - --enable-gtk-doc +DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc + +EXTRA_DIST = gtester.make diff --git a/cli/test/Makefile.am b/cli/test/Makefile.am index 1889fa8..edf73a9 100644 --- a/cli/test/Makefile.am +++ b/cli/test/Makefile.am @@ -1,7 +1,10 @@ +include $(top_srcdir)/gtester.make noinst_PROGRAMS = \ test-helpers +TEST_PROGS += $(noinst_PROGRAMS) + test_helpers_SOURCES = \ test-helpers.c \ $(top_srcdir)/cli/qmicli-helpers.h \ @@ -19,10 +22,3 @@ test_helpers_CPPFLAGS = \ test_helpers_LDADD = \ $(QMICLI_LIBS) \ $(top_builddir)/libqmi-glib/libqmi-glib.la - -if WITH_TESTS - -check-local: test-helpers - $(abs_builddir)/test-helpers - -endif diff --git a/configure.ac b/configure.ac index 949e4c3..356fbba 100644 --- a/configure.ac +++ b/configure.ac @@ -86,18 +86,6 @@ AC_SUBST(GLIB_MKENUMS) dnl Documentation GTK_DOC_CHECK(1.0) -dnl Tests -AC_ARG_WITH(tests, AS_HELP_STRING([--with-tests], [Build libqmi tests])) -AM_CONDITIONAL(WITH_TESTS, test "x$with_tests" = "xyes") -case $with_tests in - yes) - with_tests=yes - ;; - *) - with_tests=no - ;; -esac - AC_CONFIG_FILES([Makefile data/Makefile data/pkg-config/Makefile @@ -125,6 +113,5 @@ echo " compiler: ${CC} cflags: ${CFLAGS} Maintainer mode: ${USE_MAINTAINER_MODE} - Tests: ${with_tests} Documentation: ${enable_gtk_doc} " diff --git a/gtester.make b/gtester.make new file mode 100644 index 0000000..40348dc --- /dev/null +++ b/gtester.make @@ -0,0 +1,91 @@ + +GTESTER = gtester +GTESTER_REPORT = gtester-report + +# 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}" || G_DEBUG=gc-friendly 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 ; \ + echo '' >> $@.xml ; \ + echo '' >> $@.xml ; \ + echo ' $(PACKAGE)' >> $@.xml ; \ + echo ' $(VERSION)' >> $@.xml ; \ + echo " $$REVISION" >> $@.xml ; \ + echo '' >> $@.xml ; \ + for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \ + sed '1,1s/^?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \ + done ; \ + echo >> $@.xml ; \ + echo '' >> $@.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 + @echo "file://$(abs_top_builddir)/glib-lcov/index.html" + +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 diff --git a/libqmi-glib/test/Makefile.am b/libqmi-glib/test/Makefile.am index 029db51..c312697 100644 --- a/libqmi-glib/test/Makefile.am +++ b/libqmi-glib/test/Makefile.am @@ -1,8 +1,12 @@ +include $(top_srcdir)/gtester.make noinst_PROGRAMS = \ test-utils \ test-message +TEST_PROGS += $(noinst_PROGRAMS) + + test_utils_SOURCES = \ test-utils.c test_utils_CPPFLAGS = \ @@ -30,11 +34,3 @@ test_message_CPPFLAGS = \ test_message_LDADD = \ $(top_builddir)/libqmi-glib/libqmi-glib.la \ $(LIBQMI_GLIB_LIBS) - -if WITH_TESTS - -check-local: test-utils test-message - $(abs_builddir)/test-utils - $(abs_builddir)/test-message - -endif