aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2012-01-23 08:55:12 -0600
committerCharles Kerr <charles.kerr@canonical.com>2012-01-23 08:55:12 -0600
commit95daf102dac37a69686f8a86bf7fe47cd442c7d6 (patch)
tree3891a7075873c6eeb320fe0c8a572ca14655f5af
parent4f4190f71f8495e5bcf6779d73157931572e42ac (diff)
parent1cf6a9761db8beefc8d2a73c2cf9903264424c66 (diff)
downloadlibayatana-indicator-95daf102dac37a69686f8a86bf7fe47cd442c7d6.tar.gz
libayatana-indicator-95daf102dac37a69686f8a86bf7fe47cd442c7d6.tar.bz2
libayatana-indicator-95daf102dac37a69686f8a86bf7fe47cd442c7d6.zip
"bzr merge lp:indicator" + conflict resolution in tests suite
-rw-r--r--.bzrignore9
-rw-r--r--Makefile.am45
-rw-r--r--configure.ac19
-rw-r--r--libindicator/Makefile.am4
-rw-r--r--libindicator/indicator-object.c35
-rw-r--r--libindicator/indicator-object.h2
-rw-r--r--libindicator/indicator3-0.4.pc.in.in2
-rw-r--r--m4/gcov.m482
-rw-r--r--tests/Makefile.am26
-rw-r--r--tests/dummy-indicator-entry-func.c130
-rw-r--r--tests/dummy-indicator-entry-func.h56
-rw-r--r--tests/test-loader.c74
12 files changed, 477 insertions, 7 deletions
diff --git a/.bzrignore b/.bzrignore
index 5f78c4a..7da05f5 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -172,3 +172,12 @@ libindicator/s-enum-types-h
libindicator/gen-indicator-service.xml.c
libindicator/gen-indicator-service.xml.h
libindicator/libindicator_la-gen-indicator-service.xml.lo
+libindicator/indicator-0.4.pc.in
+libindicator/indicator3-0.4.pc
+libindicator/indicator3-0.4.pc.in
+libindicator/libindicator3_la-gen-indicator-service.xml.lo
+tools/indicator-loader3
+libindicator-[0-9]*.[0-9]*.[0-9]*
+build-aux
+libdummy_indicator_entry_func_la-dummy-indicator-entry-func.lo
+libdummy-indicator-entry-func.la
diff --git a/Makefile.am b/Makefile.am
index 3bd312e..182cb2d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,13 +2,17 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = \
libindicator \
- tests \
tools
-tests: libindicator
-
tools: libindicator
+if WANT_TESTS
+SUBDIRS += \
+ tests
+
+tests: libindicator
+endif
+
DISTCHECK_CONFIGURE_FLAGS = --disable-deprecations
DISTCLEANFILES = \
@@ -40,3 +44,38 @@ dist-hook:
echo Failed to generate AUTHORS: not a branch >&2; \
fi
+
+# Coverage targets
+
+.PHONY: clean-gcda
+clean-gcda:
+ @echo Removing old coverage results
+ -find -name '*.gcda' -print | xargs -r rm
+
+.PHONY: coverage-html generate-coverage-html clean-coverage-html
+coverage-html: clean-gcda
+ -$(MAKE) $(AM_MAKEFLAGS) -k check
+ $(MAKE) $(AM_MAKEFLAGS) generate-coverage-html
+
+generate-coverage-html:
+ @echo Collecting coverage data
+ $(LCOV) --directory $(top_builddir) --capture --output-file coverage.info --no-checksum --compat-libtool
+ LANG=C $(GENHTML) --prefix $(top_builddir) --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info
+
+clean-coverage-html: clean-gcda
+ -$(LCOV) --directory $(top_builddir) -z
+ -rm -rf coverage.info coveragereport
+
+.PHONY: coverage-xml generate-coverage-xml clean-coverage-xml
+coverage-xml: clean-gcda
+ -$(MAKE) $(AM_MAKEFLAGS) -k check
+ $(MAKE) $(AM_MAKEFLAGS) generate-coverage-xml
+
+generate-coverage-xml:
+ @echo Generating coverage XML report
+ $(GCOVR) -x -r $(top_builddir) -o $(top_builddir)/coverage.xml
+
+clean-coverage-xml: clean-gcda
+ -rm -rf $(top_builddir)/coverage.xml
+
+clean-local: clean-coverage-html clean-coverage-xml
diff --git a/configure.ac b/configure.ac
index 2357f13..4710901 100644
--- a/configure.ac
+++ b/configure.ac
@@ -108,6 +108,14 @@ AC_DEFINE_PATH(SYSCONFDIR, "${sysconfdir}", [system configuration dir])
AC_DEFINE_PATH(LIBDIR, "${libdir}", [system configuration dir])
#########################
+# Check if build tests
+#########################
+AC_ARG_ENABLE([tests],
+ AC_HELP_STRING([--disable-tests], [disable tests]),,
+ [enable_tests=yes])
+AM_CONDITIONAL([WANT_TESTS], [test "x$enable_tests" != "xno"])
+
+#########################
# Debug symbols
#########################
AC_ARG_ENABLE([debug],
@@ -122,6 +130,15 @@ fi
AM_CONDITIONAL(ENABLE_DEBUG, test "$enable_debug" = "yes")
###########################
+# gcov coverage reporting
+###########################
+m4_include([m4/gcov.m4])
+AC_TDD_GCOV
+AC_SUBST(COVERAGE_CFLAGS)
+AC_SUBST(COVERAGE_CXXFLAGS)
+AC_SUBST(COVERAGE_LDFLAGS)
+
+###########################
# Files
###########################
@@ -146,5 +163,7 @@ Libindicator Configuration:
Prefix: $prefix
GTK+ Version: $with_gtk
+ Enable tests: $enable_tests
Enable debugging: $enable_debug
+ Coverage reporting: $use_gcov
])
diff --git a/libindicator/Makefile.am b/libindicator/Makefile.am
index 53f9985..b574519 100644
--- a/libindicator/Makefile.am
+++ b/libindicator/Makefile.am
@@ -26,7 +26,7 @@ CLEANFILES += indicator$(VER)-0.$(INDICATOR_API_VERSION).pc
include $(top_srcdir)/Makefile.am.marshal
-libindicatorincludedir=$(includedir)/libindicator-0.$(INDICATOR_API_VERSION)/libindicator
+libindicatorincludedir=$(includedir)/libindicator$(VER)-0.$(INDICATOR_API_VERSION)/libindicator
indicator_headers = \
indicator.h \
@@ -55,6 +55,7 @@ libindicator_la_SOURCES = \
libindicator_la_CFLAGS = \
$(LIBINDICATOR_CFLAGS) \
+ $(COVERAGE_CFLAGS) \
-DG_LOG_DOMAIN=\"libindicator\" \
-Wall -Werror
@@ -62,6 +63,7 @@ libindicator_la_LIBADD = \
$(LIBINDICATOR_LIBS)
libindicator_la_LDFLAGS = \
+ $(COVERAGE_LDFLAGS) \
-version-info $(INDICATOR_ABI_VERSION):0:0 \
-no-undefined \
-export-symbols-regex "^[^_].*"
diff --git a/libindicator/indicator-object.c b/libindicator/indicator-object.c
index 8deb706..a35a2fa 100644
--- a/libindicator/indicator-object.c
+++ b/libindicator/indicator-object.c
@@ -144,6 +144,10 @@ indicator_object_class_init (IndicatorObjectClass *klass)
klass->entry_being_removed = entry_being_removed_default;
klass->entry_was_added = entry_was_added_default;
+ klass->entry_activate = NULL;
+ klass->entry_activate_window = NULL;
+ klass->entry_close = NULL;
+
/**
IndicatorObject::entry-added:
@arg0: The #IndicatorObject object
@@ -669,6 +673,37 @@ indicator_object_get_show_now (IndicatorObject * io, IndicatorObjectEntry * entr
}
/**
+ indicator_object_entry_activate_window:
+ @io: #IndicatorObject to query
+ @entry: The #IndicatorObjectEntry whose entry was shown
+ @windowid: ID of the window that is currently focused (or will
+ be very shortly)
+ @timestamp: The X11 timestamp of the event
+
+ Used to signal to the indicator that the menu on an entry has
+ been clicked on. This can either be an activate or a showing
+ of the menu. Also includes a window ID so that we can know what
+ application is going to be getting focused soon. If there is
+ no override of this function, it is the same as calling
+ indicator_object_entry_activate and in general is preferable
+ if you have that information available.
+*/
+void
+indicator_object_entry_activate_window (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp)
+{
+ g_return_if_fail(INDICATOR_IS_OBJECT(io));
+ IndicatorObjectClass * class = INDICATOR_OBJECT_GET_CLASS(io);
+
+ if (class->entry_activate_window != NULL) {
+ return class->entry_activate_window(io, entry, windowid, timestamp);
+ } else {
+ indicator_object_entry_activate(io, entry, timestamp);
+ }
+
+ return;
+}
+
+/**
indicator_object_entry_activate:
@io: #IndicatorObject to query
@entry: The #IndicatorObjectEntry whose entry was shown
diff --git a/libindicator/indicator-object.h b/libindicator/indicator-object.h
index 803f1b3..ca78437 100644
--- a/libindicator/indicator-object.h
+++ b/libindicator/indicator-object.h
@@ -130,6 +130,7 @@ struct _IndicatorObjectClass {
void (*entry_was_added) (IndicatorObject * io, IndicatorObjectEntry * entry);
void (*entry_activate) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp);
+ void (*entry_activate_window) (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp);
void (*entry_close) (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp);
/* Signals */
@@ -197,6 +198,7 @@ guint indicator_object_get_location (IndicatorObject * io, IndicatorObjectEntr
guint indicator_object_get_show_now (IndicatorObject * io, IndicatorObjectEntry * entry);
void indicator_object_set_visible (IndicatorObject * io, gboolean visible);
void indicator_object_entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp);
+void indicator_object_entry_activate_window (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp);
void indicator_object_entry_close (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp);
void indicator_object_set_environment (IndicatorObject * io, const GStrv env);
diff --git a/libindicator/indicator3-0.4.pc.in.in b/libindicator/indicator3-0.4.pc.in.in
index 1f34567..d4b5f0f 100644
--- a/libindicator/indicator3-0.4.pc.in.in
+++ b/libindicator/indicator3-0.4.pc.in.in
@@ -7,7 +7,7 @@ includedir=@includedir@
indicatordir=${libdir}/indicators3/@indicator_abi_version@/
iconsdir=@datarootdir@/@PACKAGE@/icons/
-Cflags: -I${includedir}/libindicator-0.@indicator_api_version@
+Cflags: -I${includedir}/libindicator3-0.@indicator_api_version@
Requires: gtk+-3.0
Libs: -lindicator3
diff --git a/m4/gcov.m4 b/m4/gcov.m4
new file mode 100644
index 0000000..9331cd3
--- /dev/null
+++ b/m4/gcov.m4
@@ -0,0 +1,82 @@
+# Checks for existence of coverage tools:
+# * gcov
+# * lcov
+# * genhtml
+# * gcovr
+#
+# Sets ac_cv_check_gcov to yes if tooling is present
+# and reports the executables to the variables LCOV, GCOVR and GENHTML.
+AC_DEFUN([AC_TDD_GCOV],
+[AC_CACHE_CHECK([whether code coverage tools are available], ac_cv_check_gcov,
+[
+AC_ARG_ENABLE(gcov,
+ AS_HELP_STRING([--enable-gcov],
+ [enable coverage testing with gcov]),
+ [use_gcov=$enableval], [use_gcov=no])
+
+ if test "x$use_gcov" = "xyes"; then
+ # we need gcc:
+ if test "$GCC" != "yes"; then
+ AC_MSG_ERROR([GCC is required for --enable-gcov])
+ fi
+
+ # Check if ccache is being used
+ AC_CHECK_PROG(SHTOOL, shtool, shtool)
+ case `$SHTOOL path $CC` in
+ *ccache*[)] gcc_ccache=yes;;
+ *[)] gcc_ccache=no;;
+ esac
+
+ if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
+ AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
+ fi
+
+ lcov_version_list="1.6 1.7 1.8 1.9"
+ AC_CHECK_PROG(LCOV, lcov, lcov)
+ AC_CHECK_PROG(GENHTML, genhtml, genhtml)
+ AC_CHECK_PROG(GCOVR, gcovr, gcovr)
+
+ if test "$LCOV"; then
+ AC_CACHE_CHECK([for lcov version], glib_cv_lcov_version, [
+ glib_cv_lcov_version=invalid
+ lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'`
+ for lcov_check_version in $lcov_version_list; do
+ if test "$lcov_version" = "$lcov_check_version"; then
+ glib_cv_lcov_version="$lcov_check_version (ok)"
+ fi
+ done
+ ])
+ else
+ lcov_msg="To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list"
+ AC_MSG_ERROR([$lcov_msg])
+ fi
+
+ case $glib_cv_lcov_version in
+ ""|invalid[)]
+ lcov_msg="You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version)."
+ AC_MSG_ERROR([$lcov_msg])
+ LCOV="exit 0;"
+ ;;
+ esac
+
+ if test -z "$GENHTML"; then
+ AC_MSG_ERROR([Could not find genhtml from the lcov package])
+ fi
+
+ if test -z "$GCOVR"; then
+ AC_MSG_ERROR([Could not find gcovr; easy_install (or pip) gcovr])
+ fi
+
+
+ # Remove all optimization flags from CFLAGS
+ changequote({,})
+ CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
+ changequote([,])
+
+ # Add the special gcc flags
+ COVERAGE_CFLAGS="-O0 -fprofile-arcs -ftest-coverage"
+ COVERAGE_CXXFLAGS="-O0 -fprofile-arcs -ftest-coverage"
+ COVERAGE_LDFLAGS="-lgcov"
+
+fi
+])]) # AC_TDD_GCOV
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a70ee58..9319087 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -15,7 +15,8 @@ lib_LTLIBRARIES = \
libdummy-indicator-null.la \
libdummy-indicator-signaler.la \
libdummy-indicator-simple.la \
- libdummy-indicator-visible.la
+ libdummy-indicator-visible.la \
+ libdummy-indicator-entry-func.la
DBUS_RUNNER=dbus-test-runner --dbus-config /usr/share/dbus-test-runner/session.conf
XVFB_RUN=". $(srcdir)/run-xvfb.sh"
@@ -163,6 +164,27 @@ libdummy_indicator_simple_la_LDFLAGS = \
-avoid-version
#############################
+# Dummy Indicator Entry Func
+#############################
+
+libdummy_indicator_entry_func_la_SOURCES = \
+ dummy-indicator-entry-func.c \
+ dummy-indicator-entry-func.h
+
+libdummy_indicator_entry_func_la_CFLAGS = \
+ -Wall -Werror \
+ $(LIBINDICATOR_CFLAGS) -I$(top_srcdir)
+
+libdummy_indicator_entry_func_la_LIBADD = \
+ $(LIBINDICATOR_LIBS) \
+ -L$(top_builddir)/libindicator/.libs \
+ $(INDICATOR_LIB)
+
+libdummy_indicator_entry_func_la_LDFLAGS = \
+ -module \
+ -avoid-version
+
+#############################
# Dummy Indicator Visible
#############################
@@ -433,7 +455,7 @@ DISTCLEANFILES += service-manager-connect-nostart-tester
XML_REPORT = loader-check-results.xml
HTML_REPORT = loader-check-results.html
-loader-tester: test-loader libdummy-indicator-null.la libdummy-indicator-simple.la Makefile
+loader-tester: test-loader libdummy-indicator-null.la libdummy-indicator-simple.la libdummy-indicator-entry-func.la Makefile
@echo "#!/bin/bash" > loader-tester
@echo $(XVFB_RUN) >> $@
@echo gtester -k --verbose -o=$(XML_REPORT) ./test-loader >> loader-tester
diff --git a/tests/dummy-indicator-entry-func.c b/tests/dummy-indicator-entry-func.c
new file mode 100644
index 0000000..96e5ad0
--- /dev/null
+++ b/tests/dummy-indicator-entry-func.c
@@ -0,0 +1,130 @@
+/*
+Test for libindicator
+
+Copyright 2012 Canonical Ltd.
+
+Authors:
+ Ted Gould <ted@canonical.com>
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+version 3.0 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License version 3.0 for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library. If not, see
+<http://www.gnu.org/licenses/>.
+*/
+
+#include "dummy-indicator-entry-func.h"
+
+
+GType dummy_indicator_entry_func_get_type (void);
+
+INDICATOR_SET_VERSION
+INDICATOR_SET_TYPE(DUMMY_INDICATOR_ENTRY_FUNC_TYPE)
+
+
+GtkLabel *
+get_label (IndicatorObject * io)
+{
+ return NULL;
+}
+
+GtkImage *
+get_icon (IndicatorObject * io)
+{
+ return NULL;
+}
+
+GtkMenu *
+get_menu (IndicatorObject * io)
+{
+ return NULL;
+}
+const gchar *
+get_accessible_desc (IndicatorObject * io)
+{
+ return NULL;
+}
+
+static void
+entry_activate (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp)
+{
+ DummyIndicatorEntryFunc * self = DUMMY_INDICATOR_ENTRY_FUNC(io);
+ self->entry_activate_called = TRUE;
+ return;
+}
+
+static void
+entry_activate_window (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp)
+{
+ DummyIndicatorEntryFunc * self = DUMMY_INDICATOR_ENTRY_FUNC(io);
+ self->entry_activate_window_called = TRUE;
+ return;
+}
+
+static void
+entry_close (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp)
+{
+ DummyIndicatorEntryFunc * self = DUMMY_INDICATOR_ENTRY_FUNC(io);
+ self->entry_close_called = TRUE;
+ return;
+}
+
+
+static void dummy_indicator_entry_func_class_init (DummyIndicatorEntryFuncClass *klass);
+static void dummy_indicator_entry_func_init (DummyIndicatorEntryFunc *self);
+static void dummy_indicator_entry_func_dispose (GObject *object);
+static void dummy_indicator_entry_func_finalize (GObject *object);
+
+G_DEFINE_TYPE (DummyIndicatorEntryFunc, dummy_indicator_entry_func, INDICATOR_OBJECT_TYPE);
+
+static void
+dummy_indicator_entry_func_class_init (DummyIndicatorEntryFuncClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = dummy_indicator_entry_func_dispose;
+ object_class->finalize = dummy_indicator_entry_func_finalize;
+
+ IndicatorObjectClass * io_class = INDICATOR_OBJECT_CLASS(klass);
+
+ io_class->get_label = get_label;
+ io_class->get_image = get_icon;
+ io_class->get_menu = get_menu;
+ io_class->get_accessible_desc = get_accessible_desc;
+
+ io_class->entry_activate = entry_activate;
+ io_class->entry_activate_window = entry_activate_window;
+ io_class->entry_close = entry_close;
+
+ return;
+}
+
+static void
+dummy_indicator_entry_func_init (DummyIndicatorEntryFunc *self)
+{
+
+ return;
+}
+
+static void
+dummy_indicator_entry_func_dispose (GObject *object)
+{
+
+ G_OBJECT_CLASS (dummy_indicator_entry_func_parent_class)->dispose (object);
+ return;
+}
+
+static void
+dummy_indicator_entry_func_finalize (GObject *object)
+{
+
+ G_OBJECT_CLASS (dummy_indicator_entry_func_parent_class)->finalize (object);
+ return;
+}
diff --git a/tests/dummy-indicator-entry-func.h b/tests/dummy-indicator-entry-func.h
new file mode 100644
index 0000000..f5c8264
--- /dev/null
+++ b/tests/dummy-indicator-entry-func.h
@@ -0,0 +1,56 @@
+/*
+Test for libindicator
+
+Copyright 2012 Canonical Ltd.
+
+Authors:
+ Ted Gould <ted@canonical.com>
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+version 3.0 as published by the Free Software Foundation.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License version 3.0 for more details.
+
+You should have received a copy of the GNU General Public
+License along with this library. If not, see
+<http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __DUMMY_INDICATOR_ENTRY_FUNC__
+#define __DUMMY_INDICATOR_ENTRY_FUNC__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include "libindicator/indicator.h"
+#include "libindicator/indicator-object.h"
+
+G_BEGIN_DECLS
+
+#define DUMMY_INDICATOR_ENTRY_FUNC_TYPE (dummy_indicator_entry_func_get_type ())
+#define DUMMY_INDICATOR_ENTRY_FUNC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DUMMY_INDICATOR_ENTRY_FUNC_TYPE, DummyIndicatorEntryFunc))
+#define DUMMY_INDICATOR_ENTRY_FUNC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DUMMY_INDICATOR_ENTRY_FUNC_TYPE, DummyIndicatorEntryFuncClass))
+#define IS_DUMMY_INDICATOR_ENTRY_FUNC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DUMMY_INDICATOR_ENTRY_FUNC_TYPE))
+#define IS_DUMMY_INDICATOR_ENTRY_FUNC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DUMMY_INDICATOR_ENTRY_FUNC_TYPE))
+#define DUMMY_INDICATOR_ENTRY_FUNC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DUMMY_INDICATOR_ENTRY_FUNC_TYPE, DummyIndicatorEntryFuncClass))
+
+typedef struct _DummyIndicatorEntryFunc DummyIndicatorEntryFunc;
+typedef struct _DummyIndicatorEntryFuncClass DummyIndicatorEntryFuncClass;
+
+struct _DummyIndicatorEntryFuncClass {
+ IndicatorObjectClass parent_class;
+};
+
+struct _DummyIndicatorEntryFunc {
+ IndicatorObject parent;
+
+ gboolean entry_activate_called;
+ gboolean entry_activate_window_called;
+ gboolean entry_close_called;
+};
+
+#endif /* __DUMMY_INDICATOR_ENTRY_FUNC__ */
diff --git a/tests/test-loader.c b/tests/test-loader.c
index 51ea6f3..0ea3224 100644
--- a/tests/test-loader.c
+++ b/tests/test-loader.c
@@ -23,6 +23,78 @@ License along with this library. If not, see
#include <gtk/gtk.h>
#include "libindicator/indicator-object.h"
+#include "dummy-indicator-entry-func.h"
+
+void
+entry_func_swap (IndicatorObject * io)
+{
+ static void (*saved_func) (IndicatorObject * io, IndicatorObjectEntry * entry, guint windowid, guint timestamp) = NULL;
+ IndicatorObjectClass * klass = INDICATOR_OBJECT_GET_CLASS(io);
+
+ if (saved_func == NULL) {
+ saved_func = klass->entry_activate_window;
+ }
+
+ if (klass->entry_activate_window == NULL) {
+ klass->entry_activate_window = saved_func;
+ } else {
+ klass->entry_activate_window = NULL;
+ }
+
+ return;
+}
+
+void
+test_loader_entry_func_window (void)
+{
+ IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-entry-func.so");
+ g_assert(object != NULL);
+
+ DummyIndicatorEntryFunc * entryfunc = (DummyIndicatorEntryFunc *)(object);
+
+ entryfunc->entry_activate_called = FALSE;
+ entryfunc->entry_activate_window_called = FALSE;
+ entryfunc->entry_close_called = FALSE;
+
+ entry_func_swap(object);
+ indicator_object_entry_activate_window(object, NULL, 0, 0);
+ g_assert(entryfunc->entry_activate_called);
+
+ entry_func_swap(object);
+ indicator_object_entry_activate_window(object, NULL, 0, 0);
+ g_assert(entryfunc->entry_activate_window_called);
+
+ g_object_unref(object);
+
+ return;
+}
+
+void
+test_loader_entry_funcs (void)
+{
+ IndicatorObject * object = indicator_object_new_from_file(BUILD_DIR "/.libs/libdummy-indicator-entry-func.so");
+ g_assert(object != NULL);
+
+ DummyIndicatorEntryFunc * entryfunc = (DummyIndicatorEntryFunc *)(object);
+
+ entryfunc->entry_activate_called = FALSE;
+ entryfunc->entry_activate_window_called = FALSE;
+ entryfunc->entry_close_called = FALSE;
+
+ indicator_object_entry_activate(object, NULL, 0);
+ g_assert(entryfunc->entry_activate_called);
+
+ indicator_object_entry_activate_window(object, NULL, 0, 0);
+ g_assert(entryfunc->entry_activate_window_called);
+
+ indicator_object_entry_close(object, NULL, 0);
+ g_assert(entryfunc->entry_close_called);
+
+ g_object_unref(object);
+
+ return;
+}
+
void destroy_cb (gpointer data, GObject * object);
void
@@ -263,6 +335,8 @@ test_loader_creation_deletion_suite (void)
g_test_add_func ("/libindicator/loader/dummy/simple_accessors", test_loader_filename_dummy_simple_accessors);
g_test_add_func ("/libindicator/loader/dummy/simple_location", test_loader_filename_dummy_simple_location);
g_test_add_func ("/libindicator/loader/dummy/signaler", test_loader_filename_dummy_signaler);
+ g_test_add_func ("/libindicator/loader/dummy/entry_funcs", test_loader_entry_funcs);
+ g_test_add_func ("/libindicator/loader/dummy/entry_func_window", test_loader_entry_func_window);
g_test_add_func ("/libindicator/loader/dummy/visible", test_loader_filename_dummy_visible);
return;