#!/bin/sh

# Copyright 2015 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Runs a series of unit tests for an app bundle.
# This is an example script to show how to use the StdRedirect library.

# $1 path to app bundle
# $2 path to xctest bundle
# $3 path to stderr
# $4 path to StdRedirect.dylib

set -e

if [ $# -ne 4 ]; then
  echo "Usage RunTests <app bundle path> <xctest bundle path> <stderr path> <redirect library path>"
  exit 1
fi

SIMULATOR_RUNNING=$(osascript -e "tell application \"System Events\" to (name of processes) contains \"iOS Simulator\"")

TEST_DEVICE_ID=$(xcrun simctl create TestDevice com.apple.CoreSimulator.SimDeviceType.iPhone-6 com.apple.CoreSimulator.SimRuntime.iOS-8-3)

# Instruments will return an error because we are calling it without a template arg.
# It's the only way I know of to launch the simulator safely using xcrun.
# This will launch the simulator with a given device. If the simulator is already running
# it will switch to the given device.
# Radar 21392428 xcrun should allow me to specifiy "iOS Simulator" in some manner
xcrun instruments -w $TEST_DEVICE_ID &>/dev/null || true

xcrun simctl install $TEST_DEVICE_ID $1

PLATFORM_PATH="$(xcrun --sdk iphonesimulator --show-sdk-platform-path)"
export SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="$PLATFORM_PATH/Developer/Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection:$4"
export SIMCTL_CHILD_GSTDERR="$3"
export SIMCTL_CHILD_XCInjectBundle="$2"
BUNDLE_BASE=$(basename $1)
BUNDLE_INFO_PLIST="$1/Info.plist"
EXECUTABLE_NAME=$(xcrun PlistBuddy -c "Print :CFBundleExecutable" "$BUNDLE_INFO_PLIST")
BUNDLE_ID=$(xcrun PlistBuddy -c "Print :CFBundleIdentifier" "$BUNDLE_INFO_PLIST")

# The "*" is unfortunate, but there is no way to get back the UUID of the installed application.
# Since we created the simulator from scratch, there should only be one app installed on it.
# Radar 21392479 simctl install should return the UUID of the installed app.
# Radar 21392325 simctl getenv never appears to function
export SIMCTL_CHILD_XCInjectBundleInto="$HOME/Library/Developer/CoreSimulator/Devices/$TEST_DEVICE_ID/data/Containers/Bundle/Application/*/$BUNDLE_BASE/$EXECUTABLE_NAME"
export SIMCTL_CHILD_DYLD_FALLBACK_FRAMEWORK_PATH="$PLATFORM_PATH/Developer/Library/Frameworks"
IOS_PID=$(xcrun simctl launch $TEST_DEVICE_ID "$BUNDLE_ID" -XCTest All)
IOS_PID=$(echo $IOS_PID | awk '{ print $2 }')

# The simulator is not a subprocess of the script, so we cannot wait on it and must poll instead.
while kill -0 "$IOS_PID" &>/dev/null; do
  sleep 0.5
done

# If the simulator wasn't running when we started, then we should clean it up.
if [ SIMULATOR_RUNNING == "false" ]; then
  osascript -e "tell application \"iOS Simulator\" to quit"
fi

# Radar 21392585 simctl delete should allows me to delete multiple devices in one call
xcrun simctl delete $TEST_DEVICE_ID
