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

### Test the helper functions defined in //tools/devshell/README.md#helper-functions

BT_FILE_DEPS=(
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/platform.sh"
)

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../../lib/vars.sh || exit $?
unset -f fx-gen

# Replace fx-gen with a stub.
fx-gen() {
  return 0
}

TEST_clean_local_environment() {
  # This variable should be empty.
  BT_EXPECT_EMPTY "${devshell_lib_dir}"
}

TEST_fx-config-read() {
  BT_ASSERT_FUNCTION_EXISTS fx-config-read
  BT_ASSERT_FUNCTION_EXISTS fx-build-dir-write

  local -r BUILD_DIR_REL="out/x64test"
  local -r HOST_OUT_REL="host_x64"

  local -r EXPECT_BUILD_DIR="${FUCHSIA_DIR}/${BUILD_DIR_REL}"
  local -r EXPECT_HOST_OUT="${EXPECT_BUILD_DIR}/${HOST_OUT_REL}"

  # fx-build-config-load expects a {build}/fx.config
  mkdir -p "${EXPECT_BUILD_DIR}"
  {
    echo "FUCHSIA_BUILD_DIR='${EXPECT_BUILD_DIR}'"
    echo "HOST_OUT_DIR='${HOST_OUT_REL}'"
  } > "${EXPECT_BUILD_DIR}/fx.config"


  BT_EXPECT "( fx-build-dir-write "${BUILD_DIR_REL}" )"

  unset FUCHSIA_BUILD_DIR
  unset HOST_OUT_DIR

  fx-config-read

  BT_EXPECT_EQ "${FUCHSIA_BUILD_DIR}" "${EXPECT_BUILD_DIR}"
  BT_EXPECT_EQ "${HOST_OUT_DIR}" "${EXPECT_HOST_OUT}"
}

TEST_fx-info() {
  BT_ASSERT_FUNCTION_EXISTS fx-info

  # Capture stderr.
  local result
  result=$( fx-info some info 2>&1 )
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${result}" "some info"
}


TEST_fx-warn() {
  BT_ASSERT_FUNCTION_EXISTS fx-warn

  # Capture stderr.
  local result
  result=$( fx-warn some warning 2>&1 )
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${result}" "some warning"
}

TEST_fx-error() {
  BT_ASSERT_FUNCTION_EXISTS fx-error

  # Capture stderr.
  local result
  result=$( fx-error some error 2>&1 )
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${result}" "some error"
}

TEST_get-device-pair() {
  local -r BUILD_DIR_REL="out/x64test"
  local -r HOST_OUT_REL="host_x64"

  local -r EXPECT_BUILD_DIR="${FUCHSIA_DIR}/${BUILD_DIR_REL}"
  local -r EXPECT_HOST_OUT="${EXPECT_BUILD_DIR}/${HOST_OUT_REL}"

  # fx-build-config-load expects a {build}/fx.config
  mkdir -p "${EXPECT_BUILD_DIR}"
  {
    echo "FUCHSIA_BUILD_DIR='${EXPECT_BUILD_DIR}'"
    echo "HOST_OUT_DIR='${HOST_OUT_REL}'"
  } > "${EXPECT_BUILD_DIR}/fx.config"

  BT_EXPECT "( fx-build-dir-write "${BUILD_DIR_REL}" )"

  BT_EXPECT fx-config-read

  echo "foo" > "${EXPECT_BUILD_DIR}.device"
  BT_EXPECT_EQ "foo" $(get-device-pair)
}

TEST_is-remote-workflow-device() {
  BT_ASSERT_FUNCTION_EXISTS is-remote-workflow-device

  local -r BUILD_DIR_REL="out/x64test"
  local -r HOST_OUT_REL="host_x64"

  local -r EXPECT_BUILD_DIR="${FUCHSIA_DIR}/${BUILD_DIR_REL}"
  local -r EXPECT_HOST_OUT="${EXPECT_BUILD_DIR}/${HOST_OUT_REL}"

  # fx-build-config-load expects a {build}/fx.config
  mkdir -p "${EXPECT_BUILD_DIR}"
  {
    echo "FUCHSIA_BUILD_DIR='${EXPECT_BUILD_DIR}'"
    echo "HOST_OUT_DIR='${HOST_OUT_REL}'"
  } > "${EXPECT_BUILD_DIR}/fx.config"

  BT_EXPECT "( fx-build-dir-write "${BUILD_DIR_REL}" )"

  BT_EXPECT fx-config-read

  echo "foo" > "${EXPECT_BUILD_DIR}.device"
  BT_EXPECT_EQ "foo" $(get-device-pair)
  BT_EXPECT_FAIL is-remote-workflow-device

  echo "${_FX_REMOTE_WORKFLOW_DEVICE_ADDR}" > "${EXPECT_BUILD_DIR}.device"
  BT_EXPECT_EQ "${_FX_REMOTE_WORKFLOW_DEVICE_ADDR}" $(get-device-pair)
  BT_EXPECT is-remote-workflow-device
}

BT_RUN_TESTS "$@"
