[gnome-logs/wip/test: 21/31] Add m4/behave-installed-tests.m4



commit 4775600c6b2229d9cfd2ca157104cde24e788dd4
Author: Rashi Aswani <aswanirashi19 gmail com>
Date:   Thu Aug 20 14:01:45 2015 +0530

    Add m4/behave-installed-tests.m4

 m4/behave-installed-tests.m4 |  138 ++++++++++++++++++++++++++++++++++++++++++
 tests/steps/general.py       |    6 ++
 2 files changed, 144 insertions(+), 0 deletions(-)
---
diff --git a/m4/behave-installed-tests.m4 b/m4/behave-installed-tests.m4
new file mode 100644
index 0000000..4feb82d
--- /dev/null
+++ b/m4/behave-installed-tests.m4
@@ -0,0 +1,138 @@
+# 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=644 $$feature $(EXEC_DIRECTORY);\
+       done
+       @for common_file in $(BEHAVE_COMMON_FILES); do                                                        
                  \
+           $(LIBTOOL) --mode=install $(INSTALL) --mode=644 $$common_file $(EXEC_DIRECTORY);\
+       done
+       @$(MKDIR_P) $(EXEC_DIRECTORY)/steps;
+       @for step_definition in $(BEHAVE_STEP_DEFINITION); do                                                 
                  \
+           $(LIBTOOL) --mode=install $(INSTALL) --mode=644 $$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])])
+])
+
diff --git a/tests/steps/general.py b/tests/steps/general.py
index b46afb8..9ddbde6 100644
--- a/tests/steps/general.py
+++ b/tests/steps/general.py
@@ -51,3 +51,9 @@ def press_back_button(context):
 def return_main_window(context):
     context.app.child('Window').sensitive
 
+ step('Help is shown')
+def help_shown(context):
+    sleep(1)
+    yelp = root.application('yelp')
+    assert yelp.child('./gnome-logs-behave-test') != None, "Yelp wasn't opened"
+


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]