#!/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/fx-cmd-locator.sh"
    "tools/devshell/lib/fx-optional-features.sh"
    "tools/devshell/lib/generate-ssh-config.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 "$@"
