# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os import logging import re import subprocess from telemetry.core import platform from telemetry.internal.platform import device IOSSIM_BUILD_DIRECTORIES = [ 'Debug-iphonesimulator', 'Profile-iphonesimulator', 'Release-iphonesimulator' ] class IOSDevice(device.Device): def __init__(self): super(IOSDevice, self).__init__(name='ios', guid='ios') @classmethod def GetAllConnectedDevices(cls, blacklist): return [] def _IsIosDeviceAttached(): devices = subprocess.check_output('system_profiler SPUSBDataType', shell=True) for line in devices.split('\n'): if line and re.match(r'\s*(iPod|iPhone|iPad):', line): return True return False def _IsIosSimulatorAvailable(chrome_root): """Determines whether an iOS simulator is present in the local checkout. Assumes the iOS simulator (iossim) and Chromium have already been built. Returns: True if at least one simulator is found, otherwise False. """ for build_dir in IOSSIM_BUILD_DIRECTORIES: iossim_path = os.path.join( chrome_root, 'out', build_dir, 'iossim') chromium_path = os.path.join( chrome_root, 'out', build_dir, 'Chromium.app') # If the iOS simulator and Chromium app are present, return True if os.path.exists(iossim_path) and os.path.exists(chromium_path): return True return False def FindAllAvailableDevices(options): """Returns a list of available devices. """ # TODO(baxley): Add support for all platforms possible. Probably Linux, # probably not Windows. if platform.GetHostPlatform().GetOSName() != 'mac': return [] if options.chrome_root is None: logging.warning('--chrome-root is not specified, skip iOS simulator tests.') return [] if (not _IsIosDeviceAttached() and not _IsIosSimulatorAvailable(options.chrome_root)): return [] return [IOSDevice()]