Lomiri
Loading...
Searching...
No Matches
lomiri.shell.tests.LomiriTestCase Class Reference
Inheritance diagram for lomiri.shell.tests.LomiriTestCase:

Public Member Functions

 setUpClass (cls)
 
 setUp (self)
 
 launch_lomiri (self, mode="full-greeter", *args)
 
 patch_lightdm_mock (self)
 
 wait_for_lomiri (self)
 
 get_dash (self)
 
 main_window (self)
 

Public Attributes

 lomiri_geometry_args
 
 grid_size
 

Protected Member Functions

 _setup_display_details (self)
 
 _determine_geometry (self)
 
 _setup_grid_size (self, scale_divisor)
 
 _geo_larger_than_display (self, width, height)
 
 _get_scaled_down_geo (self, width, height)
 
 _launch_lomiri_with_upstart (self, binary_path, args)
 
 _patch_data_dirs (self)
 
 _get_lightdm_mock_path (self)
 
 _set_proxy (self, proxy)
 
 _clear_proxy (self)
 

Protected Attributes

 _proxy
 
 _qml_mock_enabled
 
 _data_dirs_mock_enabled
 
 _environment
 
 _clear_proxy
 

Detailed Description

A test case base class for the Lomiri shell tests.

Definition at line 88 of file __init__.py.

Member Function Documentation

◆ _clear_proxy()

lomiri.shell.tests.LomiriTestCase._clear_proxy (   self)
protected

Definition at line 285 of file __init__.py.

285 def _clear_proxy(self):
286 self._proxy = None
287

◆ _determine_geometry()

lomiri.shell.tests.LomiriTestCase._determine_geometry (   self)
protected
Use the geometry that may be supplied or use the default.

Definition at line 131 of file __init__.py.

131 def _determine_geometry(self):
132 """Use the geometry that may be supplied or use the default."""
133 width = getattr(self, 'app_width', 0)
134 height = getattr(self, 'app_height', 0)
135 scale_divisor = 1
136 self.lomiri_geometry_args = []
137 if width > 0 and height > 0:
138 if self._geo_larger_than_display(width, height):
139 scale_divisor = self._get_scaled_down_geo(width, height)
140 width = width / scale_divisor
141 height = height / scale_divisor
142 logger.info(
143 "Geometry larger than display, scaled down to: %dx%d",
144 width,
145 height
146 )
147 geo_string = "%dx%d" % (width, height)
148 self.lomiri_geometry_args = [
149 '-windowgeometry',
150 geo_string,
151 '-frameless',
152 '-mousetouch'
153 ]
154 return scale_divisor
155

◆ _geo_larger_than_display()

lomiri.shell.tests.LomiriTestCase._geo_larger_than_display (   self,
  width,
  height 
)
protected

Definition at line 167 of file __init__.py.

167 def _geo_larger_than_display(self, width, height):
168 should_scale = getattr(self, 'scale_geo', True)
169 if should_scale:
170 screen = Display.create()
171 screen_width = screen.get_screen_width()
172 screen_height = screen.get_screen_height()
173 return (width > screen_width) or (height > screen_height)
174 else:
175 return False
176

◆ _get_lightdm_mock_path()

lomiri.shell.tests.LomiriTestCase._get_lightdm_mock_path (   self)
protected

Definition at line 264 of file __init__.py.

264 def _get_lightdm_mock_path(self):
265 lib_path = get_mocks_library_path()
266 lightdm_mock_path = os.path.abspath(
267 os.path.join(lib_path, "liblightdm")
268 )
269
270 if not os.path.exists(lightdm_mock_path):
271 raise RuntimeError(
272 "LightDM mock does not exist at path '%s'."
273 % (lightdm_mock_path)
274 )
275 return lightdm_mock_path
276

◆ _get_scaled_down_geo()

lomiri.shell.tests.LomiriTestCase._get_scaled_down_geo (   self,
  width,
  height 
)
protected

Definition at line 177 of file __init__.py.

177 def _get_scaled_down_geo(self, width, height):
178 divisor = 1
179 while self._geo_larger_than_display(width / divisor, height / divisor):
180 divisor = divisor * 2
181 return divisor
182

◆ _launch_lomiri_with_upstart()

lomiri.shell.tests.LomiriTestCase._launch_lomiri_with_upstart (   self,
  binary_path,
  args 
)
protected

Definition at line 233 of file __init__.py.

