aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-02-25 19:34:56 -0500
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-02-25 19:34:56 -0500
commit5c47f6dbe75e413d2acbcef3e9750e937fb18431 (patch)
treefce3bfab963100972280fe4d61df903c5e20c7db /test
parent8249e264e0f426d6702d21a690477be495045f90 (diff)
downloadayatana-indicator-messages-5c47f6dbe75e413d2acbcef3e9750e937fb18431.tar.gz
ayatana-indicator-messages-5c47f6dbe75e413d2acbcef3e9750e937fb18431.tar.bz2
ayatana-indicator-messages-5c47f6dbe75e413d2acbcef3e9750e937fb18431.zip
Test libmessaging-menu
Use dbusmock to test whether libmessaging-menu calls the right functions on registration and deregistration.
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am10
-rwxr-xr-xtest/test-client.py68
2 files changed, 78 insertions, 0 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 4671446..87ae2c3 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -65,3 +65,13 @@ libindicator_messages_service_la_LIBADD = \
libindicator_messages_service_la_LDFLAGS = \
$(COVERAGE_LDFLAGS)
+
+######################################
+# Test client with dbusmock
+######################################
+
+TESTS_ENVIRONMENT = \
+ export LD_LIBRARY_PATH=$(top_builddir)/libmessaging-menu/.libs; \
+ export GI_TYPELIB_PATH=$(top_builddir)/libmessaging-menu;
+
+TESTS += test-client.py
diff --git a/test/test-client.py b/test/test-client.py
new file mode 100755
index 0000000..e012d6e
--- /dev/null
+++ b/test/test-client.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+
+import unittest
+import dbus
+import dbusmock
+import subprocess
+from gi.repository import GLib, Gio, MessagingMenu
+
+class MessagingMenuTest(dbusmock.DBusTestCase):
+ @classmethod
+ def setUpClass(klass):
+ klass.start_session_bus()
+ klass.bus = klass.get_dbus(False)
+
+ def setUp(self):
+ name = 'com.canonical.indicator.messages'
+ obj_path = '/com/canonical/indicator/messages/service'
+ iface = 'com.canonical.indicator.messages.service'
+
+ self.messaging_service = self.spawn_server(name, obj_path, iface, stdout=subprocess.PIPE)
+ self.mock = dbus.Interface(self.bus.get_object(name, obj_path), dbusmock.MOCK_IFACE)
+ self.mock.AddMethod('', 'RegisterApplication', 'so', '', '')
+ self.mock.AddMethod('', 'UnregisterApplication', 's', '', '')
+ self.mock.AddMethod('', 'ApplicationStoppedRunning', 's', '', '')
+ self.mock.AddMethod('', 'SetStatus', 'ss', '', '')
+
+ self.loop = GLib.MainLoop()
+
+ def tearDown(self):
+ self.messaging_service.terminate()
+ self.messaging_service.wait()
+
+ def spin_loop(self, ms=10):
+ GLib.timeout_add(ms, lambda: self.loop.quit())
+ self.loop.run()
+
+ def assertMethodCalled(self, name, *expected_args):
+ calls = self.mock.GetMethodCalls(name)
+ self.assertEqual(len(calls), 1, 'method %s was not called' % name)
+ args = calls[0][1]
+ self.assertEqual(len(args), len(expected_args))
+ for i in range(len(args)):
+ if expected_args[i]:
+ self.assertEqual(args[i], expected_args[i])
+
+ def test_registration(self):
+ mmapp = MessagingMenu.App.new('empathy.desktop')
+ mmapp.register()
+ self.spin_loop()
+ self.assertMethodCalled('RegisterApplication', 'empathy.desktop', None)
+
+ mmapp.unregister()
+ self.spin_loop()
+ self.assertMethodCalled('UnregisterApplication', 'empathy.desktop')
+
+ # ApplicationStoppedRunning is called when the last ref on mmapp is dropped
+ del mmapp
+ self.spin_loop()
+ self.assertMethodCalled('ApplicationStoppedRunning', 'empathy.desktop')
+
+ def test_status(self):
+ mmapp = MessagingMenu.App.new('empathy.desktop')
+ mmapp.register()
+ mmapp.set_status(MessagingMenu.Status.AWAY)
+ self.spin_loop()
+ self.assertMethodCalled('SetStatus', 'empathy.desktop', 'away')
+
+unittest.main(testRunner=unittest.TextTestRunner())