#!/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.

BT_FILE_DEPS=(
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/prebuilt.sh"
)

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

# Replace fx-gen with a stub.
unset -f fx-gen

fx-gen() {
  return 0
}

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

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_fx-build-dir-write() {
  BT_ASSERT_FUNCTION_EXISTS fx-build-dir-write

  local -r BUILD_DIR="build"
  fx-build-dir-write "${BUILD_DIR}"

  local -r EXPECTED_FILE="${FUCHSIA_DIR}/.fx-build-dir"
  BT_EXPECT_FILE_CONTAINS "${EXPECTED_FILE}" "${BUILD_DIR}"
}

TEST_fx-build-dir-if-present() {
  BT_ASSERT_FUNCTION_EXISTS fx-build-dir-if-present

  FUCHSIA_BUILD_DIR=""
  local -r CONFIG_FILE="${FUCHSIA_DIR}/.config"
  local -r BUILD_DIR_PATH="out"
  echo "FUCHSIA_BUILD_DIR=${BUILD_DIR_PATH}" > "${CONFIG_FILE}"

  BT_EXPECT fx-build-dir-if-present

  # Expect an absolute path.
  BT_EXPECT_EQ "${FUCHSIA_BUILD_DIR}" "${FUCHSIA_DIR}/${BUILD_DIR_PATH}"

  local -r FX_BUILD_DIR_FILE_PATH="${FUCHSIA_DIR}/.fx-build-dir"
  BT_EXPECT_FILE_CONTAINS "${FX_BUILD_DIR_FILE_PATH}" "${BUILD_DIR_PATH}"
  BT_EXPECT_FILE_DOES_NOT_EXIST "${CONFIG_FILE}"
}

TEST_fx-build-config-load() {
  BT_ASSERT_FUNCTION_EXISTS fx-build-config-load

  FUCHSIA_BUILD_DIR="out"
  local -r EXPECT_BUILD_DIR="${FUCHSIA_DIR}/${FUCHSIA_BUILD_DIR}"
  mkdir "${EXPECT_BUILD_DIR}"
  local -r FX_CONFIG_FILE_PATH="${EXPECT_BUILD_DIR}/fx.config"

  # Confirm testvar is not set before setting up the config file.
  BT_EXPECT_EQ "${testvar}" ""
  local -r TESTVAR_VALUE="my_value"
  echo "testvar=${TESTVAR_VALUE}" > "${FX_CONFIG_FILE_PATH}"

  BT_EXPECT fx-build-config-load

  # fx-build-config-load ensures FUCHSIA_BUILD_DIR is an absolute path.
  BT_EXPECT_EQ "${FUCHSIA_BUILD_DIR}" "${EXPECT_BUILD_DIR}"

  # fx-build-config-load should have loaded testvar from fx.config.
  BT_EXPECT_EQ "${testvar}" "${TESTVAR_VALUE}" \
    "testvar has unexpected value (${testvar})"
}

BT_RUN_TESTS "$@"