233 def _launch_lomiri_with_upstart(self, binary_path, args):
234 logger.info("Starting lomiri")
235 self.useFixture(toolkit_fixtures.InitctlEnvironmentVariable(
236 global_=True, QT_LOAD_TESTABILITY=1))
237
238 variables = self._environment
239 variables['ARGS'] = " ".join(args)
240 launch_lomiri_fixture = fixture_setup.RestartLomiriWithTestability(
241 binary_path, variables)
242 self.useFixture(launch_lomiri_fixture)
243 return launch_lomiri_fixture.lomiri_proxy
244

◆ _patch_data_dirs()

lomiri.shell.tests.LomiriTestCase._patch_data_dirs (   self)
protected

Definition at line 245 of file __init__.py.

245 def _patch_data_dirs(self):
246 data_dirs = get_data_dirs(self._data_dirs_mock_enabled)
247 if data_dirs is not None:
248 self._environment['XDG_DATA_DIRS'] = data_dirs
249

◆ _set_proxy()

lomiri.shell.tests.LomiriTestCase._set_proxy (   self,
  proxy 
)
protected
Keep a copy of the proxy object, so we can use it to get common
parts of the shell later on.

Definition at line 277 of file __init__.py.

277 def _set_proxy(self, proxy):
278 """Keep a copy of the proxy object, so we can use it to get common
279 parts of the shell later on.
280
281 """
282 self._proxy = proxy
283 self.addCleanup(self._clear_proxy)
284

◆ _setup_display_details()

lomiri.shell.tests.LomiriTestCase._setup_display_details (   self)
protected

Definition at line 127 of file __init__.py.

127 def _setup_display_details(self):
128 scale_divisor = self._determine_geometry()
129 self._setup_grid_size(scale_divisor)
130

◆ _setup_grid_size()

lomiri.shell.tests.LomiriTestCase._setup_grid_size (   self,
  scale_divisor 
)
protected
Use the grid size that may be supplied or use the default.

Definition at line 156 of file __init__.py.

156 def _setup_grid_size(self, scale_divisor):
157 """Use the grid size that may be supplied or use the default."""
158 if getattr(self, 'grid_unit_px', 0) == 0:
159 if os.getenv('GRID_UNIT_PX') == None:
160 self.grid_size = 8
161 else:
162 self.grid_size = int(os.getenv('GRID_UNIT_PX'))
163 else:
164 self.grid_size = int(self.grid_unit_px / scale_divisor)
165 self._environment["GRID_UNIT_PX"] = str(self.grid_size)
166

◆ get_dash()

lomiri.shell.tests.LomiriTestCase.get_dash (   self)

Definition at line 292 of file __init__.py.

292 def get_dash(self):
293 pid = process_helpers.get_job_pid('lomiri-dash')
294 dash_proxy = introspection.get_proxy_object_for_existing_process(
295 pid=pid,
296 emulator_base=lomiriuitoolkit.LomiriUIToolkitCustomProxyObjectBase
297 )
298 dash_app = dash_helpers.DashApp(dash_proxy)
299 return dash_app.dash
300

◆ launch_lomiri()

lomiri.shell.tests.LomiriTestCase.launch_lomiri (   self,
  mode = "full-greeter",
args 
)
    Launch the lomiri shell, return a proxy object for it.

:param str mode: The type of greeter/shell mode to use
:param args: A list of aguments to pass to lomiri

Definition at line 183 of file __init__.py.

183 def launch_lomiri(self, mode="full-greeter", *args):
184 """
185 Launch the lomiri shell, return a proxy object for it.
186
187 :param str mode: The type of greeter/shell mode to use
188 :param args: A list of aguments to pass to lomiri
189
190 """
191 binary_path = get_binary_path()
192 lib_path = get_lib_path()
193
194 logger.info(
195 "Lib path is '%s', binary path is '%s'",
196 lib_path,
197 binary_path
198 )
199
200 self.patch_lightdm_mock()
201
202 if self._qml_mock_enabled:
203 self._environment['QML2_IMPORT_PATH'] = (
204 get_qml_import_path_with_mock()
205 )
206
207 if self._data_dirs_mock_enabled:
208 self._patch_data_dirs()
209
210 lomiri_cli_args_list = ["--mode={}".format(mode)]
211 if len(args) != 0:
212 lomiri_cli_args_list += args
213
214 app_proxy = self._launch_lomiri_with_upstart(
215 binary_path,
216 self.lomiri_geometry_args + lomiri_cli_args_list
217 )
218
219 self._set_proxy(app_proxy)
220
221 # Ensure that the dash is visible before we return:
222 logger.debug("Lomiri started, waiting for it to be ready.")
223 self.wait_for_lomiri()
224 logger.debug("Lomiri loaded and ready.")
225
226 if model() == 'Desktop':
227 # On desktop, close the dash because it's opened in a separate
228 # window and it gets in the way.
229 process_helpers.stop_job('lomiri-dash')
230
231 return app_proxy
232

