#!/bin/sh

# Save the PATH as it was when the test started to restore it when it
# finishes
ORIG_PATH=$PATH

cleanup() {
  # Restore the PATH as it was when the test started
  export PATH=ORIG_PATH
}

die () { cleanup; echo "$@" ; exit 1; }

\. ../../../nvm.sh

# Directory where mocked binaries used by nvm_get_arch for each OS/arch are
# located
MOCKS_DIR=`pwd`/../../mocks
# Sets the PATH for these tests to include the symlinks to the mocked
# binaries
export PATH=.:${PATH}

# Setups mock binaries for a given OS and arch that mimic
# the output of the real binaries used by nvm_get_arch to guess
# the architecture of a given system.
setup_mock_arch() {
  local OS=$1
  local ARCH=$2
  local OPT=$3

  if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
    ln -sf "${MOCKS_DIR}/isainfo_${ARCH}" ./isainfo
    if [ "_$OPT" != "_no_pkg_info" ]; then
      ln -sf "${MOCKS_DIR}/pkg_info_${ARCH}" ./pkg_info
    else
      ln -sf "${MOCKS_DIR}/pkg_info_fail" ./pkg_info
    fi
  fi

  ln -sf "${MOCKS_DIR}/uname_${OS}_${ARCH}" ./uname
}

# Cleans up the setup done by setup_mock_arch.
cleanup_mock_arch() {
  local OS=$1
  local ARCH=$2

  if [ "_$OS" = "_solaris" ] || [ "_$OS" = "_smartos" ]; then
    rm -f ./isainfo
    rm -f ./pkg_info
  fi

  rm -f ./uname
}

# Runs nvm_get_arch for architecture $ARCH and OS $OS, and compares the
# expected output $EXPECTED_OUTPUT with the actual output. Does nothing
# and exits cleanly if they match, dies otherwise.
run_test() {
  local ARCH=$1
  local OS=$2
  local EXPECTED_OUTPUT=$3
  local OPT=$4

  setup_mock_arch $OS $ARCH $OPT
  local OUTPUT="$(nvm_get_arch)"
  cleanup_mock_arch $OS $ARCH
  [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] ||
    die "nvm_get_arch for OS \"$OS\" and arch \"$ARCH\" with OPT \"$OPT\" did
    not return \"$EXPECTED_OUTPUT\"; got \"$OUTPUT\""
}

run_test x86 smartos x86
run_test x86 smartos x86 no_pkg_info

run_test amd64 smartos x64
run_test amd64 smartos x64 no_pkg_info

run_test x86 osx x86
run_test amd64 osx x64

run_test arm64 smartos x64

cleanup
