#!/bin/bash
# Copyright 2020 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 fx-update-path function from //scripts/fx-env.sh

BT_FILE_DEPS=(
    "scripts/fx-env.sh"
    "tools/devshell/lib/platform.sh"
    "tools/devshell/lib/vars.sh"
)


FUCHSIA_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." >/dev/null 2>&1 && pwd)"

TEST_fx_update_path() {
    . "${FUCHSIA_DIR}/scripts/fx-env.sh"
    BT_ASSERT_FUNCTION_EXISTS fx-update-path

    # make sure $FUCHSIA_DIR isn't in the path
    BT_ASSERT [[ "${PATH#*${FUCHSIA_DIR}}" == "${PATH}" ]]

    fx-update-path

    # make sure jiri and git directories are in the path
    for d in "${FUCHSIA_DIR}/.jiri_root/bin" "${FUCHSIA_DIR}/scripts/git"; do
        BT_ASSERT [[ ":${PATH#*:${d}:}:" != ":${PATH}:" ]]
    done

    # change FUCHSIA_DIR to a newly named symlink to the current one
    readonly OLD_FUCHSIA_DIR="${FUCHSIA_DIR}"
    readonly TEMP_DIR="$(mktemp -d -t new-fuchsia-dir-XXXXXXXXX)"
    FUCHSIA_DIR="${TEMP_DIR}/fuchsia"
    ln -s "${OLD_FUCHSIA_DIR}" "${FUCHSIA_DIR}"

    # make sure the new $FUCHSIA_DIR isn't in the path
    BT_ASSERT [[ "${PATH#*${FUCHSIA_DIR}}" == "${PATH}" ]]

    fx-update-path

    # make sure the old $FUCHSIA_DIR isn't in the path
    BT_ASSERT [[ "${PATH#*${OLD_FUCHSIA_DIR}}" == "${PATH}" ]]

    # make sure jiri and git directories are in the path
    for d in "${FUCHSIA_DIR}/.jiri_root/bin" "${FUCHSIA_DIR}/scripts/git"; do
        BT_ASSERT [[ ":${PATH#*:${d}:}:" != ":${PATH}:" ]]
    done
}


BT_RUN_TESTS "$@"