◆ main_window()

lomiri.shell.tests.LomiriTestCase.main_window (   self)

Definition at line 302 of file __init__.py.

302 def main_window(self):
303 return self._proxy.select_single(shell.ShellView)
304
305

◆ patch_lightdm_mock()

lomiri.shell.tests.LomiriTestCase.patch_lightdm_mock (   self)

Definition at line 250 of file __init__.py.

250 def patch_lightdm_mock(self):
251 logger.info("Setting up LightDM mock lib")
252 new_ld_library_path = [
253 get_default_extra_mock_libraries(),
254 self._get_lightdm_mock_path()
255 ]
256 if os.getenv('LD_LIBRARY_PATH') is not None:
257 new_ld_library_path.append(os.getenv('LD_LIBRARY_PATH'))
258
259 new_ld_library_path = ':'.join(new_ld_library_path)
260 logger.info("New library path: %s", new_ld_library_path)
261
262 self._environment['LD_LIBRARY_PATH'] = new_ld_library_path
263

◆ setUp()

lomiri.shell.tests.LomiriTestCase.setUp (   self)

Definition at line 115 of file __init__.py.

115 def setUp(self):
116 super().setUp()
117 if is_lomiri7_running():
118 self.useFixture(toolkit_fixtures.HideLomiri7Launcher())
119
120 self._proxy = None
121 self._qml_mock_enabled = True
122 self._data_dirs_mock_enabled = True
123 self._environment = {}
124
125 self._setup_display_details()
126

◆ setUpClass()

lomiri.shell.tests.LomiriTestCase.setUpClass (   cls)

Definition at line 93 of file __init__.py.

93 def setUpClass(cls):
94 try:
95 is_lomiri_running = process_helpers.is_job_running('lomiri')
96 except process_helpers.JobError as e:
97 xdg_config_home = os.getenv(
98 'XDG_CONFIG_HOME', os.path.join(os.getenv('HOME'), '.config'))
99 upstart_config_path = os.path.join(xdg_config_home, 'upstart')
100 logger.error(
101 '`initctl status lomiri` failed, most probably the '
102 'lomiri session could not be found:\n\n'
103 '{0}\n'
104 'Please install lomiri or copy data/lomiri.conf to '
105 '{1}\n'.format(e.output, upstart_config_path)
106 )
107 raise e
108 else:
109 assert not is_lomiri_running, (
110 'Lomiri is currently running, these tests require it to be '
111 'stopped.\n'
112 'Please run this command before running these tests: \n'
113 'initctl stop lomiri\n')
114

◆ wait_for_lomiri()

lomiri.shell.tests.LomiriTestCase.wait_for_lomiri (   self)

Definition at line 288 of file __init__.py.

288 def wait_for_lomiri(self):
289 greeter = self.main_window.wait_select_single(objectName='greeter')
290 greeter.waiting.wait_for(False)
291

Member Data Documentation

◆ _clear_proxy

lomiri.shell.tests.LomiriTestCase._clear_proxy
protected

Definition at line 283 of file __init__.py.

◆ _data_dirs_mock_enabled

lomiri.shell.tests.LomiriTestCase._data_dirs_mock_enabled
protected

Definition at line 122 of file __init__.py.

◆ _environment

lomiri.shell.tests.LomiriTestCase._environment
protected

Definition at line 123 of file __init__.py.

◆ _proxy

lomiri.shell.tests.LomiriTestCase._proxy
protected

Definition at line 120 of file __init__.py.

◆ _qml_mock_enabled

lomiri.shell.tests.LomiriTestCase._qml_mock_enabled
protected

Definition at line 121 of file __init__.py.

◆ grid_size

lomiri.shell.tests.LomiriTestCase.grid_size

Definition at line 160 of file __init__.py.

◆ lomiri_geometry_args

lomiri.shell.tests.LomiriTestCase.lomiri_geometry_args

Definition at line 136 of file __init__.py.


The documentation for this class was generated from the following file: