Home | History | Annotate | Download | only in gtest_ios
      1 #!/bin/bash -p
      2 
      3 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 set -eu
      8 
      9 # Environment sanitization. Set a known-safe PATH. Clear environment variables
     10 # that might impact the interpreter's operation. The |bash -p| invocation
     11 # on the #! line takes the bite out of BASH_ENV, ENV, and SHELLOPTS (among
     12 # other features), but clearing them here ensures that they won't impact any
     13 # shell scripts used as utility programs. SHELLOPTS is read-only and can't be
     14 # unset, only unexported.
     15 export PATH="/usr/bin:/bin:/usr/sbin:/sbin"
     16 unset BASH_ENV CDPATH ENV GLOBIGNORE IFS POSIXLY_CORRECT
     17 export -n SHELLOPTS
     18 
     19 readonly ScriptDir=$(dirname "$(echo ${0} | sed -e "s,^\([^/]\),$(pwd)/\1,")")
     20 readonly ScriptName=$(basename "${0}")
     21 readonly ThisScript="${ScriptDir}/${ScriptName}"
     22 readonly SimExecutable="${BUILD_DIR}/ninja-iossim/${CONFIGURATION}/iossim"
     23 
     24 # Helper to print a line formatted for Xcodes build output parser.
     25 XcodeNote() {
     26   echo "${ThisScript}:${1}: note: ${2}"
     27 }
     28 
     29 # Helper to print a divider to make things stick out in a busy output window.
     30 XcodeHeader() {
     31   echo "note: _________________________________________________________________"
     32   echo "note: _________________________________________________________________"
     33   echo "note: _________________________________________________________________"
     34   XcodeNote "$1" ">>>>>     $2"
     35   echo "note: _________________________________________________________________"
     36   echo "note: _________________________________________________________________"
     37   echo "note: _________________________________________________________________"
     38 }
     39 
     40 # Kills the iPhone Simulator if it is running.
     41 KillSimulator() {
     42   /usr/bin/killall "iPhone Simulator" 2> /dev/null || true
     43 }
     44 
     45 # Runs tests via the iPhone Simulator for multiple devices.
     46 RunTests() {
     47   local -r appPath="${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app"
     48 
     49   if [[ ! -x "${SimExecutable}" ]]; then
     50     echo "Unable to run tests: ${SimExecutable} was not found/executable."
     51     exit 1
     52   fi
     53 
     54   for device in 'iPhone' 'iPad'; do
     55     iosVersion="6.1"
     56     KillSimulator
     57     local command=(
     58       "${SimExecutable}" "-d${device}" "-s${iosVersion}" "${appPath}"
     59     )
     60     # Pass along any command line flags
     61     if [[ "$#" -gt 0 ]]; then
     62       command+=( "--" "${@}" )
     63     fi
     64     XcodeHeader ${LINENO} "Launching tests for ${device} (iOS ${iosVersion})"
     65     "${command[@]}"
     66 
     67     # If the command didn't exit successfully, abort.
     68     if [[ $? -ne 0 ]]; then
     69       exit $?;
     70     fi
     71   done
     72 }
     73 
     74 # Time to get to work.
     75 
     76 if [[ "${PLATFORM_NAME}" != "iphonesimulator" ]]; then
     77   XcodeNote ${LINENO} "Skipping running of unittests for device build."
     78 else
     79   if [[ "$#" -gt 0 ]]; then
     80     RunTests "${@}"
     81   else
     82     RunTests
     83   fi
     84   KillSimulator
     85 fi
     86 
     87 exit 0
     88