From 0b4cd8df6c10cb572327b4a6e5017f3cbd8c5a98 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Thu, 16 Dec 2021 22:55:02 -0800 Subject: [PATCH] [Refactor] create `nvm_normalize_lts` helper --- nvm.sh | 44 ++++++++++++++++---------- test/fast/Unit tests/nvm_normalize_lts | 38 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 17 deletions(-) create mode 100755 test/fast/Unit tests/nvm_normalize_lts diff --git a/nvm.sh b/nvm.sh index 239954d..36b8fc4 100644 --- a/nvm.sh +++ b/nvm.sh @@ -687,6 +687,29 @@ nvm_normalize_version() { }' "${1#v}" } +nvm_normalize_lts() { + local LTS + LTS="${1-}" + + if [ "$(expr "${LTS}" : '^lts/-[1-9][0-9]*$')" -gt 0 ]; then + local N + N="$(echo "${LTS}" | cut -d '-' -f 2)" + N=$((N+1)) + local NVM_ALIAS_DIR + NVM_ALIAS_DIR="$(nvm_alias_path)" + local RESULT + RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)" + if [ "${RESULT}" != '*' ]; then + nvm_echo "lts/${RESULT}" + else + nvm_err 'That many LTS releases do not exist yet.' + return 2 + fi + else + nvm_echo "${LTS}" + fi +} + nvm_ensure_version_prefix() { local NVM_VERSION NVM_VERSION="$(nvm_strip_iojs_prefix "${1-}" | command sed -e 's/^\([0-9]\)/v\1/g')" @@ -1043,27 +1066,14 @@ nvm_alias() { nvm_err 'An alias is required.' return 1 fi + ALIAS="$(nvm_normalize_lts "${ALIAS}")" - local NVM_ALIAS_DIR - NVM_ALIAS_DIR="$(nvm_alias_path)" - - if [ "$(expr "${ALIAS}" : '^lts/-[1-9][0-9]*$')" -gt 0 ]; then - local N - N="$(echo "${ALIAS}" | cut -d '-' -f 2)" - N=$((N+1)) - local RESULT - RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)" - if [ "${RESULT}" != '*' ]; then - nvm_alias "lts/${RESULT}" - return $? - else - nvm_err 'That many LTS releases do not exist yet.' - return 2 - fi + if [ -z "${ALIAS}" ]; then + return 2 fi local NVM_ALIAS_PATH - NVM_ALIAS_PATH="${NVM_ALIAS_DIR}/${ALIAS}" + NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}" if [ ! -f "${NVM_ALIAS_PATH}" ]; then nvm_err 'Alias does not exist.' return 2 diff --git a/test/fast/Unit tests/nvm_normalize_lts b/test/fast/Unit tests/nvm_normalize_lts new file mode 100755 index 0000000..7ac8f4a --- /dev/null +++ b/test/fast/Unit tests/nvm_normalize_lts @@ -0,0 +1,38 @@ +#!/bin/sh + +cleanup() { + unset nvm_get_os +} + +die () { cleanup; echo "$@" ; exit 1; } + +\. ../../../nvm.sh + +ACTUAL="$(nvm_normalize_lts "foo")" +EXPECTED='foo' +[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<" + +ACTUAL="$(nvm_normalize_lts "lts/*")" +EXPECTED='lts/*' +[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<" + + +MOCKS_DIR="../Unit tests/mocks" +STAR="$(cat "$MOCKS_DIR/lts-star.txt")" + +ACTUAL="$(nvm_normalize_lts "${STAR}")" +EXPECTED="${STAR}" +[ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}<, got >${ACTUAL}<" + +LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt" +LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)" + +INDEX=1 +for LTS in $LTS_LIST; do + ACTUAL="$(nvm_normalize_lts "lts/-${INDEX}")" + MESSAGE="for lts/-${INDEX}" + EXPECTED="lts/$(echo "${LTS_LIST}" | tail -n +${INDEX} | head -n1)" + [ "${ACTUAL}" = "${EXPECTED}" ] || die "${MESSAGE}: expected >${EXPECTED}<, got >${ACTUAL}<" + + INDEX=$(($INDEX + 1)) +done