#!/bin/bash

set -e


# Needed because if it is set, cd may print the path it changed to.
unset CDPATH

# On Mac OS, readlink -f doesn't work, so follow_links traverses the path one
# link at a time, and then cds into the link destination and find out where it
# ends up.
#
# The function is enclosed in a subshell to avoid changing the working directory
# of the caller.
function follow_links() (
  cd -P "$(dirname -- "$1")"
  file="$PWD/$(basename -- "$1")"
  while [[ -L "$file" ]]; do
    cd -P "$(dirname -- "$file")"
    file="$(readlink -- "$file")"
    cd -P "$(dirname -- "$file")"
    file="$PWD/$(basename -- "$file")"
  done
  echo "$file"
)

SCRIPT_DIR=$(follow_links "$(dirname -- "${BASH_SOURCE[0]}")")
SRC_DIR="$(cd "$SCRIPT_DIR/../../.."; pwd -P)"

if uname -m | grep "arm64"; then
  FLUTTER_ENGINE="ios_debug_sim_unopt_arm64"
else
  FLUTTER_ENGINE="ios_debug_sim_unopt"
fi

if [[ $# -eq 1 ]]; then
  FLUTTER_ENGINE="$1"
fi

# Make sure simulators rotate automatically for "PlatformViewRotation" test.
# Can also be set via Simulator app Device > Rotate Device Automatically
defaults write com.apple.iphonesimulator RotateWindowWhenSignaledByGuest -int 1

SCENARIO_PATH=$SRC_DIR/out/$FLUTTER_ENGINE/scenario_app/Scenarios
pushd .
cd $SCENARIO_PATH

RESULT_BUNDLE_FOLDER=$(mktemp -d ios_scenario_xcresult_XXX)
RESULT_BUNDLE_PATH="${SCENARIO_PATH}/${RESULT_BUNDLE_FOLDER}"

# Zip and upload xcresult to luci.
# First parameter ($1) is the zip output name.
zip_and_upload_xcresult_to_luci () {
  # We don't want the zip to contain the abusolute path,
  # so use relative path (./$RESULT_BUNDLE_FOLDER) instead.
  zip -q -r $1 "./$RESULT_BUNDLE_FOLDER"
  mv -f $1 $FLUTTER_TEST_OUTPUTS_DIR
  exit 1
}

echo "Running simulator tests with Skia"
echo ""

# TODO(vashworth): Stop skipping testMultiplePlatformViewsWithOverlays once
# https://github.com/flutter/flutter/issues/138193 is resolved
if set -o pipefail && xcodebuild -sdk iphonesimulator \
  -scheme Scenarios \
  -resultBundlePath "$RESULT_BUNDLE_PATH/ios_scenario.xcresult" \
  -destination 'platform=iOS Simulator,OS=16.2,name=iPhone SE (3rd generation)' \
  clean test \
  FLUTTER_ENGINE="$FLUTTER_ENGINE" \
  -skip-testing ScenariosUITests/UnobstructedPlatformViewTests/testMultiplePlatformViewsWithOverlays; then
  echo "test success."
else
  echo "test failed."
  zip_and_upload_xcresult_to_luci "ios_scenario_xcresult.zip"
fi
rm -rf $RESULT_BUNDLE_PATH

echo "Running simulator tests with Impeller"
echo ""

# Skip testFontRenderingWhenSuppliedWithBogusFont: https://github.com/flutter/flutter/issues/113250
# Skip golden tests that use software rendering: https://github.com/flutter/flutter/issues/131888
if set -o pipefail && xcodebuild -sdk iphonesimulator \
  -scheme Scenarios \
  -resultBundlePath "$RESULT_BUNDLE_PATH/ios_scenario.xcresult" \
  -destination 'platform=iOS Simulator,OS=16.2,name=iPhone SE (3rd generation)' \
  clean test \
  FLUTTER_ENGINE="$FLUTTER_ENGINE" \
  -skip-testing ScenariosUITests/MultiplePlatformViewsBackgroundForegroundTest/testPlatformView \
  -skip-testing ScenariosUITests/MultiplePlatformViewsTest/testPlatformView \
  -skip-testing ScenariosUITests/NonFullScreenFlutterViewPlatformViewUITests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipPathTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipPathWithTransformTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipRectAfterMovedTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipRectTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipRectWithTransformTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipRRectTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationClipRRectWithTransformTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationLargeClipRRectTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationLargeClipRRectWithTransformTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationOpacityTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewMutationTransformTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewRotation/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewUITests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewWithNegativeOtherBackDropFilterTests/testPlatformView \
  -skip-testing ScenariosUITests/PlatformViewWithOtherBackdropFilterTests/testPlatformView \
  -skip-testing ScenariosUITests/RenderingSelectionTest/testSoftwareRendering \
  -skip-testing ScenariosUITests/TwoPlatformViewClipPathTests/testPlatformView \
  -skip-testing ScenariosUITests/TwoPlatformViewClipRectTests/testPlatformView \
  -skip-testing ScenariosUITests/TwoPlatformViewClipRRectTests/testPlatformView \
  -skip-testing ScenariosUITests/TwoPlatformViewsWithOtherBackDropFilterTests/testPlatformView \
  -skip-testing ScenariosUITests/UnobstructedPlatformViewTests/testMultiplePlatformViewsWithOverlays \
  # Plist with FLTEnableImpeller=YES, all projects in the workspace requires this file.
  # For example, FlutterAppExtensionTestHost has a dummy file under the below directory.
  INFOPLIST_FILE="Scenarios/Info_Impeller.plist"; then
  echo "test success."
else
  echo "test failed."
  zip_and_upload_xcresult_to_luci "ios_scenario_impeller_xcresult.zip"
fi
rm -rf $RESULT_BUNDLE_PATH

popd
