@@ -24,16 +24,14 @@ try:
24except ImportError:
24except ImportError:
25 Gio = None
25 Gio = None
27from autopilot import introspection
30from autopilot import introspection
28from autopilot.platform import model
31from autopilot.platform import model
29from autopilot.testcase import AutopilotTestCase
32from autopilot.testcase import AutopilotTestCase
30from autopilot.matchers import Eventually
33from autopilot.matchers import Eventually
31−from autopilot.input import Touch
32from autopilot.display import Display
34from autopilot.display import Display
37from testtools.matchers import Equals
35from testtools.matchers import Equals
38from ubuntuuitoolkit import (
36from ubuntuuitoolkit import (
39 fixture_setup as toolkit_fixtures,
37 fixture_setup as toolkit_fixtures,
@@ -93,36 +91,25 @@ class UnityTestCase(AutopilotTestCase):
93 @classmethod
91 @classmethod
94 def setUpClass(cls):
92 def setUpClass(cls):
96− output = subprocess.check_output(
94+ is_unity_running = process_helpers.is_job_running('unity8')
97− ["/sbin/initctl", "status", "unity8"],
95+ except process_helpers.JobError as e:
98− stderr=subprocess.STDOUT,
96+ xdg_config_home = os.getenv(
99− universal_newlines=True,
97+ 'XDG_CONFIG_HOME', os.path.join(os.getenv('HOME'), '.config'))
100− )
98+ upstart_config_path = os.path.join(xdg_config_home, 'upstart')
101− except subprocess.CalledProcessError as e:
99+ logger.error(
103− "Error: `initctl status unity8` failed, most probably the "
100+ '`initctl status unity8` failed, most probably the '
104− "unity8 session could not be found:\n\n"
101+ 'unity8 session could not be found:\n\n'
106− "Please install unity8 or copy data/unity8.conf to "
103+ 'Please install unity8 or copy data/unity8.conf to '
107− "{1}\n".format(
104+ '{1}\n'.format(e.output, upstart_config_path)
109− os.path.join(os.getenv("XDG_CONFIG_HOME",
110− os.path.join(os.getenv("HOME"),
118− if "start/" in output:
120− "Error: Unity is currently running, these tests require it to "
122− "Please run this command before running these tests: \n"
123− "initctl stop unity8\n"
125− sys.exit(2)
106+ raise e
108+ assert not is_unity_running, (
109+ 'Unity is currently running, these tests require it to be '
111+ 'Please run this command before running these tests: \n'
112+ 'initctl stop unity8\n')
127 def setUp(self):
114 def setUp(self):
128 super().setUp()
115 super().setUp()
@@ -134,13 +121,6 @@ class UnityTestCase(AutopilotTestCase):
134 self._data_dirs_mock_enabled = True
121 self._data_dirs_mock_enabled = True
135 self._environment = {}
122 self._environment = {}
137− # FIXME: This is a work around re: lp:1238417
138− if model() != "Desktop":
139− from autopilot.input import _uinput
140− _uinput._touch_device = _uinput.create_touch_device()
141− self.addCleanup(_uinput._touch_device.close)
143− self.touch = Touch.create()
144 self._setup_display_details()
124 self._setup_display_details()
146 def _setup_display_details(self):
126 def _setup_display_details(self):
@@ -196,40 +176,6 @@ class UnityTestCase(AutopilotTestCase):
196 divisor = divisor * 2
176 divisor = divisor * 2
197 return divisor
177 return divisor
199− def _patch_environment(self, key, value):
200− """Wrapper for patching env for upstart environment."""
202− current_value = subprocess.check_output(
203− ["/sbin/initctl", "get-env", "--global", key],
204− stderr=subprocess.STDOUT,
205− universal_newlines=True,
207− except subprocess.CalledProcessError:
208− current_value = None
214− "%s=%s" % (key, value)
215− ], stderr=subprocess.STDOUT)
216− self.addCleanup(self._upstart_reset_env, key, current_value)
218− def _upstart_reset_env(self, key, value):
219− logger.info("Resetting upstart env %s to %s", key, value)
222− ["/sbin/initctl", "unset-env", key],
223− stderr=subprocess.STDOUT,
230− "%s=%s" % (key, value)
231− ], stderr=subprocess.STDOUT)
233 def launch_unity(self, mode="full-greeter", *args):
179 def launch_unity(self, mode="full-greeter", *args):
235 Launch the unity shell, return a proxy object for it.
181 Launch the unity shell, return a proxy object for it.
@@ -257,21 +203,6 @@ class UnityTestCase(AutopilotTestCase):
257 if self._data_dirs_mock_enabled:
203 if self._data_dirs_mock_enabled:
258 self._patch_data_dirs()
204 self._patch_data_dirs()
260− # FIXME: we shouldn't be doing this
261− # $MIR_SOCKET, fallback to $XDG_RUNTIME_DIR/mir_socket and
262− # /tmp/mir_socket as last resort
265− os.getenv('MIR_SOCKET',
266− os.path.join(os.getenv('XDG_RUNTIME_DIR', "/tmp"),
271− os.unlink("/tmp/mir_socket")
275 unity8_cli_args_list = ["--mode={}".format(mode)]
206 unity8_cli_args_list = ["--mode={}".format(mode)]
276 if len(args) != 0:
207 if len(args) != 0:
277 unity8_cli_args_list += args
208 unity8_cli_args_list += args
@@ -297,26 +228,15 @@ class UnityTestCase(AutopilotTestCase):
298 def _launch_unity_with_upstart(self, binary_path, args):
229 def _launch_unity_with_upstart(self, binary_path, args):
299 logger.info("Starting unity")
230 logger.info("Starting unity")
231+ self.useFixture(toolkit_fixtures.InitctlEnvironmentVariable(
300− self._patch_environment("QT_LOAD_TESTABILITY", 1)
232+ global_=True, QT_LOAD_TESTABILITY=1))
302− binary_arg = "BINARY=%s" % binary_path
303− extra_args = "ARGS=%s" % " ".join(args)
304− env_args = ["%s=%s" % (k, v) for k, v in self._environment.items()]
305− all_args = [binary_arg, extra_args] + env_args
307− self.addCleanup(self._cleanup_launching_upstart_unity)
234+ variables = self._environment
308−
235+ variables['ARGS'] = " ".join(args)
309− return process_helpers.restart_unity_with_testability(*all_args)
236+ launch_unity_fixture = fixture_setup.RestartUnityWithTestability(
310−
237+ binary_path, variables)
311− def _cleanup_launching_upstart_unity(self):
238+ self.useFixture(launch_unity_fixture)
312− logger.info("Stopping unity")
239+ return launch_unity_fixture.unity_proxy
314− subprocess.check_output(
315− ["/sbin/initctl", "stop", "unity8"],
316− stderr=subprocess.STDOUT
318− except subprocess.CalledProcessError:
319− logger.warning("Appears unity was already stopped!")
321 def _patch_data_dirs(self):
241 def _patch_data_dirs(self):
322 data_dirs = get_data_dirs(self._data_dirs_mock_enabled)
242 data_dirs = get_data_dirs(self._data_dirs_mock_enabled)