Unity 8
test_lock_screen.py
1 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2 #
3 # Unity Autopilot Test Suite
4 # Copyright (C) 2012, 2013, 2014, 2015 Canonical
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #
19 
20 from unity8.shell.tests import UnityTestCase, _get_device_emulation_scenarios
21 
22 from autopilot.matchers import Eventually
23 from testtools.matchers import Equals
24 import logging
25 
26 logger = logging.getLogger(__name__)
27 
28 
30 
31  """Tests for the lock screen."""
32 
33  scenarios = _get_device_emulation_scenarios()
34 
36  """Must be able to unlock the PIN entry lock screen."""
37 
38  self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-pin"
39  self.launch_unity()
40  greeter = self.main_window.get_greeter()
41 
42  if not greeter.tabletMode:
43  greeter.swipe()
44  lockscreen = self._wait_for_lockscreen()
45  self.main_window.enter_pin_code("1234")
46  else:
47  self._enter_prompt_passphrase("1234\n")
48  self.assertThat(greeter.shown, Eventually(Equals(False)))
49 
51  """Must be able to unlock the passphrase entry screen."""
52 
53  self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-passphrase"
54  self.launch_unity()
55  greeter = self.main_window.get_greeter()
56 
57  if not greeter.tabletMode:
58  greeter.swipe()
59  lockscreen = self._wait_for_lockscreen()
60  self._enter_pin_passphrase("password")
61  else:
62  self._enter_prompt_passphrase("password")
63  self.assertThat(greeter.shown, Eventually(Equals(False)))
64 
66  """Entering the wrong pin code must not dismiss the lock screen."""
67  self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-pin"
68  self.launch_unity()
69  greeter = self.main_window.get_greeter()
70 
71  if not greeter.tabletMode:
72  greeter.swipe()
73  lockscreen = self._wait_for_lockscreen()
74  self.main_window.enter_pin_code("4321")
75  pinentryField = self.main_window.get_pinentryField()
76  self.assertThat(pinentryField.text, Eventually(Equals("")))
77  else:
78  self._enter_prompt_passphrase("4231\n")
79  prompt = self.main_window.get_greeter().get_prompt()
80  self.assertThat(prompt.text, Eventually(Equals("")))
81  self.assertThat(greeter.shown, Eventually(Equals(True)))
82 
84  """Entering the wrong password must not dismiss the lock screen."""
85  self._environment['LIBLIGHTDM_MOCK_MODE'] = "single-passphrase"
86  self.launch_unity()
87  greeter = self.main_window.get_greeter()
88 
89  if not greeter.tabletMode:
90  greeter.swipe()
91  lockscreen = self._wait_for_lockscreen()
92  self._enter_pin_passphrase("foobar")
93  pinentryField = self.main_window.get_pinentryField()
94  self.assertThat(pinentryField.text, Eventually(Equals("")))
95  else:
96  self._enter_prompt_passphrase("foobar")
97  prompt = self.main_window.get_greeter().get_prompt()
98  self.assertThat(prompt.text, Eventually(Equals("")))
99  self.assertThat(greeter.shown, Eventually(Equals(True)))
100 
101  def _wait_for_lockscreen(self):
102  """Wait for the lock screen to load, and return it."""
103  pinPadLoader = self.main_window.get_pinPadLoader()
104  self.assertThat(pinPadLoader.progress, Eventually(Equals(1)))
105  lockscreen = self.main_window.get_lockscreen()
106  self.assertThat(lockscreen.shown, Eventually(Equals(True)))
107  return lockscreen
108 
109  def _enter_pin_passphrase(self, passphrase):
110  """Enter the password specified in 'passphrase' into the password entry
111  field of the pin lock screen.
112 
113  :param passphrase: The string you want to enter.
114  :raises: TypeError if passphrase is not a string.
115 
116  """
117  if not isinstance(passphrase, str):
118  raise TypeError(
119  "'passphrase' parameter must be a string, not %r."
120  % type(passphrase)
121  )
122 
123  pin_entry_field = self.main_window.get_pinentryField()
124  # pinentryField should automatically have focus
125  self.keyboard.type(passphrase)
126  logger.debug("Typed passphrase: %s", pin_entry_field.text)
127  self.assertEqual(pin_entry_field.text, passphrase)
128  self.keyboard.type("\n")
129 
130  def _enter_prompt_passphrase(self, passphrase):
131  """Enter the password specified in 'passphrase' into the password entry
132  field of the main user list's prompt.
133 
134  :param passphrase: The string you want to enter.
135  :raises: TypeError if passphrase is not a string.
136 
137  """
138  if not isinstance(passphrase, str):
139  raise TypeError(
140  "'passphrase' parameter must be a string, not %r."
141  % type(passphrase)
142  )
143 
144  prompt = self.main_window.get_greeter().get_prompt()
145  prompt.write(passphrase)
146  logger.debug("Typed passphrase: %s", prompt.text)
147  self.keyboard.type("\n")
def launch_unity(self, mode="full-greeter", args)
Definition: __init__.py:255