/usr/share/doc/python3-dbusmock/examples/test_notification_daemon.py is in python3-dbusmock 0.10.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #!/usr/bin/python3
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text
# of the license.
__author__ = 'Martin Pitt'
__email__ = 'martin.pitt@ubuntu.com'
__copyright__ = '(c) 2012 Canonical Ltd.'
__license__ = 'LGPL 3+'
import unittest
import sys
import subprocess
import fcntl
import os
import dbus
import dbusmock
try:
notify_send_version = subprocess.check_output(['notify-send', '--version'],
universal_newlines=True)
notify_send_version = notify_send_version.split()[-1]
except (OSError, subprocess.CalledProcessError):
notify_send_version = ''
@unittest.skipUnless(notify_send_version, 'notify-send not installed')
class TestNotificationDaemon(dbusmock.DBusTestCase):
'''Test mocking notification-daemon'''
@classmethod
def setUpClass(klass):
klass.start_session_bus()
klass.dbus_con = klass.get_dbus(False)
def setUp(self):
(self.p_mock, self.obj_daemon) = self.spawn_server_template(
'notification_daemon', {}, stdout=subprocess.PIPE)
# set log to nonblocking
flags = fcntl.fcntl(self.p_mock.stdout, fcntl.F_GETFL)
fcntl.fcntl(self.p_mock.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)
def tearDown(self):
self.p_mock.terminate()
self.p_mock.wait()
def test_no_options(self):
'''notify-send with no options'''
subprocess.check_call(['notify-send', 'title', 'my text'])
log = self.p_mock.stdout.read()
self.assertRegex(log, b'[0-9.]+ Notify "notify-send" 0 "" "title" "my text" \[\]')
@unittest.skipIf(notify_send_version < '0.7.5', 'this requires libnotify >= 0.7.5')
def test_options(self):
'''notify-send with some options'''
subprocess.check_call(['notify-send', '-t', '27', '-a', 'fooApp',
'-i', 'warning_icon', 'title', 'my text'])
log = self.p_mock.stdout.read()
self.assertRegex(log, b'[0-9.]+ Notify "fooApp" 0 "warning_icon" "title" "my text" \[\] {"urgency": 1} 27\n')
def test_id(self):
'''ID handling'''
notify_proxy = dbus.Interface(
self.dbus_con.get_object('org.freedesktop.Notifications', '/org/freedesktop/Notifications'),
'org.freedesktop.Notifications')
# with input ID 0 it should generate new IDs
id = notify_proxy.Notify('test', 0, '', 'summary', 'body', [], {}, -1)
self.assertEqual(id, 1)
id = notify_proxy.Notify('test', 0, '', 'summary', 'body', [], {}, -1)
self.assertEqual(id, 2)
# an existing ID should just be bounced back
id = notify_proxy.Notify('test', 4, '', 'summary', 'body', [], {}, -1)
self.assertEqual(id, 4)
id = notify_proxy.Notify('test', 1, '', 'summary', 'body', [], {}, -1)
self.assertEqual(id, 1)
# the previous doesn't forget the counter
id = notify_proxy.Notify('test', 0, '', 'summary', 'body', [], {}, -1)
self.assertEqual(id, 3)
def test_close(self):
'''CloseNotification() and NotificationClosed() signal'''
notify_proxy = dbus.Interface(
self.dbus_con.get_object('org.freedesktop.Notifications', '/org/freedesktop/Notifications'),
'org.freedesktop.Notifications')
id = notify_proxy.Notify('test', 0, '', 'summary', 'body', [], {}, -1)
self.assertEqual(id, 1)
# known notification, should send a signal
notify_proxy.CloseNotification(id)
log = self.p_mock.stdout.read()
self.assertRegex(log, b'[0-9.]+ emit .*NotificationClosed 1 1\n')
# unknown notification, don't send a signal
notify_proxy.CloseNotification(id + 1)
log = self.p_mock.stdout.read()
self.assertNotIn(b'NotificationClosed', log)
if __name__ == '__main__':
# avoid writing to stderr
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2))
|