#!/bin/bash
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Runs the Android scenario tests on a connected device.
#   To run the test on a x64 emulator, build `android_debug_unopt_x64`, and then run
#   `./run_android_tests.sh android_debug_unopt_x64`.

set -e

# Check number of args.
if [ $# -lt 1 ]; then
  echo "Usage: $0 <variant> [flags*]"
  exit 1
fi

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

BUILD_VARIANT=$1

# 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
)"
OUT_DIR="$SRC_DIR/out/$BUILD_VARIANT"
CONTENTS_GOLDEN="$SRC_DIR/flutter/testing/scenario_app_android_output.txt"

# TODO(matanlurey): If the test runner was purely in Dart, this would not have
# been necesesary to repeat. However my best guess is the Dart script was seen
# as potentially crashing, so it was wrapped in a shell script. If we can change
# this, we should.
#
# Define a logs directory for ADB and screenshots.
# By default, it should be the environment variable FLUTTER_LOGS_DIR, but if
# it's not set, use the output directory and append "scenario_app/logs".
LOGS_DIR=${FLUTTER_LOGS_DIR:-"$OUT_DIR/scenario_app/logs"}

# Create the logs directory if it doesn't exist.
mkdir -p "$LOGS_DIR"

# Dump the logcat and symbolize stack traces before exiting.
function dumpLogcat {
  ndkstack="windows-x86_64"
  if [ "$(uname)" == "Darwin" ]; then
    ndkstack="darwin-x86_64"
  elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
    ndkstack="linux-x86_64"
  fi

  # Get the expected location of logcat.txt.
  logcat_file="$LOGS_DIR/logcat.txt"

  echo "-> Symbolize stack traces"
  "$SRC_DIR"/third_party/android_tools/ndk/prebuilt/"$ndkstack"/bin/ndk-stack \
    -sym "$OUT_DIR" \
    -dump "$logcat_file"
  echo "<- Done"

  echo "-> Dump full logcat"
  cat "$logcat_file"
  echo "<- Done"

  # Output the directory for the logs.
  echo "TIP: Full logs are in $LOGS_DIR"
}

# On error, dump the logcat and symbolize stack traces.
trap dumpLogcat ERR

cd $SCRIPT_DIR

"$SRC_DIR"/third_party/dart/tools/sdks/dart-sdk/bin/dart pub get

"$SRC_DIR"/third_party/dart/tools/sdks/dart-sdk/bin/dart run \
  "$SCRIPT_DIR"/bin/android_integration_tests.dart \
  --out-dir="$OUT_DIR" \
  --logs-dir="$LOGS_DIR" \
  --output-contents-golden="$CONTENTS_GOLDEN" \
  "$@"
