← Back to team overview

ubuntu-touch-coreapps-reviewers team mailing list archive

[Merge] lp:~nskaggs/ubuntu-clock-app/fix-clock-launching into lp:ubuntu-clock-app

 

Nicholas Skaggs has proposed merging lp:~nskaggs/ubuntu-clock-app/fix-clock-launching into lp:ubuntu-clock-app.

Commit message:
Autopilot test cleanup for clock

* fix launching and add option for building with SDK
* remove fixtures
* Remove debug print_trees

Requested reviews:
  Ubuntu Clock Developers (ubuntu-clock-dev)

For more details, see:
https://code.launchpad.net/~nskaggs/ubuntu-clock-app/fix-clock-launching/+merge/287238

Autopilot test cleanup for clock

* fix launching and add option for building with SDK
* remove fixtures
* Remove debug print_trees
-- 
Your team Ubuntu Clock Developers is requested to review the proposed merge of lp:~nskaggs/ubuntu-clock-app/fix-clock-launching into lp:ubuntu-clock-app.
=== removed file 'tests/autopilot/ubuntu_clock_app/CMakePluginParser.py'
--- tests/autopilot/ubuntu_clock_app/CMakePluginParser.py	2015-08-14 05:34:49 +0000
+++ tests/autopilot/ubuntu_clock_app/CMakePluginParser.py	1970-01-01 00:00:00 +0000
@@ -1,119 +0,0 @@
-# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
-#
-# Copyright (C) 2014-2015 Canonical Ltd.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Author:
-#   David Planella <david.planella@xxxxxxxxxx>
-
-"""
-This module parses a configuration file from the Qt Creator's CMake plugin and
-enables programmatical read-only access to several of its configuration options
-"""
-
-from lxml import etree
-
-
-class CMakePluginParseError(Exception):
-    """
-    Custom exception for errors during the parsing of a
-    CMakeLists.txt.user file
-    """
-    def __init__(self, message):
-        Exception.__init__(self, message)
-
-
-class CMakePluginParser(object):
-    """
-    Parses a CMake plugin's config file and provides R/O access to its
-    configuration options """
-
-    def __init__(self, cmakelists_usr_file='CMakeLists.txt.user'):
-        self.usr_file = cmakelists_usr_file
-
-        try:
-            self.info = etree.parse(self.usr_file)
-        except:
-            raise CMakePluginParseError("Could not open the given " +
-                                        "CMakeLists.txt.user file: " +
-                                        self.info)
-
-    def _get_active_build_target(self):
-        """
-        Return the active build target from the current project in Qt Creator
-        """
-
-        try:
-            active_build_target_nr = self.info.xpath(
-                "./data/variable" +
-                "[text()='ProjectExplorer.Project.ActiveTarget']" +
-                "/../value")[0].text
-        except:
-            raise CMakePluginParseError("Could not find the active build " +
-                                        "target in the CMake plugin's config")
-
-        active_build_target = "ProjectExplorer.Project.Target." + \
-            active_build_target_nr
-
-        return active_build_target
-
-    def _get_active_build_config(self, active_build_target):
-        """Return the active build config from the active build targed"""
-
-        try:
-            active_build_config_nr = self.info.xpath(
-                "./data/variable[text()='{0}']".format(active_build_target) +
-                "/..//value[@key="
-                "'ProjectExplorer.Target.ActiveBuildConfiguration']")[0].text
-        except:
-            raise CMakePluginParseError("Could not find the active build " +
-                                        "target's active build config " +
-                                        "in the CMake plugin's config")
-
-        active_build_config = "ProjectExplorer.Target.BuildConfiguration." + \
-            active_build_config_nr
-
-        return active_build_config
-
-    def _get_active_build_config_path(self):
-        """Return the active build config's absolute path"""
-
-        active_build_target = self._get_active_build_target()
-        active_build_config = \
-            self._get_active_build_config(active_build_target)
-
-        try:
-            active_build_config_node = self.info.xpath(
-                "./data/variable[text()='{0}']".format(active_build_target) +
-                "/..//valuemap[@key='{0}']".format(active_build_config))[0]
-        except:
-            raise CMakePluginParseError("Could not find the active " +
-                                        "build config's node " +
-                                        "in the CMake plugin's config")
-
-        try:
-            active_build_config_path = active_build_config_node.xpath(
-                "./value[@key=" +
-                "'ProjectExplorer.BuildConfiguration.BuildDirectory']")[0].text
-        except:
-            raise CMakePluginParseError("Could not find the active build " +
-                                        "directory in the CMake plugin's " +
-                                        "config")
-
-        return active_build_config_path
-
-    @property
-    def active_build_dir(self):
-        """Return the active build config's directory as an absolute path"""
-        return self._get_active_build_config_path()

