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

cleanup
