mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-04-04 03:54:51 +08:00
- Use `=` instead of `==` for string comparison (POSIX compliance) - Use `printf '%b'` instead of variable as format string (prevents `%` characters in paths from being interpreted as format specifiers) - Fix `TRIED_PROFILE` to reference `PROFILE` instead of `NVM_PROFILE` which is known to be empty at that point Bugs introduced ina24ff3e605,b6f1c156da, anda461a0fffc(PR https://github.com/nvm-sh/nvm/pull/1605).
69 lines
2.0 KiB
Bash
Executable File
69 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () { echo "$@" ; cleanup ; exit 1; }
|
|
|
|
cleanup() {
|
|
unset -f install_nvm_from_git install_nvm_as_script nvm_detect_profile nvm_has
|
|
unset -f nvm_check_global_modules nvm_install_node
|
|
unset -f setup cleanup die
|
|
unset NVM_ENV METHOD PROFILE
|
|
}
|
|
|
|
setup() {
|
|
NVM_ENV=testing \. ../../install.sh
|
|
|
|
# Mock installation functions to do nothing
|
|
install_nvm_from_git() { :; }
|
|
install_nvm_as_script() { :; }
|
|
nvm_check_global_modules() { :; }
|
|
nvm_install_node() { :; }
|
|
|
|
# Mock nvm_has to return true for git
|
|
nvm_has() {
|
|
case "$1" in
|
|
git) return 0 ;;
|
|
xcode-select) return 1 ;;
|
|
*) return 1 ;;
|
|
esac
|
|
}
|
|
|
|
# Mock nvm_detect_profile to return empty (profile not found)
|
|
nvm_detect_profile() {
|
|
echo ""
|
|
}
|
|
}
|
|
|
|
setup
|
|
|
|
#
|
|
# Test: When PROFILE is set to a non-/dev/null value but nvm_detect_profile
|
|
# returns empty, the "Profile not found" message should include the PROFILE
|
|
# value in the TRIED_PROFILE string.
|
|
#
|
|
# Before the fix, TRIED_PROFILE was set to "${NVM_PROFILE} (as defined in $PROFILE)"
|
|
# but NVM_PROFILE is known to be empty at that point, so the message would say
|
|
# " (as defined in $PROFILE)" instead of "/some/path (as defined in $PROFILE)".
|
|
#
|
|
|
|
OUTPUT="$(PROFILE='/my/custom/profile' METHOD='' NVM_DIR="$(mktemp -d)" nvm_do_install 2>&1)"
|
|
|
|
# The output should mention /my/custom/profile in the "Tried" line
|
|
if ! echo "${OUTPUT}" | grep -q '/my/custom/profile (as defined in \$PROFILE)'; then
|
|
# Check without the escaped dollar sign too
|
|
if ! echo "${OUTPUT}" | grep -q '/my/custom/profile'; then
|
|
die "Expected TRIED_PROFILE to contain '/my/custom/profile', got: ${OUTPUT}"
|
|
fi
|
|
fi
|
|
|
|
# Verify the "Profile not found" message appears
|
|
if ! echo "${OUTPUT}" | grep -q 'Profile not found'; then
|
|
die "Expected 'Profile not found' message, got: ${OUTPUT}"
|
|
fi
|
|
|
|
# The message should NOT start with " (as defined" (which would indicate empty TRIED_PROFILE prefix)
|
|
if echo "${OUTPUT}" | grep -q 'Tried (as defined'; then
|
|
die "TRIED_PROFILE appears to have an empty prefix (NVM_PROFILE instead of PROFILE), got: ${OUTPUT}"
|
|
fi
|
|
|
|
cleanup
|