=== modified file 'tests/autopilot/ubuntu_clock_app/__init__.py'
--- tests/autopilot/ubuntu_clock_app/__init__.py	2016-02-02 23:45:47 +0000
+++ tests/autopilot/ubuntu_clock_app/__init__.py	2016-02-25 22:13:23 +0000
@@ -289,7 +289,7 @@
 
         cityList.count.wait_for(GreaterThan(0))
 
-        cityList.print_tree()  # Debug line
+        #cityList.print_tree()  # Debug line
 
         for index in range(int(cityList.count)):
             world_city_item = self.wait_select_single(
@@ -402,7 +402,7 @@
         self.unselect_selected_days()
         index = 0
 
-        self.print_tree()  # Debug line
+        #self.print_tree()  # Debug line
 
         for index in range(len(days)):
             for index2 in range(self._get_num_of_days()):

=== removed file 'tests/autopilot/ubuntu_clock_app/fixture_setup.py'
--- tests/autopilot/ubuntu_clock_app/fixture_setup.py	2015-09-14 20:53:36 +0000
+++ tests/autopilot/ubuntu_clock_app/fixture_setup.py	1970-01-01 00:00:00 +0000
@@ -1,44 +0,0 @@
-# Copyright (C) 2014-2015 Canonical Ltd
-#
-# This file is part of Ubuntu Clock App
-#
-# Ubuntu Clock App is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 3 as
-# published by the Free Software Foundation.
-#
-# Ubuntu Clock App is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-"""Clock app autopilot fixtures."""
-
-import fixtures
-import logging
-import subprocess
-
-
-class LocationServiceTestEnvironment(fixtures.Fixture):
-
-    def setUp(self):
-        super(LocationServiceTestEnvironment, self).setUp()
-        self._set_location_service_testing(True)
-        self.addCleanup(self._set_location_service_testing, False)
-
-    def _set_location_service_testing(self, test_mode):
-        test = 'true' if test_mode else 'false'
-        try:
-            subprocess.check_call(
-                'sudo setprop custom.location.testing {}'.format(test),
-                shell=True)
-            subprocess.check_call(
-                'sudo restart ubuntu-location-service && '
-                'restart ubuntu-location-service-trust-stored',
-                shell=True)
-        except subprocess.CalledProcessError:
-            logger = logging.getLogger(__name__)
-            logger.error('Unable to start location service in testing mode '
-                         'tests may fail as a result.')

=== modified file 'tests/autopilot/ubuntu_clock_app/tests/__init__.py'
--- tests/autopilot/ubuntu_clock_app/tests/__init__.py	2015-08-14 05:34:49 +0000
+++ tests/autopilot/ubuntu_clock_app/tests/__init__.py	2016-02-25 22:13:23 +0000
@@ -30,7 +30,6 @@
 from ubuntuuitoolkit import base
 
 import ubuntu_clock_app
-from ubuntu_clock_app import fixture_setup, CMakePluginParser
 
 logger = logging.getLogger(__name__)
 
@@ -42,26 +41,33 @@
 
     """
 
+    # Source built locally paths
+    local_location = os.path.dirname(os.path.dirname(os.getcwd()))
+    local_build_location = os.path.join(local_location, 'builddir')
+    local_build_location_qml = os.path.join(
+        local_location, 'app/ubuntu-clock-app.qml')
+    #local_build_location_binary = os.path.join(local_build_location, 'app')
+    local_build_location_backend = os.path.join(local_build_location, 'backend')
+
+
+    # Source built with SDK paths
+    sdk_build_location = os.path.join(os.path.dirname(local_location),
+                                      os.path.basename(local_location)
+                                      + '-build')
+    sdk_build_location_qml = os.path.join(
+        local_location, 'app/ubuntu-clock-app.qml')
+    #sdk_build_location_binary = os.path.join(sdk_build_location, 'app/ubuntu-clock-app')
+    sdk_build_location_backend = os.path.join(sdk_build_location, 'backend')
+
+    # Installed binary paths
+    #installed_location_binary = '/usr/bin/ubuntu-clock-app'
+    installed_location_qml = '/usr/share/ubuntu-clock-app/ubuntu-clock-app.qml'
+    installed_location_backend = ""
+    if glob.glob('/usr/lib/*/qt5/qml/ClockApp'):
+        self.installed_location_backend = \
+            glob.glob('/usr/lib/*/qt5/qml/ClockApp')[0]
+
     def setUp(self):
-        # setup paths
-        self.binary = 'ubuntu-clock-app'
-        self.source_dir = os.path.dirname(
-            os.path.dirname(os.path.abspath('.')))
-        self.build_dir = self._get_build_dir()
-
-        self.local_location = self.source_dir
-        self.local_location_qml = os.path.join(self.source_dir,
-                                               'app', self.binary + '.qml')
-
-        self.local_location_backend = os.path.join(self.build_dir, 'backend')
-
-        self.installed_location_backend = ""
-        if glob.glob('/usr/lib/*/qt5/qml/ClockApp'):
-            self.installed_location_backend = \
-                glob.glob('/usr/lib/*/qt5/qml/ClockApp')[0]
-        self.installed_location_qml = \
-            '/usr/share/ubuntu-clock-app/ubuntu-clock-app.qml'
-
         self.sqlite_dir = os.path.expanduser(
             "~/.local/share/com.ubuntu.clock")
         self.backup_dir = self.sqlite_dir + ".backup"
@@ -70,9 +76,7 @@
         self.temp_move_sqlite_db()
         self.addCleanup(self.restore_sqlite_db)
 
-        # setup fixtures and launcher
-        self.useFixture(fixture_setup.LocationServiceTestEnvironment())
-        self.useFixture(fixtures.EnvironmentVariable('LC_ALL', newvalue='C'))
+        # setup launcher
         self.launcher, self.test_type = self.get_launcher_and_type()
 
         # launch application under introspection
@@ -80,9 +84,12 @@
         self.app = ubuntu_clock_app.ClockApp(self.launcher(), self.test_type)
 
     def get_launcher_and_type(self):
-        if os.path.exists(self.local_location_backend):
+        if os.path.exists(self.local_build_location_backend):
             launcher = self.launch_test_local
             test_type = 'local'
+        elif os.path.exists(self.sdk_build_location_backend):
+            launcher = self.launch_test_sdk
+            test_type = 'sdk'
         elif os.path.exists(self.installed_location_backend):
             launcher = self.launch_test_installed
             test_type = 'deb'
@@ -95,8 +102,17 @@
     def launch_test_local(self):
         return self.launch_test_application(
             base.get_qmlscene_launch_command(),
-            self.local_location_qml,
-            "-I", self.local_location_backend,
+            self.local_build_location_qml,
+            "-I", self.local_build_location_backend,
+            app_type='qt',
+            emulator_base=ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase)
+
+    @autopilot_logging.log_action(logger.info)
+    def launch_test_sdk(self):
+        return self.launch_test_application(
+            base.get_qmlscene_launch_command(),
+            self.sdk_build_location_qml,
+            "-I", self.sdk_build_location_backend,
             app_type='qt',
             emulator_base=ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase)
 
@@ -143,20 +159,3 @@
                 shutil.move(self.backup_dir, self.sqlite_dir)
             except:
                 logger.error("Failed to restore database")
-
-    def _get_build_dir(self):
-        """
-        Returns the build dir after having parsed the CMake config file
-        generated by Qt Creator. If it cannot find it or it cannot be parsed,
-        an in-tree build is assumed and thus returned.
-        """
-        try:
-            cmake_config = CMakePluginParser.CMakePluginParser(os.path.join(
-                self.source_dir, 'CMakeLists.txt.user'))
-            build_dir = cmake_config.active_build_dir
-        except:
-            logger.error("Error parsing CMakeLists.txt.user %s",
-                         sys.exc_info()[0])
-            build_dir = os.path.join(self.source_dir, 'builddir')
-
-        return build_dir


References