#!/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 Fuchsia unit tests in the debug configuration.
###
### Arguments:
###   --package-filter: Only runs tests in packages that match the given `find` statement.
###   --gtest-filter: In the packages, only runs tests that match the given filter.
###                   For example: --gtest-filter "*FlatlandConnection*" to run any tests
###                   that have the phrase FlatlandConnection in them.
###   --unoptimized: Disables C++ compiler optimizations.
###   --count: Number of times to run the test. By default runs 1 time.
###            See `ffx test run --count`.
###   --goma: Speeds up builds for Googlers. sorry. :(

set -e  # Fail on any error.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?

ensure_fuchsia_dir
ensure_engine_dir
ensure_ninja

# Parse arguments.
runtime_mode="debug"
compilation_mode="jit"
fuchsia_cpu="x64"
goma=0
goma_flags=""
ninja_cmd="ninja"
package_filter="*tests-0.far"
test_filter_flags=""
unoptimized_flags=""
unoptimized_suffix=""
count_flags=""
while [[ $# -gt 0 ]]; do
  case $1 in
    --package_filter|--package-filter)
      shift # past argument
      package_filter="$1"
      shift # past value
      ;;
    --count)
      shift # past argument
      count_flags="--count $1"
      shift # past value
      ;;
    --goma)
      goma=1
      goma_flags="--goma"
      ninja_cmd="autoninja"
      shift # past argument
      ;;
    --unopt|--unoptimized)
      unoptimized_flags="--unoptimized"
      unoptimized_suffix="_unopt"
      shift # past argument
      ;;
    --gtest_filter|--gtest-filter)
      shift # past argument
      test_filter_flags="-- --gtest_filter=$1"
      shift # past value
      ;;
    *)
      engine-error "Unknown argument: $1"
      exit 1
      ;;
  esac
done

all_gn_args="--fuchsia --no-lto --fuchsia-cpu="${fuchsia_cpu}" --runtime-mode="${runtime_mode}" ${goma_flags} ${unoptimized_flags}"
engine-info "GN args: ${all_gn_args}"

"${ENGINE_DIR}"/flutter/tools/gn ${all_gn_args}

fuchsia_out_dir_name=fuchsia_${runtime_mode}${unoptimized_suffix}_${fuchsia_cpu}
fuchsia_out_dir="${ENGINE_DIR}"/out/"${fuchsia_out_dir_name}"
engine-info "Building ${fuchsia_out_dir_name}..."
${ninja_cmd} -C "${fuchsia_out_dir}" fuchsia_tests

engine-info "Registering debug symbols..."
# .jiri_root/bin/ffx needs to run from $FUCHSIA_DIR.
pushd $FUCHSIA_DIR
"$FUCHSIA_DIR"/.jiri_root/bin/ffx debug symbol-index add "${fuchsia_out_dir}"/.build-id --build-dir "${fuchsia_out_dir}"
popd  # $FUCHSIA_DIR

test_packages="$(find ${fuchsia_out_dir} -name "${package_filter}")"

engine-info "Publishing test packages..."
test_names=()
for test_package in $test_packages
do
  engine-info "... publishing ${test_package} ..."
  $ENGINE_DIR/fuchsia/sdk/linux/tools/x64/pm publish -a -r $FUCHSIA_DIR/$(cat $FUCHSIA_DIR/.fx-build-dir)/amber-files -f "${test_package}"
  test_names+=("$(basename ${test_package} | sed -e "s/-0.far//")")
done

# .jiri_root/bin/ffx needs to run from $FUCHSIA_DIR.

pushd $FUCHSIA_DIR

# TODO(akbiggs): Match the behavior of this script more closely with test_suites.yaml.
engine-info "Running tests... (if this fails because of Launch(InstanceCannotResolve), run fx serve and try again)"
for test_name in "${test_names[@]}"
do
  # ParagraphTest.* fails in txt_tests.
  if [[ "${test_name}" == "txt_tests" ]]
  then
    engine-warning "Skipping txt_tests because I don't know how to filter out ParagraphTests.*"
    continue
  fi
  # ${test_filter_flags} must come last below because it includes " -- " to start program arguments.
  test_cmd="${FUCHSIA_DIR}/.jiri_root/bin/ffx test run fuchsia-pkg://fuchsia.com/${test_name}#meta/${test_name}.cm ${count_flags} ${test_filter_flags}"

  engine-info "... $test_cmd ..."
  $test_cmd
done

popd  # $FUCHSIA_DIR
