#!/bin/sh die () { echo "$@" ; exit 1; } export NVM_DIR="$(cd ../../.. && pwd)" : nvm.sh \. "${NVM_DIR}/nvm.sh" # 1-hop self-reference: alias points to itself echo 'self' > '../../../alias/self' ACTUAL="$(nvm_resolve_alias self)" EXPECTED='∞' [ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}< for self-reference, got >${ACTUAL}<" rm -f '../../../alias/self' # Multi-hop loop: link1 -> link2 -> link3 -> link1 echo 'link2' > '../../../alias/link1' echo 'link3' > '../../../alias/link2' echo 'link1' > '../../../alias/link3' ACTUAL="$(nvm_resolve_alias link1)" EXPECTED='∞' [ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}< for 3-hop cycle, got >${ACTUAL}<" rm -f '../../../alias/link1' '../../../alias/link2' '../../../alias/link3' # Cycle through an alias name containing a space echo 'midway' > '../../../alias/foo bar' echo 'foo bar' > '../../../alias/midway' ACTUAL="$(nvm_resolve_alias 'foo bar')" EXPECTED='∞' [ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}< for space-name cycle, got >${ACTUAL}<" rm -f '../../../alias/foo bar' '../../../alias/midway' # Non-cycle through an alias name containing a space. # Token-based cycle detection would false-positive on this chain because # 'bar' appears as a substring of the multi-token alias name 'foo bar'. # Resolves: 'foo bar' -> 'midway' -> 'bar' -> 0.0.99 echo 'midway' > '../../../alias/foo bar' echo 'bar' > '../../../alias/midway' echo '0.0.99' > '../../../alias/bar' ACTUAL="$(nvm_resolve_alias 'foo bar')" EXPECTED='v0.0.99' [ "${ACTUAL}" = "${EXPECTED}" ] || die "expected >${EXPECTED}< for space-name chain, got >${ACTUAL}<" rm -f '../../../alias/foo bar' '../../../alias/midway' '../../../alias/bar'