#!/bin/sh

set -e

cleanup() {
  nvm cache clear
  nvm deactivate
  rm -rf "${NVM_DIR}"/v*
  nvm unalias default
}

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

\. ../../nvm.sh

if [ -z "${BASH-}" ]; then
  echo "This test only applies to Bash; skipping"
  exit
fi

cleanup || true
trap 'echo "==> EXIT signal received (status: $?)"; cleanup' EXIT

# shellcheck disable=SC3047
trap 'echo "==> ERR signal received"; exit 1' ERR
# shellcheck disable=SC3041
set -E

# shellcheck disable=SC3045,SC3047
ERR_TRAP_EXPECTED="$(trap -p ERR)"

# Adding ` || die 'install failed'` implicitly disables error handling and
# prevents ERR trap execution, so for the purposes of this test, `nvm install`
# can't be part of another command or statement
nvm install node

case "$-" in
*E*)
  # shellcheck disable=SC3045,SC3047
  [ "$(trap -p ERR)" = "$ERR_TRAP_EXPECTED" ] ||
    die "ERR trap not restored after \"nvm install $VERSION\""
  ;;
*)
  die "errtrace not restored after \"nvm install $VERSION\""
  ;;
esac