Home | History | Annotate | Download | only in ui_AppLauncher
      1 # Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 import os
      7 
      8 from autotest_lib.client.common_lib.cros import chrome
      9 from autotest_lib.client.cros import service_stopper
     10 from autotest_lib.client.cros.input_playback import input_playback
     11 from autotest_lib.client.cros.graphics import graphics_utils
     12 from autotest_lib.client.cros.ui import ui_test_base
     13 
     14 
     15 class ui_AppLauncher(ui_test_base.ui_TestBase):
     16     """
     17     Collects screenshots of the App Launcher.
     18     See comments on parent class for overview of how things flow.
     19 
     20     """
     21 
     22     # The keyboard we are emulating
     23     _KEYBOARD_PROP = 'keyboard.prop'
     24 
     25     # The keyboard playback data
     26     _KEYBOARD_PLAYBACK = 'searchkey_tabs_enter'
     27 
     28     def initialize(self):
     29         """Perform necessary initialization prior to test run.
     30 
     31         Private Attributes:
     32           _services: service_stopper.ServiceStopper object
     33         """
     34         # Do not switch off screen for screenshot utility.
     35         self._services = service_stopper.ServiceStopper(['powerd'])
     36         self._services.stop_services()
     37 
     38     def cleanup(self):
     39         self._services.restore_services()
     40 
     41     def capture_screenshot(self, filepath):
     42         """
     43         Take a screenshot of the App Launcher page.
     44 
     45         Implements the abstract method capture_screenshot
     46 
     47         @param filepath: string, Complete path to save the screenshot to.
     48 
     49         """
     50 
     51         # Login and load the default apps
     52         with chrome.Chrome(disable_default_apps=False):
     53 
     54             # Setup the keyboard file's paths
     55             property_file = os.path.join(self.bindir, self._KEYBOARD_PROP)
     56             playback_file = os.path.join(self.bindir, self._KEYBOARD_PLAYBACK)
     57 
     58             # Setup and playback the keyboard commands to open the launcher
     59             player = input_playback.InputPlayback()
     60             player.emulate('keyboard', property_file)
     61             player.find_connected_inputs()
     62             player.blocking_playback(playback_file, 'keyboard')
     63             player.close()
     64 
     65             # Take a screenshot and crop to just the launcher
     66             w, h = graphics_utils.get_internal_resolution()
     67             upper_x = (w - self.launcher_width) / 2
     68             upper_y = (h - self.launcher_height) / 2
     69             box = (upper_x, upper_y, upper_x + self.launcher_width, upper_y +
     70                    self.launcher_height)
     71 
     72             graphics_utils.take_screenshot_crop(filepath, box)
     73 
     74     def run_once(self):
     75         # The default launcher dimensions
     76         self.launcher_width = 768
     77         self.launcher_height = 570
     78 
     79         w, h = graphics_utils.get_internal_resolution()
     80         logging.info('DUT screen width: %d' % w)
     81         logging.info('DUT screen height: %d' % h)
     82 
     83         # If we have a high DPI screen, launcher size is doubled
     84         if self.launcher_width * 2 < w:
     85             self.launcher_width *= 2
     86             self.launcher_height *= 2
     87             self.tagged_testname += '.large'
     88 
     89         self.run_screenshot_comparison_test()
     90