on xenial help sign in
Move autopilot notification code to a helper method.
802803fVictor R. Ruiz
tests/autopilot/unity8/shell/__init__.py+50−1
@@ -21,8 +21,9 @@
21
21
22from time import sleep
22from time import sleep
23from functools import wraps
23from functools import wraps
24−import logging
24+from gi.repository import Notify
25
25
26+import logging
26
27
27logger = logging.getLogger(__name__)
28logger = logging.getLogger(__name__)
28
29
@@ -48,6 +49,7 @@ def disable_qml_mocking(fn):
48 return fn(*args, **kwargs)
49 return fn(*args, **kwargs)
49 return wrapper
50 return wrapper
50
51
52+
51class DragMixin(object):
53class DragMixin(object):
52 def _drag(self, x1, y1, x2, y2):
54 def _drag(self, x1, y1, x2, y2):
53 # XXX This ugly code is here just temporarily, waiting for drag
55 # XXX This ugly code is here just temporarily, waiting for drag
@@ -69,3 +71,50 @@ class DragMixin(object):
69 self.touch._finger_move(int(x2), int(y2))
71 self.touch._finger_move(int(x2), int(y2))
70 except AttributeError:
72 except AttributeError:
71 self.touch._device.finger_move(int(x2), int(y2))
73 self.touch._device.finger_move(int(x2), int(y2))
74+
75+
76+def create_ephemeral_notification(
77+ summary='',
78+ body='',
79+ icon=None,
80+ hints=[],
81+ urgency='NORMAL'
82+):
83+ """Create an ephemeral (non-interactive) notification
84+
85+ :param summary: Summary text for the notification
86+ :param body: Body text to display in the notification
87+ :param icon: Path string to the icon to use
88+ :param hint_strings: List of tuples containing the 'name' and value
89+ for setting the hint strings for the notification
90+ :param urgency: Urgency string for the noticiation, either: 'LOW',
91+ 'NORMAL', 'CRITICAL'
92+ """
93+ Notify.init('Unity8')
94+
95+ logger.info(
96+ "Creating ephemeral: summary(%s), body(%s), urgency(%r) "
97+ "and Icon(%s)",
98+ summary,
99+ body,
100+ urgency,
101+ icon
102+ )
103+
104+ notification = Notify.Notification.new(summary, body, icon)
105+
106+ for hint in hints:
107+ key, value = hint
108+ notification.set_hint_string(key, value)
109+ logger.info("Adding hint to notification: (%s, %s)", key, value)
110+ notification.set_urgency(_get_urgency(urgency))
111+
112+ return notification
113+
114+
115+def _get_urgency(urgency):
116+ """Translates urgency string to enum."""
117+ _urgency_enums = {'LOW': Notify.Urgency.LOW,
118+ 'NORMAL': Notify.Urgency.NORMAL,
119+ 'CRITICAL': Notify.Urgency.CRITICAL}
120+ return _urgency_enums.get(urgency.upper())
tests/autopilot/unity8/shell/tests/test_notifications.py+14−57
@@ -21,6 +21,7 @@
21
21
22from __future__ import absolute_import
22from __future__ import absolute_import
23
23
24+from unity8 import shell
24from unity8.process_helpers import unlock_unity
25from unity8.process_helpers import unlock_unity
25from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
26
27
@@ -64,7 +65,8 @@ class NotificationsBase(UnityTestCase):
64 if os.path.abspath(__file__).startswith('/usr/'):
65 if os.path.abspath(__file__).startswith('/usr/'):
65 return '/usr/share/unity8/graphics/' + icon_name
66 return '/usr/share/unity8/graphics/' + icon_name
66 else:
67 else:
67− return os.path.dirname(__file__) + "/../../../../../qml/graphics/" + icon_name
68+ return os.path.dirname(__file__) + (
69+ "/../../../../../qml/graphics/" + icon_name)
68
70
69 def _get_notifications_list(self):
71 def _get_notifications_list(self):
70 return self.main_window.select_single(
72 return self.main_window.select_single(
@@ -354,7 +356,7 @@ class EphemeralNotificationsTests(NotificationsBase):
354 )
356 )
355 ]
357 ]
356
358
357− notification = self._create_ephemeral_notification(
359+ notification = shell.create_ephemeral_notification(
358 summary,
360 summary,
359 body,
361 body,
360 icon_path,
362 icon_path,
@@ -391,7 +393,7 @@ class EphemeralNotificationsTests(NotificationsBase):
391 )
393 )
392 ]
394 ]
393
395
394− notification = self._create_ephemeral_notification(
396+ notification = shell.create_ephemeral_notification(
395 summary,
397 summary,
396 None,
398 None,
397 None,
399 None,
@@ -433,7 +435,7 @@ class EphemeralNotificationsTests(NotificationsBase):
433 body_critical = 'Dude, this is so urgent you have no idea :)'
435 body_critical = 'Dude, this is so urgent you have no idea :)'
434 icon_path_critical = self._get_icon_path('avatars/anna_olsson.png')
436 icon_path_critical = self._get_icon_path('avatars/anna_olsson.png')
435
437
436− notification_normal = self._create_ephemeral_notification(
438+ notification_normal = shell.create_ephemeral_notification(
437 summary_normal,
439 summary_normal,
438 body_normal,
440 body_normal,
439 icon_path_normal,
441 icon_path_normal,
@@ -441,7 +443,7 @@ class EphemeralNotificationsTests(NotificationsBase):
441 )
443 )
442 notification_normal.show()
444 notification_normal.show()
443
445
444− notification_low = self._create_ephemeral_notification(
446+ notification_low = shell.create_ephemeral_notification(
445 summary_low,
447 summary_low,
446 body_low,
448 body_low,
447 icon_path_low,
449 icon_path_low,
@@ -449,7 +451,7 @@ class EphemeralNotificationsTests(NotificationsBase):
449 )
451 )
450 notification_low.show()
452 notification_low.show()
451
453
452− notification_critical = self._create_ephemeral_notification(
454+ notification_critical = shell.create_ephemeral_notification(
453 summary_critical,
455 summary_critical,
454 body_critical,
456 body_critical,
455 icon_path_critical,
457 icon_path_critical,
@@ -510,7 +512,7 @@ class EphemeralNotificationsTests(NotificationsBase):
510 summary = 'Summary-Body'
512 summary = 'Summary-Body'
511 body = 'This is a superfluous notification'
513 body = 'This is a superfluous notification'
512
514
513− notification = self._create_ephemeral_notification(summary, body)
515+ notification = shell.create_ephemeral_notification(summary, body)
514 notification.show()
516 notification.show()
515
517
516 notification = notify_list.wait_select_single(
518 notification = notify_list.wait_select_single(
@@ -534,7 +536,7 @@ class EphemeralNotificationsTests(NotificationsBase):
534
536
535 summary = 'Summary-Only'
537 summary = 'Summary-Only'
536
538
537− notification = self._create_ephemeral_notification(summary)
539+ notification = shell.create_ephemeral_notification(summary)
538 notification.show()
540 notification.show()
539
541
540 notification = notify_list.wait_select_single(
542 notification = notify_list.wait_select_single(
@@ -554,7 +556,7 @@ class EphemeralNotificationsTests(NotificationsBase):
554 body = 'This is the original content of this notification-bubble.'
556 body = 'This is the original content of this notification-bubble.'
555 icon_path = self._get_icon_path('avatars/funky.png')
557 icon_path = self._get_icon_path('avatars/funky.png')
556
558
557− notification = self._create_ephemeral_notification(
559+ notification = shell.create_ephemeral_notification(
558 summary,
560 summary,
559 body,
561 body,
560 icon_path
562 icon_path
@@ -594,7 +596,7 @@ class EphemeralNotificationsTests(NotificationsBase):
594 icon_path = self._get_icon_path('avatars/anna_olsson.png')
596 icon_path = self._get_icon_path('avatars/anna_olsson.png')
595 hint_icon = self._get_icon_path('applicationIcons/phone-app.png')
597 hint_icon = self._get_icon_path('applicationIcons/phone-app.png')
596
598
597− notification = self._create_ephemeral_notification(
599+ notification = shell.create_ephemeral_notification(
598 summary,
600 summary,
599 body,
601 body,
600 icon_path
602 icon_path
@@ -638,7 +640,7 @@ class EphemeralNotificationsTests(NotificationsBase):
638 body = 'Hey Bro Coly!'
640 body = 'Hey Bro Coly!'
639 icon_path = self._get_icon_path('avatars/amanda.png')
641 icon_path = self._get_icon_path('avatars/amanda.png')
640 body_sum = body
642 body_sum = body
641− notification = self._create_ephemeral_notification(
643+ notification = shell.create_ephemeral_notification(
642 summary,
644 summary,
643 body,
645 body,
644 icon_path,
646 icon_path,
@@ -674,7 +676,7 @@ class EphemeralNotificationsTests(NotificationsBase):
674 for new_body in bodies:
676 for new_body in bodies:
675 body = new_body
677 body = new_body
676 body_sum += '\n' + body
678 body_sum += '\n' + body
677− notification = self._create_ephemeral_notification(
679+ notification = shell.create_ephemeral_notification(
678 summary,
680 summary,
679 body,
681 body,
680 icon_path,
682 icon_path,
@@ -695,48 +697,3 @@ class EphemeralNotificationsTests(NotificationsBase):
695 False,
697 False,
696 1.0
698 1.0
697 )
699 )
698−
699− def _create_ephemeral_notification(
700− self,
701− summary="",
702− body="",
703− icon=None,
704− hints=[],
705− urgency="NORMAL"
706− ):
707− """Create an ephemeral (non-interactive) notification
708−
709− :param summary: Summary text for the notification
710− :param body: Body text to display in the notification
711− :param icon: Path string to the icon to use
712− :param hint_strings: List of tuples containing the 'name' and value
713− for setting the hint strings for the notification
714− :param urgency: Urgency string for the noticiation, either: 'LOW',
715− 'NORMAL', 'CRITICAL'
716−
717− """
718− logger.info(
719− "Creating ephemeral: summary(%s), body(%s), urgency(%r) "
720− "and Icon(%s)",
721− summary,
722− body,
723− urgency,
724− icon
725− )
726−
727− n = Notify.Notification.new(summary, body, icon)
728−
729− for hint in hints:
730− key, value = hint
731− n.set_hint_string(key, value)
732− logger.info("Adding hint to notification: (%s, %s)", key, value)
733− n.set_urgency(self._get_urgency(urgency))
734−
735− return n
736−
737− def _get_urgency(self, urgency):
738− """Translates urgency string to enum."""
739− _urgency_enums = {'LOW': Notify.Urgency.LOW,
740− 'NORMAL': Notify.Urgency.NORMAL,
741− 'CRITICAL': Notify.Urgency.CRITICAL}
742− return _urgency_enums.get(urgency.upper())