aboutsummaryrefslogblamecommitdiffstats
path: root/m4/behave-installed-tests.m4
blob: 0a552f4ee8b371bdb2d19bfdf8d481dbb5db9051 (plain) (tree)












































































                                                                                             





                                                                                  




                                                                 



                                                                                                                                 
                                                                                         

                                                                                                                                 
                                                                                             


                                                                                                                                 
                                                                                                       







                                                                                                 
                                                                                                                 



















                                                                                                 
 





                                                                                   
  
# How to use the installed tests m4
#
#   Place BEHAVE_INSTALLED_TESTS somewhere in configure.ac
#
#   Writing your Makefile.am
#   ~~~~~~~~~~~~~~~~~~~~~~~~
#
#   Somewhere in your Makefile.am in this test directory, you need to declare
#   the following variables:
#
#       INSTALLED_TESTS=list of tags for tests to install
#       INSTALLED_TESTS_TYPE=session-exclusive
#
#   First the list of tests which should be installed, followed by
#   the type of test they should be configured as. The type can
#   be 'session' or 'session-exclusive'
#
#   More information about valid types can be found here:
#      https://wiki.gnome.org/GnomeGoals/InstalledTests
#
#   The last variable is optional, but can be useful to configure
#   your test program to run in the installed environment as opposed
#   to the normal `make check' run.
#
#   Then place this somewhere in your Makefile.am
#
#       @BEHAVE_INSTALLED_TESTS_RULE@
#
#   And the following in configure.ac
#
#       BEHAVE_INSTALLED_TESTS
#
#   And that's it, now your unit tests will be installed along with
#   a .test metadata file into $(pkglibexecdir) if --enable-installed-tests
#   is passed to your configure script, and will be run automatically
#   by the continuous integration servers.
#
#   FIXME: Change the above link to point to real documentation, not
#   a gnome goal page which might disappear at some point.
#
# BUGS: This macro hooks into install-exec-am and install-data-am
# which are internals of Automake. This is because Automake doesnt
# consider the regular install-exec-local / install-exec-hook or
# data install components unless variables have been setup for them
# in advance.
#
# This doesnt seem to present a problem, but it is depending on
# internals of Automake instead of clear documented API.

# Place this in configure.ac to enable
# the installed tests option.

AC_DEFUN([BEHAVE_INSTALLED_TESTS], [
AC_PREREQ([2.50])dnl
AC_REQUIRE([AM_NLS])dnl

  AC_PROG_INSTALL
  AC_PROG_MKDIR_P
  AC_PROG_LIBTOOL

  AC_ARG_ENABLE(installed-tests,
        [AC_HELP_STRING([--enable-installed-tests],
                [enable installed unit tests [default=no]])],,
        [enable_installed_tests="no"])

  AM_CONDITIONAL([BEHAVE_INSTALLED_TESTS_ENABLED],[test "x$enable_installed_tests" = "xyes"])
  AC_SUBST([BEHAVE_INSTALLED_TESTS_ENABLED], [$enable_installed_tests])

  # Define the rule for makefiles
  BEHAVE_INSTALLED_TESTS_RULE='

ifeq ($(BEHAVE_INSTALLED_TESTS_ENABLED),yes)

install-exec-am: installed-tests-exec-hook
install-data-am: installed-tests-data-hook
uninstall-am: uninstall-tests-hook

META_DIRECTORY=${DESTDIR}${datadir}/installed-tests/${PACKAGE}
EXEC_DIRECTORY=${DESTDIR}${pkglibexecdir}/installed-tests

BEHAVE_FEATURES=$(wildcard $(srcdir)/tests/*.feature)
BEHAVE_STEP_DEFINITION=$(wildcard $(srcdir)/tests/steps/*.py)
BEHAVE_COMMON_FILES=$(srcdir)/tests/environment.py $(srcdir)/tests/common_steps.py

FINAL_TEST_ENVIRONMENT=
ifneq ($(INSTALLED_TESTS_ENVIRONMENT),)
      FINAL_TEST_ENVIRONMENT="env $(INSTALLED_TESTS_ENVIRONMENT)"
endif

installed-tests-exec-hook:
    @$(MKDIR_P) $(EXEC_DIRECTORY);
    @for feature in $(BEHAVE_FEATURES); do                                          \
        $(LIBTOOL) --mode=install $(INSTALL) --mode=777 $$feature $(EXEC_DIRECTORY);\
    done
    @for common_file in $(BEHAVE_COMMON_FILES); do                                      \
        $(LIBTOOL) --mode=install $(INSTALL) --mode=777 $$common_file $(EXEC_DIRECTORY);\
    done
    @$(MKDIR_P) $(EXEC_DIRECTORY)/steps;
    @for step_definition in $(BEHAVE_STEP_DEFINITION); do                                   \
        $(LIBTOOL) --mode=install $(INSTALL) --mode=777 $$step_definition $(EXEC_DIRECTORY)/steps;\
    done


installed-tests-data-hook:
    @$(MKDIR_P) $(META_DIRECTORY);
    @for test in $(INSTALLED_TESTS); do                         \
        echo "Installing $$test.test to $(META_DIRECTORY)";                 \
        echo m4_escape([[Test]]) > $(META_DIRECTORY)/$$test.test;               \
        echo "Exec=behave $(pkglibexecdir)/installed-tests -t $$test -k -f html -o $$test.html -f plain"    \
                                               >> $(META_DIRECTORY)/$$test.test;        \
        echo "Type=$(INSTALLED_TESTS_TYPE)" >> $(META_DIRECTORY)/$$test.test;       \
    done

uninstall-tests-hook:
    @for feature in $(BEHAVE_FEATURES); do\
        echo "Removing feature $(EXEC_DIRECTORY) $$feature";\
        $(LIBTOOL) --mode=uninstall $(RM) $(EXEC_DIRECTORY)/$$feature;\
    done
    @for common_file in $(BEHAVE_COMMON_FILES); do\
        echo "Removing feature $(EXEC_DIRECTORY) $$common_file";\
        $(LIBTOOL) --mode=uninstall $(RM) $(EXEC_DIRECTORY)/$$common_file;\
    done
    @for step_definition in $(BEHAVE_STEP_DEFINITION); do\
        echo "Removing feature $(EXEC_DIRECTORY)/steps $$step_definition";\
        $(LIBTOOL) --mode=uninstall $(RM) $(EXEC_DIRECTORY)/steps/$$step_definition;\
    done
    @for test in $(INSTALLED_TESTS); do\
        $(LIBTOOL) --mode=uninstall $(RM) $(META_DIRECTORY)/$$test.test;\
    done

endif
'

  # substitute @BEHAVE_INSTALLED_TESTS_RULE@ in Makefiles
  AC_SUBST([BEHAVE_INSTALLED_TESTS_RULE])
  m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([BEHAVE_INSTALLED_TESTS_RULE])])
])