aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2010-03-04 15:52:59 +0000
committerConor Curran <conor.curran@canonical.com>2010-03-04 15:52:59 +0000
commit17dd0fee623ff8552b5635fdc570e0aee8635fd6 (patch)
tree30f7be78f9b82383383aa8f54e84ab3a5c29b8d3 /tests
parentcb864e17102163154fa313d5f9344e9c6c2cbe16 (diff)
parente2a152628f20271f5373702ad88fda483e0403ca (diff)
downloadayatana-indicator-sound-17dd0fee623ff8552b5635fdc570e0aee8635fd6.tar.gz
ayatana-indicator-sound-17dd0fee623ff8552b5635fdc570e0aee8635fd6.tar.bz2
ayatana-indicator-sound-17dd0fee623ff8552b5635fdc570e0aee8635fd6.zip
merge with the test branch - service side refactored and tests introduced
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am95
-rw-r--r--tests/run-xvfb.sh8
-rw-r--r--tests/test-defines.h24
-rw-r--r--tests/test-indicator-sound-dbus-client.c112
-rw-r--r--tests/test-indicator-sound-dbus-server.c63
-rw-r--r--tests/test-indicator-sound.c101
6 files changed, 403 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..a0b990b
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,95 @@
+
+check_PROGRAMS = \
+ test-indicator-sound \
+ test-indicator-sound-dbus-client \
+ test-indicator-sound-dbus-server
+
+TESTS =
+DISTCLEANFILES = $(TESTS)
+
+#########################################
+## test-indicator-sound
+#########################################
+test_indicator_sound_SOURCES = \
+ test-indicator-sound.c \
+ $(top_builddir)/src/indicator-sound.c
+
+test_indicator_sound_CFLAGS = \
+ $(APPLET_CFLAGS) \
+ -Wall -Werror \
+ -I$(srcdir) \
+ -DTOP_BUILD_DIR="\"${abs_top_builddir}\""
+
+test_indicator_sound_LDADD = \
+ $(APPLET_LIBS)
+
+
+#########################################
+## test-indicator-sound-dbus-client
+#########################################
+test_indicator_sound_dbus_client_SOURCES = \
+ test-defines.h \
+ test-indicator-sound-dbus-client.c
+
+test_indicator_sound_dbus_client_CFLAGS = \
+ $(SOUNDSERVICE_CFLAGS) \
+ -Wall -Werror \
+ -I$(srcdir)
+
+test_indicator_sound_dbus_client_LDADD = \
+ $(SOUNDSERVICE_LIBS)
+
+########################################
+# test-indicator-sound-dbus-server
+########################################
+test_indicator_sound_dbus_server_SOURCES = \
+ test-defines.h \
+ test-indicator-sound-dbus-server.c \
+ $(top_builddir)/src/sound-service-dbus.c \
+ $(top_builddir)/src/pulse-manager.c \
+ $(top_builddir)/src/slider-menu-item.c \
+ $(top_builddir)/src/dbus-menu-manager.c
+
+test_indicator_sound_dbus_server_CFLAGS = \
+ $(SOUNDSERVICE_CFLAGS) \
+ -Wall -Werror \
+ -I$(srcdir)
+
+test_indicator_sound_dbus_server_LDADD = \
+ $(SOUNDSERVICE_LIBS)
+
+
+#########################################
+## Actual tests
+#########################################
+
+XML_REPORT = indicator-sound-check-results.xml
+HTML_REPORT = indicator-sound-check-results.html
+
+indicator-sound-tests: indicator-sound-tests-gtester Makefile.am
+ @echo "#!/bin/sh" > $@
+ @echo $(DBUS_RUNNER) --task ./indicator-sound-tests-gtester >> $@
+ @chmod +x $@
+
+indicator-sound-tests-gtester: test-indicator-sound Makefile.am
+ @echo "#!/bin/sh" > $@
+ @echo gtester -k --verbose -o=$(XML_REPORT) ./test-indicator-sound >> $@
+ @chmod +x $@
+
+TESTS += indicator-sound-tests
+
+DISTCLEANFILES += $(XML_REPORT) $(HTML_REPORT) indicator-sound-tests-gtester
+
+DBUS_RUNNER=dbus-test-runner --dbus-config /usr/share/dbus-test-runner/session.conf
+
+test-indicator-sound-dbus: test-indicator-sound-dbus-client test-indicator-sound-dbus-server Makefile.am
+ @echo "#!/bin/sh" > test-indicator-sound-dbus
+ @echo $(DBUS_RUNNER) --task ./test-indicator-sound-dbus-client --task-name Client --task ./test-indicator-sound-dbus-server --task-name Server --ignore-return >> test-indicator-sound-dbus
+ @chmod +x test-indicator-sound-dbus
+
+TESTS += test-indicator-sound-dbus
+
+
+
+
+
diff --git a/tests/run-xvfb.sh b/tests/run-xvfb.sh
new file mode 100644
index 0000000..63b6f0d
--- /dev/null
+++ b/tests/run-xvfb.sh
@@ -0,0 +1,8 @@
+if [ "$DISPLAY" == "" ]; then
+Xvfb -ac -noreset -screen 0 800x600x16 -help 2>/dev/null 1>&2
+XID=`for id in 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 ; do test -e /tmp/.X$id-lock || { echo $id; exit 0; }; done; exit 1`
+{ Xvfb -ac -noreset -screen 0 800x600x16 :$XID -screen 0 800x600x16 -nolisten tcp -auth /dev/null >/dev/null 2>&1 & trap "kill -15 $! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } || { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; }
+DISPLAY=:$XID
+export DISPLAY
+echo Setting display: $DISPLAY
+fi
diff --git a/tests/test-defines.h b/tests/test-defines.h
new file mode 100644
index 0000000..68064fc
--- /dev/null
+++ b/tests/test-defines.h
@@ -0,0 +1,24 @@
+/*
+Testing defines to be shared between various tests.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+ Conor Curran <conor.curran@canonical.com>
+ Ted Gould <ted@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#define TEST_MUTE FALSE
+
diff --git a/tests/test-indicator-sound-dbus-client.c b/tests/test-indicator-sound-dbus-client.c
new file mode 100644
index 0000000..08ce93e
--- /dev/null
+++ b/tests/test-indicator-sound-dbus-client.c
@@ -0,0 +1,112 @@
+/*
+Tests for the libappindicator library that are over DBus. This is
+the client side of those tests.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+ Conor Curran <conor.curran@canonical.com>
+ Ted Gould <ted@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include <glib.h>
+#include <dbus/dbus-glib.h>
+#include "../src/dbus-shared-names.h"
+#include "test-defines.h"
+
+static GMainLoop * mainloop = NULL;
+static gboolean passed = TRUE;
+
+static void
+fetch_mute_cb (DBusGProxy * proxy, DBusGProxyCall * call, void * data)
+{
+ GError * error = NULL;
+ GValue value = {0};
+
+ if (!dbus_g_proxy_end_call(proxy, call, &error, G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
+ g_warning("Getting mute failed: %s", error->message);
+ g_error_free(error);
+ passed = FALSE;
+ return;
+ }
+
+ if (TEST_MUTE != g_value_get_boolean(&value)) {
+ g_debug("Mute vale Returned: FAILED");
+ passed = FALSE;
+ } else {
+ g_debug("Property ID Returned: PASSED");
+ }
+ return;
+}
+
+
+gboolean
+kill_func (gpointer userdata)
+{
+ g_main_loop_quit(mainloop);
+ g_warning("Forced to Kill");
+ passed = FALSE;
+ return FALSE;
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+ g_type_init();
+
+ g_usleep(500000);
+
+ GError * error = NULL;
+ DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
+ if (error != NULL) {
+ g_error("Unable to get session bus: %s", error->message);
+ return 1;
+ }
+
+ DBusGProxy * props = dbus_g_proxy_new_for_name_owner(session_bus,
+ INDICATOR_SOUND_DBUS_NAME,
+ INDICATOR_SOUND_SERVICE_DBUS_OBJECT,
+ INDICATOR_SOUND_SERVICE_DBUS_INTERFACE,
+ &error);
+/* ":1.0",*/
+/* "/need/a/path",*/
+/* DBUS_INTERFACE_PROPERTIES,*/
+/* &error);*/
+ if (error != NULL) {
+ g_error("Unable to get property proxy: %s", error->message);
+ return 1;
+ }
+
+ dbus_g_proxy_begin_call (props,
+ "GetSinkMute",
+ fetch_mute_cb,
+ NULL, NULL,
+ G_TYPE_INVALID);
+
+ g_timeout_add_seconds(2, kill_func, NULL);
+
+ mainloop = g_main_loop_new(NULL, FALSE);
+ g_main_loop_run(mainloop);
+
+ if (passed) {
+ g_debug("Quiting");
+ return 0;
+ } else {
+ g_debug("Quiting as we're a failure");
+ return 1;
+ }
+ return 0;
+}
diff --git a/tests/test-indicator-sound-dbus-server.c b/tests/test-indicator-sound-dbus-server.c
new file mode 100644
index 0000000..21d7dfe
--- /dev/null
+++ b/tests/test-indicator-sound-dbus-server.c
@@ -0,0 +1,63 @@
+/*
+Tests for the libappindicator library that are over DBus. This is
+the server side of those tests.
+
+Copyright 2009 Canonical Ltd.
+
+Authors:
+ Conor Curran <conor.curran@canonical.com>
+ Ted Gould <ted@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <glib.h>
+#include "../src/sound-service-dbus.h"
+#include "test-defines.h"
+
+static GMainLoop * mainloop = NULL;
+static SoundServiceDbus *dbus_interface = NULL;
+
+gboolean
+kill_func (gpointer userdata)
+{
+ g_main_loop_quit(mainloop);
+ // TODO free the dbus interface !!
+ return FALSE;
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+ g_type_init();
+ g_debug("DBus ID: %s", dbus_connection_get_server_id(dbus_g_connection_get_connection(dbus_g_bus_get(DBUS_BUS_SESSION, NULL))));
+
+ dbus_interface = g_object_new(SOUND_SERVICE_DBUS_TYPE, NULL);
+
+ // Set the mute value
+ sound_service_dbus_update_sink_mute(dbus_interface, TEST_MUTE);
+ g_timeout_add_seconds(2, kill_func, NULL);
+
+ // Run the loop
+ mainloop = g_main_loop_new(NULL, FALSE);
+ g_main_loop_run(mainloop);
+
+ g_debug("Quiting");
+
+ return 0;
+}
+
+
diff --git a/tests/test-indicator-sound.c b/tests/test-indicator-sound.c
new file mode 100644
index 0000000..eb68b17
--- /dev/null
+++ b/tests/test-indicator-sound.c
@@ -0,0 +1,101 @@
+/*
+Copyright 2010 Canonical Ltd.
+
+Authors:
+ Conor Curran <conor.curran@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libindicator/indicator-object.h>
+#include "../src/indicator-sound.h"
+
+static const gint STATE_MUTED = 0;
+static const gint STATE_ZERO = 1;
+static const gint STATE_LOW = 2;
+static const gint STATE_MEDIUM = 3;
+static const gint STATE_HIGH = 4;
+static const gint STATE_MUTED_WHILE_INPUT = 5;
+static const gint STATE_SINKS_NONE = 6;
+
+void test_libindicator_sound_init()
+{
+ IndicatorObject * sound_menu = indicator_object_new_from_file(TOP_BUILD_DIR "/src/.libs/libsoundmenu.so");
+ g_assert(sound_menu != NULL);
+ g_object_unref(G_OBJECT(sound_menu));
+}
+
+void test_libindicator_determine_state()
+{
+ IndicatorObject * sound_menu = indicator_object_new_from_file(TOP_BUILD_DIR "/src/.libs/libsoundmenu.so");
+ prepare_for_tests(sound_menu);
+
+ determine_state_from_volume(40);
+ g_assert(get_state() == STATE_MEDIUM);
+
+ determine_state_from_volume(0);
+ g_assert(get_state() == STATE_ZERO);
+
+ determine_state_from_volume(15);
+ g_assert(get_state() == STATE_LOW);
+
+ determine_state_from_volume(70);
+ g_assert(get_state() == STATE_HIGH);
+
+ g_object_unref(G_OBJECT(sound_menu));
+}
+
+void test_libindicator_image_names()
+{
+ prepare_state_machine();
+
+ gchar* muted_name = get_state_image_name(STATE_MUTED);
+ g_assert(g_ascii_strncasecmp("audio-volume-muted-panel", muted_name, strlen("audio-volume-muted-panel")) == 0);
+
+ gchar* zero_name = get_state_image_name(STATE_ZERO);
+ g_assert(g_ascii_strncasecmp("audio-volume-low-zero-panel", zero_name, strlen("audio-volume-low-zero-panel")) == 0);
+
+ gchar* low_name = get_state_image_name(STATE_LOW);
+ g_assert(g_ascii_strncasecmp("audio-volume-low-panel", low_name, strlen("audio-volume-low-panel")) == 0);
+
+ gchar* medium_name = get_state_image_name(STATE_MEDIUM);
+ g_assert(g_ascii_strncasecmp("audio-volume-medium-panel", medium_name, strlen("audio-volume-medium-panel")) == 0);
+
+ gchar* high_name = get_state_image_name(STATE_HIGH);
+ g_assert(g_ascii_strncasecmp("audio-volume-high-panel", high_name, strlen("audio-volume-high-panel")) == 0);
+
+ gchar* blocked_name = get_state_image_name(STATE_MUTED_WHILE_INPUT);
+ g_assert(g_ascii_strncasecmp("audio-volume-muted-blocking-panel", blocked_name, strlen("audio-volume-muted-blocking-panel")) == 0);
+
+ gchar* none_name = get_state_image_name(STATE_SINKS_NONE);
+ g_assert(g_ascii_strncasecmp("audio-output-none-panel", none_name, strlen("audio-output-none-panel")) == 0);
+
+ tidy_up_hash();
+}
+
+
+
+gint main (gint argc, gchar * argv[])
+{
+ g_type_init();
+ g_test_init(&argc, &argv, NULL);
+
+ g_test_add_func("/indicator-sound/indicator-sound/init", test_libindicator_sound_init);
+ g_test_add_func("/indicator-sound/indicator-sound/state_machine", test_libindicator_determine_state);
+ g_test_add_func("/indicator-sound/indicator-sound/image_names", test_libindicator_image_names);
+
+ return g_test_run ();
+}
+