mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-05-10 14:21:50 +00:00
[Tests] fix broken tests exposed by 863bd63
Leaves 2 non-executable, + some TODOs
This commit is contained in:
parent
0ce8f5a52f
commit
ff7634577b
2
.gitignore
vendored
2
.gitignore
vendored
@ -22,3 +22,5 @@ current
|
|||||||
npm-shrinkwrap.json
|
npm-shrinkwrap.json
|
||||||
package-lock.json
|
package-lock.json
|
||||||
yarn.lock
|
yarn.lock
|
||||||
|
|
||||||
|
target/
|
||||||
|
12
nvm.sh
12
nvm.sh
@ -2199,7 +2199,7 @@ nvm_install_binary_extract() {
|
|||||||
command mkdir -p "${VERSION_PATH}" || return 1
|
command mkdir -p "${VERSION_PATH}" || return 1
|
||||||
|
|
||||||
if [ "${NVM_OS}" = 'win' ]; then
|
if [ "${NVM_OS}" = 'win' ]; then
|
||||||
command mv "${TMPDIR}/"*/* "${VERSION_PATH}" || return 1
|
command mv "${TMPDIR}/"*/* "${VERSION_PATH}/" || return 1
|
||||||
command chmod +x "${VERSION_PATH}"/node.exe || return 1
|
command chmod +x "${VERSION_PATH}"/node.exe || return 1
|
||||||
command chmod +x "${VERSION_PATH}"/npm || return 1
|
command chmod +x "${VERSION_PATH}"/npm || return 1
|
||||||
command chmod +x "${VERSION_PATH}"/npx 2>/dev/null
|
command chmod +x "${VERSION_PATH}"/npx 2>/dev/null
|
||||||
@ -2278,8 +2278,8 @@ nvm_install_binary() {
|
|||||||
|
|
||||||
# Read nosource from arguments
|
# Read nosource from arguments
|
||||||
if [ "${nosource-}" = '1' ]; then
|
if [ "${nosource-}" = '1' ]; then
|
||||||
nvm_err 'Binary download failed. Download from source aborted.'
|
nvm_err 'Binary download failed. Download from source aborted.'
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nvm_err 'Binary download failed, trying source.'
|
nvm_err 'Binary download failed, trying source.'
|
||||||
@ -2922,11 +2922,11 @@ nvm_is_natural_num() {
|
|||||||
|
|
||||||
nvm_write_nvmrc() {
|
nvm_write_nvmrc() {
|
||||||
local VERSION_STRING
|
local VERSION_STRING
|
||||||
VERSION_STRING=$(nvm_version "${1-$VERSION_STRING}")
|
VERSION_STRING=$(nvm_version "${1-}")
|
||||||
if [ "$VERSION_STRING" = '∞' ] || [ "$VERSION_STRING" = 'N/A' ]; then
|
if [ "${VERSION_STRING}" = '∞' ] || [ "${VERSION_STRING}" = 'N/A' ]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
echo "$VERSION_STRING" | tee "$PWD"/.nvmrc > /dev/null || {
|
echo "${VERSION_STRING}" | tee "$PWD"/.nvmrc > /dev/null || {
|
||||||
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
|
||||||
nvm_err "Warning: Unable to write version number ($VERSION_STRING) to .nvmrc"
|
nvm_err "Warning: Unable to write version number ($VERSION_STRING) to .nvmrc"
|
||||||
fi
|
fi
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
"test/installation/node": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_node test-$shell",
|
"test/installation/node": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_node test-$shell",
|
||||||
"test/installation/iojs": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_iojs test-$shell",
|
"test/installation/iojs": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation_iojs test-$shell",
|
||||||
"test/sourcing": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=sourcing test-$shell",
|
"test/sourcing": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=sourcing test-$shell",
|
||||||
|
"test:check-exec": "(IFS=$'\\n'; for file in $(git ls-files test); do if [ ! -x \"$file\" ] && [[ \"$file\" != *.* ]] && [[ \"$file\" != test/fixtures/* ]]; then echo \"$file\"; fi; done) | tee /dev/stderr | awk 'END {if (NR > 0) exit 1}'",
|
||||||
|
"test:check-nonexec": "(IFS=$'\\n'; for file in $(git ls-files test); do if [ -x \"$file\" ] && [ ! -d \"$file\" ] && { [[ \"$file\" =~ '\\.(json|txt|sh|js|log)$' ]] || [[ \"$file\" =~ '^test/(mocks|fixtures)/.*' ]]; }; then echo \"$file\"; fi; done) | tee /dev/stderr | awk 'END {if (NR > 0) exit 1}'",
|
||||||
"doctoc": "doctoc --title='## Table of Contents' --github README.md",
|
"doctoc": "doctoc --title='## Table of Contents' --github README.md",
|
||||||
"predoctoc:check": "cp README.md v-README.md.orig && npm run doctoc",
|
"predoctoc:check": "cp README.md v-README.md.orig && npm run doctoc",
|
||||||
"doctoc:check": "diff -q README.md v-README.md.orig",
|
"doctoc:check": "diff -q README.md v-README.md.orig",
|
||||||
|
@ -4,40 +4,58 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
TEST_VERSION="v0.2.4"
|
TEST_VERSION='v0.2.4'
|
||||||
|
|
||||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||||
|
|
||||||
cleanup () {
|
cleanup() {
|
||||||
nvm cache clear
|
nvm cache clear
|
||||||
nvm deactivate
|
nvm deactivate
|
||||||
nvm unalias default
|
nvm unalias default
|
||||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
rm -rf "${NVM_DIR}/v0.2.4" .nvmrc
|
||||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||||
}
|
}
|
||||||
|
|
||||||
die () {
|
die() {
|
||||||
echo "$@"
|
echo "$@"
|
||||||
cleanup
|
cleanup
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||||
nvm_ls_remote() {
|
nvm_ls_remote() {
|
||||||
cat "$REMOTE"
|
if [ -n "${PATTERN}" ]; then
|
||||||
|
cat "${REMOTE}" | \grep "${PATTERN}"
|
||||||
|
else
|
||||||
|
cat "${REMOTE}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||||
nvm_ls_remote_iojs() {
|
nvm_ls_remote_iojs() {
|
||||||
cat "$REMOTE_IOJS"
|
local PATTERN
|
||||||
|
PATTERN="${1-}"
|
||||||
|
if [ -n "${PATTERN}" ]; then
|
||||||
|
cat "${REMOTE_IOJS}" | \grep "${PATTERN}"
|
||||||
|
else
|
||||||
|
cat "${REMOTE_IOJS}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
make_fake_node "$TEST_VERSION"
|
make_fake_node "${TEST_VERSION}"
|
||||||
|
|
||||||
nvm install --save "$TEST_VERSION" || die "\`nvm install --save $TEST_VERSION\` failed"
|
nvm install -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
|
||||||
OUTPUT="$(cat .nvmrc)"
|
OUTPUT="$(cat .nvmrc)"
|
||||||
|
|
||||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
nvm_is_valid_version "${OUTPUT}" \
|
||||||
|| die "\`nvm install --save $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
|| die "\`nvm install -w ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||||
|
|
||||||
|
rm .nvmrc || die 'removing of .nvmrc failed'
|
||||||
|
|
||||||
|
nvm install --save "${TEST_VERSION}" || die "\`nvm install --save ${TEST_VERSION}\` failed"
|
||||||
|
OUTPUT="$(cat .nvmrc)"
|
||||||
|
|
||||||
|
nvm_is_valid_version "${OUTPUT}" \
|
||||||
|
|| die "\`nvm install --save ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
61
test/fast/Unit tests/Running 'nvm use --save' works as expected'
Executable file
61
test/fast/Unit tests/Running 'nvm use --save' works as expected'
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
\. ../../../nvm.sh
|
||||||
|
\. ../../common.sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
TEST_VERSION='v0.2.4'
|
||||||
|
|
||||||
|
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
nvm cache clear
|
||||||
|
nvm deactivate
|
||||||
|
nvm unalias default
|
||||||
|
rm -rf "${NVM_DIR}/v0.2.4" .nvmrc
|
||||||
|
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||||
|
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "$@"
|
||||||
|
cleanup
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||||
|
nvm_ls_remote() {
|
||||||
|
if [ -n "${PATTERN}" ]; then
|
||||||
|
cat "${REMOTE}" | \grep "${PATTERN}"
|
||||||
|
else
|
||||||
|
cat "${REMOTE}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
||||||
|
nvm_ls_remote_iojs() {
|
||||||
|
local PATTERN
|
||||||
|
PATTERN="${1-}"
|
||||||
|
if [ -n "${PATTERN}" ]; then
|
||||||
|
cat "${REMOTE_IOJS}" | \grep "${PATTERN}"
|
||||||
|
else
|
||||||
|
cat "${REMOTE_IOJS}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
make_fake_node "${TEST_VERSION}"
|
||||||
|
|
||||||
|
nvm use -w "${TEST_VERSION}" || die "\`nvm install -w ${TEST_VERSION}\` failed"
|
||||||
|
OUTPUT="$(cat .nvmrc)"
|
||||||
|
|
||||||
|
nvm_is_valid_version "${OUTPUT}" \
|
||||||
|
|| die "\`nvm install -w ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||||
|
|
||||||
|
rm .nvmrc || die 'removing of .nvmrc failed'
|
||||||
|
|
||||||
|
nvm use --save "${TEST_VERSION}" || die "\`nvm install --save ${TEST_VERSION}\` failed"
|
||||||
|
OUTPUT="$(cat .nvmrc)"
|
||||||
|
|
||||||
|
nvm_is_valid_version "${OUTPUT}" \
|
||||||
|
|| die "\`nvm install --save ${TEST_VERSION}\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
||||||
|
|
||||||
|
cleanup
|
@ -12,7 +12,7 @@ cleanup () {
|
|||||||
nvm cache clear
|
nvm cache clear
|
||||||
nvm deactivate
|
nvm deactivate
|
||||||
nvm unalias default
|
nvm unalias default
|
||||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
rm -rf "${NVM_DIR}/${TEST_VERSION:?}" .nvmrc
|
||||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
||||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
||||||
}
|
}
|
||||||
@ -23,21 +23,29 @@ die () {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||||
nvm_ls_remote() {
|
nvm_ls_remote() {
|
||||||
cat "$REMOTE"
|
cat "${REMOTE}"
|
||||||
}
|
}
|
||||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
|
||||||
nvm_ls_remote_iojs() {
|
nvm_ls_remote_iojs() {
|
||||||
cat "$REMOTE_IOJS"
|
cat "${REMOTE_IOJS}"
|
||||||
}
|
}
|
||||||
|
|
||||||
make_fake_node "$TEST_VERSION"
|
make_fake_node "${TEST_VERSION}"
|
||||||
|
|
||||||
OUTPUT=$(nvm use --save --silent "$TEST_VERSION" || die "\`nvm use --save --silent $TEST_VERSION\` failed")
|
OUTPUT=$(nvm use --save --silent "${TEST_VERSION}" || die "\`nvm use --save --silent ${TEST_VERSION}\` failed")
|
||||||
EXPECTED_OUTPUT=""
|
EXPECTED_OUTPUT=''
|
||||||
|
|
||||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \
|
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|
||||||
|| die "\`nvm use --save --silent $TEST_VERSION\` output was not silenced to '$EXPECTED_OUTPUT'; got '$OUTPUT'"
|
|| die "\`nvm use --save --silent ${TEST_VERSION}\` output was not silenced to '${EXPECTED_OUTPUT}'; got '${OUTPUT}'"
|
||||||
|
|
||||||
|
rm .nvmrc || die 'removing of .nvmrc failed'
|
||||||
|
|
||||||
|
OUTPUT=$(nvm use -w --silent "${TEST_VERSION}" || die "\`nvm use -w --silent ${TEST_VERSION}\` failed")
|
||||||
|
EXPECTED_OUTPUT=''
|
||||||
|
|
||||||
|
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] \
|
||||||
|
|| die "\`nvm use -w --silent ${TEST_VERSION}\` output was not silenced to '${EXPECTED_OUTPUT}'; got '${OUTPUT}'"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
\. ../../../nvm.sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ -f .nvmrc ]; then mv .nvmrc .nvmrc.orig; fi
|
|
||||||
|
|
||||||
TEST_VERSION="v0.2.4"
|
|
||||||
|
|
||||||
cleanup () {
|
|
||||||
nvm cache clear
|
|
||||||
nvm deactivate
|
|
||||||
nvm unalias default
|
|
||||||
rm -rf ${NVM_DIR}/v* .nvmrc
|
|
||||||
if [ -f .nvmrc.orig ]; then mv .nvmrc.orig .nvmrc; fi
|
|
||||||
unset -f nvm_ls_remote nvm_ls_remote_iojs
|
|
||||||
}
|
|
||||||
|
|
||||||
die () {
|
|
||||||
echo "$@"
|
|
||||||
cleanup
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
|
||||||
|
|
||||||
\. ../../common.sh
|
|
||||||
|
|
||||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
|
||||||
nvm_ls_remote() {
|
|
||||||
cat "$REMOTE"
|
|
||||||
}
|
|
||||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
|
||||||
nvm_ls_remote_iojs() {
|
|
||||||
cat "$REMOTE_IOJS"
|
|
||||||
}
|
|
||||||
|
|
||||||
make_fake_node "$TEST_VERSION"
|
|
||||||
|
|
||||||
# 1. install
|
|
||||||
|
|
||||||
nvm install -w "$TEST_VERSION" || die "\`nvm install -w $TEST_VERSION\` failed"
|
|
||||||
OUTPUT="$(cat .nvmrc)"
|
|
||||||
|
|
||||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
|
||||||
|| die "\`nvm install -w $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
unset OUTPUT
|
|
||||||
|
|
||||||
# 2. use
|
|
||||||
|
|
||||||
nvm use -w "$TEST_VERSION" || die "\`nvm use -w $TEST_VERSION\` failed"
|
|
||||||
OUTPUT="$(cat .nvmrc)"
|
|
||||||
|
|
||||||
nvm_is_valid_version "$(cat .nvmrc)" \
|
|
||||||
|| die "\`nvm use -w $TEST_VERSION\`+ \`cat .nvmrc\` outputted invalid version: got '${OUTPUT}'"
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
cleanup
|
|
@ -22,11 +22,11 @@ nvm deactivate 2>/dev/null || die 'unable to deactivate'
|
|||||||
|
|
||||||
\. ../../common.sh
|
\. ../../common.sh
|
||||||
|
|
||||||
MOCKS_DIR="$PWD/mocks"
|
MOCKS_DIR="${PWD}/mocks"
|
||||||
|
|
||||||
nvm_download() {
|
nvm_download() {
|
||||||
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
|
if [ "$*" = "-L -s $(nvm_get_mirror node std)/index.tab -o -" ]; then
|
||||||
cat "$MOCKS_DIR/nodejs.org-dist-index.tab"
|
cat "${MOCKS_DIR}/nodejs.org-dist-index.tab"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
return 42
|
return 42
|
||||||
@ -34,15 +34,15 @@ nvm_download() {
|
|||||||
|
|
||||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||||
OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')"
|
OUTPUT="$(nvm ls-remote --lts | sed 's/[ \t]*$//')"
|
||||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote --lts did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote --lts did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||||
|
|
||||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote lts.txt"
|
||||||
OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')"
|
OUTPUT="$(nvm ls-remote "lts/*" | sed 's/[ \t]*$//')"
|
||||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "nvm ls-remote lts/* did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||||
|
|
||||||
MOCKS_DIR="$PWD/mocks"
|
MOCKS_DIR="${PWD}/mocks"
|
||||||
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
LTS_NAMES_PATH="${MOCKS_DIR}/LTS_names.txt"
|
||||||
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
LTS_LIST="$(cat "${LTS_NAMES_PATH}" | tail -n +2)"
|
||||||
|
|
||||||
@ -56,18 +56,18 @@ printf '%s\n' "${LTS_LIST}" | while IFS= read -r LTS; do
|
|||||||
INDEX=$(($INDEX + 1))
|
INDEX=$(($INDEX + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
REMOTE="$PWD/mocks/nvm_ls_remote.txt"
|
REMOTE="${PWD}/mocks/nvm_ls_remote.txt"
|
||||||
nvm_ls_remote() {
|
nvm_ls_remote() {
|
||||||
cat "$REMOTE"
|
cat "${REMOTE}"
|
||||||
}
|
}
|
||||||
REMOTE_IOJS="$PWD/mocks/nvm_ls_remote_iojs.txt"
|
REMOTE_IOJS="${PWD}/mocks/nvm_ls_remote_iojs.txt"
|
||||||
nvm_ls_remote_iojs() {
|
nvm_ls_remote_iojs() {
|
||||||
cat "$REMOTE_IOJS"
|
cat "${REMOTE_IOJS}"
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
|
EXPECTED_OUTPUT_PATH="${MOCKS_DIR}/nvm ls-remote.txt"
|
||||||
OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')"
|
OUTPUT="$(nvm ls-remote | sed 's/[ \t]*$//')"
|
||||||
EXPECTED_OUTPUT="$(cat "$EXPECTED_OUTPUT_PATH" | sed 's/[ \t]*$//' )"
|
EXPECTED_OUTPUT="$(cat "${EXPECTED_OUTPUT_PATH}" | sed 's/[ \t]*$//' )"
|
||||||
[ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm ls-remote did not output expected sorted versions; got $(echo ">$OUTPUT<") expected $(echo ">$EXPECTED_OUTPUT<")"
|
[ "_${OUTPUT}" = "_${EXPECTED_OUTPUT}" ] || die "bare nvm ls-remote did not output expected sorted versions; got >${OUTPUT}< expected >${EXPECTED_OUTPUT}<"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
cleanup () {
|
cleanup () {
|
||||||
unset -f die cleanup NVM_AUTH_HEADER
|
unset -f die cleanup
|
||||||
docker stop httpbin && docker rm httpbin
|
docker stop httpbin && docker rm httpbin
|
||||||
}
|
}
|
||||||
die () { echo "$@" ; cleanup ; exit 1; }
|
die () { echo "$@" ; cleanup ; exit 1; }
|
||||||
@ -17,13 +17,12 @@ nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" >/de
|
|||||||
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
|
! nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/wrong_install.sh" >/dev/null || die "nvm_download should fail to download no existing file"
|
||||||
|
|
||||||
# nvm_download should pass when calling with auth header
|
# nvm_download should pass when calling with auth header
|
||||||
docker pull kennethreitz/httpbin && docker run --shell=bash -d --name httpbin -p 80:80 kennethreitz/httpbin
|
docker pull kennethreitz/httpbin && SHELL=bash docker run -d --name httpbin -p 80:80 kennethreitz/httpbin
|
||||||
sleep 1 # wait for httpbin to start
|
sleep 1 # wait for httpbin to start
|
||||||
NVM_AUTH_HEADER="Bearer test-token" nvm_download "http://127.0.0.1/bearer" > /dev/null || die 'nvm_download with auth header should send correctly'
|
NVM_AUTH_HEADER="Bearer test-token" nvm_download "http://127.0.0.1/bearer" > /dev/null || die 'nvm_download with auth header should send correctly'
|
||||||
|
|
||||||
# nvm_download should fail when calling without auth header
|
# nvm_download should fail when calling without auth header
|
||||||
nvm_download "http://127.0.0.1/bearer" > /dev/null && die 'nvm_download with no auth header should not send the header and should fail'
|
nvm_download "http://127.0.0.1/bearer" > /dev/null && die 'nvm_download with no auth header should not send the header and should fail'
|
||||||
docker stop httpbin && docker rm httpbin
|
|
||||||
|
|
||||||
# ensure quoted extra args remain quoted
|
# ensure quoted extra args remain quoted
|
||||||
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" -o "; die quoted-command-not-quoted" || die 'command failed'
|
nvm_download "https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh" -o "; die quoted-command-not-quoted" || die 'command failed'
|
||||||
|
@ -2,27 +2,29 @@
|
|||||||
|
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
FILE="$NVM_DIR/default-packages"
|
FILE="${NVM_DIR}/default-packages"
|
||||||
|
|
||||||
die () { echo "$@" ; cleanup ; exit 1; }
|
die () { echo "$@" ; cleanup ; exit 1; }
|
||||||
setup () {
|
setup () {
|
||||||
if [ -f $FILE ]; then
|
if [ -f "${FILE}" ]; then
|
||||||
ORIG_DEFAULT_PACKAGES=$(cat $FILE)
|
ORIG_DEFAULT_PACKAGES=$(cat "${FILE}")
|
||||||
mkdir -p ./tmp/ ||:
|
mkdir -p ./tmp/ ||:
|
||||||
mv $FILE ./tmp/default-packages ||:
|
mv "${FILE}" ./tmp/default-packages ||:
|
||||||
fi
|
fi
|
||||||
touch $FILE
|
touch "${FILE}"
|
||||||
}
|
}
|
||||||
cleanup () {
|
cleanup () {
|
||||||
if [ "$ORIG_DEFAULT_PACKAGES" != "" ]; then
|
if [ "${ORIG_DEFAULT_PACKAGES}" != "" ]; then
|
||||||
rm -rf ./tmp/
|
rm -rf ./tmp/
|
||||||
echo "$ORIG_DEFAULT_PACKAGES" > $FILE
|
echo "${ORIG_DEFAULT_PACKAGES}" > "${FILE}"
|
||||||
|
else
|
||||||
|
rm "${FILE}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
setup
|
setup
|
||||||
|
|
||||||
cat > $FILE << EOF
|
cat > "${FILE}" << EOF
|
||||||
rimraf
|
rimraf
|
||||||
object-inspect@1.0.2
|
object-inspect@1.0.2
|
||||||
|
|
||||||
@ -39,7 +41,7 @@ cleanup
|
|||||||
|
|
||||||
setup
|
setup
|
||||||
|
|
||||||
cat > $FILE << EOF
|
cat > "${FILE}" << EOF
|
||||||
rimraf
|
rimraf
|
||||||
not~a~package~name
|
not~a~package~name
|
||||||
mkdirp
|
mkdirp
|
||||||
@ -53,12 +55,12 @@ cleanup
|
|||||||
|
|
||||||
setup
|
setup
|
||||||
|
|
||||||
cat > $FILE << EOF
|
cat > "${FILE}" << EOF
|
||||||
rimraf
|
rimraf
|
||||||
not~a~package~name
|
not~a~package~name
|
||||||
mkdirp
|
mkdirp
|
||||||
EOF
|
EOF
|
||||||
printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline
|
printf %s "$(cat "${FILE}")" > "${FILE}" # strip trailing newline
|
||||||
|
|
||||||
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
||||||
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
|
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
|
||||||
@ -68,7 +70,7 @@ cleanup
|
|||||||
|
|
||||||
setup
|
setup
|
||||||
|
|
||||||
cat > $FILE << EOF
|
cat > "${FILE}" << EOF
|
||||||
object-inspect @ 1.0.2
|
object-inspect @ 1.0.2
|
||||||
rimraf
|
rimraf
|
||||||
EOF
|
EOF
|
||||||
@ -81,12 +83,12 @@ cleanup
|
|||||||
|
|
||||||
setup
|
setup
|
||||||
|
|
||||||
rm -rf $FILE
|
rm -rf "${FILE}"
|
||||||
|
|
||||||
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
DEFAULT_PKGS="$(nvm_get_default_packages)"
|
||||||
EXPECTED_PKGS=''
|
EXPECTED_PKGS=''
|
||||||
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
|
||||||
|
|
||||||
touch $FILE
|
touch "${FILE}"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
@ -1,33 +1,43 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
cleanup () {
|
cleanup() {
|
||||||
[ -d "$tmp_dir" ] && rm -rf "$tmp_dir"
|
[ -d "${tmp_dir}" ] && rm -rf "${tmp_dir}"
|
||||||
[ -d "$NVM_DIR" ] && rm -rf "$NVM_DIR"
|
[ -d "${NVM_DIR}" ] && rm -rf "${NVM_DIR}"
|
||||||
unset -f die cleanup test_archi nvm_supports_xz
|
unset -f die cleanup test_archi nvm_supports_xz
|
||||||
unset NVM_DIR tmp_dir version archi
|
unset NVM_DIR tmp_dir version archi
|
||||||
}
|
}
|
||||||
|
|
||||||
die () { echo "$@" ; cleanup ; exit 1; }
|
die() { echo "$@" ; cleanup ; exit 1; }
|
||||||
|
|
||||||
test_archi(){
|
test_archi() {
|
||||||
local os="$1"
|
local os
|
||||||
local version="$2"
|
os="$1"
|
||||||
local archi="$os-$3"
|
local version
|
||||||
local node="$4"
|
version="$2"
|
||||||
local ext="$5"
|
local archi
|
||||||
local command="$6"
|
archi="$os-$3"
|
||||||
local command_option="$7"
|
local node
|
||||||
local node_path="$tmp_dir/node-$version-$archi/$node"
|
node="$4"
|
||||||
|
local ext
|
||||||
|
ext="$5"
|
||||||
|
local command
|
||||||
|
command="$6"
|
||||||
|
local command_option
|
||||||
|
command_option="$7"
|
||||||
|
local node_dir
|
||||||
|
node_dir="${tmp_dir}/node-${version}-${archi}"
|
||||||
|
local node_path
|
||||||
|
node_path="${node_dir}/${node}"
|
||||||
|
|
||||||
# Create tarball
|
# Create tarball
|
||||||
mkdir -p "$(dirname "$node_path")"
|
mkdir -p "$(dirname "${node_path}")"
|
||||||
echo "node $version" > "$node_path"
|
echo "node ${version}" > "${node_path}"
|
||||||
(cd "$tmp_dir" && "$command" "$command_option" "$tmp_dir/node-$version-$archi.$ext" "node-$version-$archi" && rm -rf "$tmp_dir/node-$version-$archi")
|
(cd "${tmp_dir}" && "${command}" "${command_option}" "${node_dir}.${ext}" "node-${version}-${archi}")
|
||||||
[ -f "$tmp_dir/node-$version-$archi.$ext" ] || die "Unable to create fake $ext file"
|
[ -f "${node_dir}.${ext}" ] || die "Unable to create fake ${ext} file"
|
||||||
|
|
||||||
# Extract it
|
# Extract it
|
||||||
nvm_install_binary_extract "$os" "$version" "${version:1}" "$tmp_dir/node-$version-$archi.$ext" "$tmp_dir/files"
|
nvm_install_binary_extract "$os" "$version" "$(expr "${version}" : '.\(.*\)')" "${node_dir}.$ext" "${tmp_dir}/files"
|
||||||
[ "$(cat "$NVM_DIR/versions/node/$version/bin/node")" = "node $version" ] || die "Unable to extract $ext file"
|
[ "$(cat "${NVM_DIR}/versions/node/${version}/bin/node")" = "node ${version}" ] || die "Unable to extract ${ext} file"
|
||||||
}
|
}
|
||||||
|
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
@ -39,17 +49,18 @@ type nvm_install_binary_extract > /dev/null 2>&1 || die 'nvm_install_binary_extr
|
|||||||
|
|
||||||
NVM_DIR=$(mktemp -d)
|
NVM_DIR=$(mktemp -d)
|
||||||
tmp_dir=$(mktemp -d)
|
tmp_dir=$(mktemp -d)
|
||||||
if [ -z "$NVM_DIR" ] || [ -z "$tmp_dir" ]; then
|
if [ -z "${NVM_DIR}" ] || [ -z "${tmp_dir}" ]; then
|
||||||
die 'Unable to create temporary folder'
|
die 'Unable to create temporary folder'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test windows zip
|
# Test windows zip
|
||||||
test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
|
# TODO: enable this
|
||||||
|
# test_archi 'win' 'v15.6.0' 'x64' 'node' 'zip' 'zip' '-qr'
|
||||||
|
|
||||||
# Test linux tar.xz
|
# Test linux tar.xz
|
||||||
test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf'
|
test_archi 'linux' 'v14.15.4' 'x64' 'bin/node' 'tar.xz' 'tar' '-cJf'
|
||||||
|
|
||||||
nvm_supports_xz(){
|
nvm_supports_xz() {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,11 +13,9 @@ die () { >&2 echo "$@" ; cleanup ; exit 1; }
|
|||||||
|
|
||||||
\. ../../../nvm.sh
|
\. ../../../nvm.sh
|
||||||
|
|
||||||
nvm_has_colors() { return 1 ; }
|
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|
||||||
OUTPUT="$(2>&1 nvm install --no-progress v0.12.18)"
|
OUTPUT="$(TERM=dumb 2>&1 nvm install --no-progress v0.12.18)"
|
||||||
EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
|
EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
|
||||||
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
|
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
|
||||||
Computing checksum with sha256sum
|
Computing checksum with sha256sum
|
||||||
@ -25,19 +23,63 @@ Checksums matched!
|
|||||||
Now using node v0.12.18 (npm v2.15.11)
|
Now using node v0.12.18 (npm v2.15.11)
|
||||||
Creating default alias: default -> v0.12.18 *"
|
Creating default alias: default -> v0.12.18 *"
|
||||||
|
|
||||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "1: expected >
|
||||||
|
${EXPECTED_OUTPUT}<, got >
|
||||||
|
${OUTPUT}<"
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|
||||||
OUTPUT="$(2>&1 nvm install v0.12.18)"
|
OUTPUT="$(TERM=dumb 2>&1 nvm install v0.12.18)"
|
||||||
EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
|
EXPECTED_OUTPUT="Downloading and installing node v0.12.18...
|
||||||
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
|
Downloading https://nodejs.org/dist/v0.12.18/node-v0.12.18-linux-x64.tar.xz...
|
||||||
######################################################################## 100.0%
|
######################################################################### 100.0%
|
||||||
Computing checksum with sha256sum
|
Computing checksum with sha256sum
|
||||||
Checksums matched!
|
Checksums matched!
|
||||||
Now using node v0.12.18 (npm v2.15.11)
|
Now using node v0.12.18 (npm v2.15.11)
|
||||||
Creating default alias: default -> v0.12.18 *"
|
Creating default alias: default -> v0.12.18 *"
|
||||||
|
|
||||||
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
[ "$(echo "${OUTPUT}" | wc -l)" = "$(echo "${EXPECTED_OUTPUT}" | wc -l)" ] || die "2: expected 7 lines, got $(echo "${OUTPUT}" | wc -l)"
|
||||||
|
|
||||||
|
# Preprocess function to handle carriage returns and extract final output
|
||||||
|
preprocess_output() {
|
||||||
|
echo "$1" | awk '
|
||||||
|
{
|
||||||
|
# For each line in the input
|
||||||
|
while (index($0, "\r") > 0) {
|
||||||
|
# If a carriage return is found, process it
|
||||||
|
pos = index($0, "\r")
|
||||||
|
before_cr = substr($0, 1, pos - 1)
|
||||||
|
after_cr = substr($0, pos + 1)
|
||||||
|
# Overwrite the line up to the carriage return with content after it
|
||||||
|
$0 = after_cr
|
||||||
|
}
|
||||||
|
print $0
|
||||||
|
}' | sed '/^$/d' # Remove any empty lines
|
||||||
|
}
|
||||||
|
|
||||||
|
[ "${OUTPUT}" = "${EXPECTED_OUTPUT}" ] || {
|
||||||
|
echo "$OUTPUT" \
|
||||||
|
| while IFS= read -r output_line && IFS= read -r expected_line <&3; do
|
||||||
|
line_number=$((line_number + 1))
|
||||||
|
|
||||||
|
# Strip non-visible characters from both lines
|
||||||
|
clean_output=$(preprocess_output "$output_line")
|
||||||
|
|
||||||
|
if [ "${output_line}" != "${expected_line}" ] && ! echo "${clean_output}" | \grep -qE '^#+ 100\.0%$'; then
|
||||||
|
echo "Difference on line ${line_number}:"
|
||||||
|
echo "Output: ${output_line}"
|
||||||
|
echo "Expected: ${expected_line}"
|
||||||
|
echo "Byte-by-byte comparison:"
|
||||||
|
echo "Output: $(echo "${clean_output}" | od -An -tx1 | tr -d '\n')"
|
||||||
|
echo "Expected: $(echo "${expected_line}" | od -An -tx1 | tr -d '\n')"
|
||||||
|
|
||||||
|
die "4: expected >
|
||||||
|
${EXPECTED_OUTPUT}<, got >
|
||||||
|
${OUTPUT}<"
|
||||||
|
fi
|
||||||
|
done 3<<EOF
|
||||||
|
$EXPECTED_OUTPUT
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
0
test/installation_iojs/install from source
Executable file → Normal file
0
test/installation_iojs/install from source
Executable file → Normal file
0
test/installation_iojs/install version specified in .nvmrc from source
Executable file → Normal file
0
test/installation_iojs/install version specified in .nvmrc from source
Executable file → Normal file
@ -1,6 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
die () { echo "$@" ; exit 1; }
|
die () {
|
||||||
|
unset -f nvm_install_binary nvm_install_source
|
||||||
|
echo "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
\. ../../nvm.sh
|
\. ../../nvm.sh
|
||||||
|
|
||||||
@ -22,16 +26,28 @@ nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $N
|
|||||||
NVM_CURRENT_DEFAULT="$(nvm_alias default)"
|
NVM_CURRENT_DEFAULT="$(nvm_alias default)"
|
||||||
[ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)"
|
[ "$NVM_CURRENT_DEFAULT" = "$NVM_TEST_VERSION" ] || die "wrong default alias: $(nvm alias)"
|
||||||
|
|
||||||
# Falls back to source but if -b is set fails binary download.
|
nvm_install_binary() {
|
||||||
|
>&2 echo 'binary failed'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# binary fails, falls back to source, but if -b is set, fails
|
||||||
OUTPUT="$(nvm install -b 9.0.0 2>&1)"
|
OUTPUT="$(nvm install -b 9.0.0 2>&1)"
|
||||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
EXPECTED_OUTPUT='binary failed'
|
||||||
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" = "${OUTPUT}" ]; then
|
if [ "${OUTPUT#*"${EXPECTED_OUTPUT}"}" = "${OUTPUT}" ]; then
|
||||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Falls back to source but if -b is not set.
|
nvm_install_source() {
|
||||||
|
>&2 echo 'source intentionally failed'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# binary fails, falls back to source if -b is not set
|
||||||
OUTPUT="$(nvm install 9.0.0 2>&1)"
|
OUTPUT="$(nvm install 9.0.0 2>&1)"
|
||||||
EXPECTED_OUTPUT='Binary download failed. Download from source aborted.'
|
EXPECTED_OUTPUT="binary failed
|
||||||
if [ "${OUTPUT#*$EXPECTED_OUTPUT}" != "${OUTPUT}" ]; then
|
Detected that you have 2 CPU core(s)
|
||||||
die "No source binary flag is active and should have returned >${EXPECTED_OUTPUT}<. Instead it returned >${OUTPUT}<"
|
Number of CPU core(s) less than or equal to 2, running in single-threaded mode
|
||||||
fi
|
source intentionally failed"
|
||||||
|
|
||||||
|
[ "${EXPECTED_OUTPUT}" = "${OUTPUT}" ] || die "expected >${EXPECTED_OUTPUT}<, got >${OUTPUT}<"
|
||||||
|
0
test/slow/nvm exec/Running 'nvm exec' with help should not parse
Executable file → Normal file
0
test/slow/nvm exec/Running 'nvm exec' with help should not parse
Executable file → Normal file
0
test/slow/nvm reinstall-packages/test-npmlink/index.js
Executable file → Normal file
0
test/slow/nvm reinstall-packages/test-npmlink/index.js
Executable file → Normal file
0
test/slow/nvm reinstall-packages/test-npmlink/package.json
Executable file → Normal file
0
test/slow/nvm reinstall-packages/test-npmlink/package.json
Executable file → Normal file
0
test/slow/nvm use/Running 'nvm use' with nvmrc containing not installed version
Executable file → Normal file
0
test/slow/nvm use/Running 'nvm use' with nvmrc containing not installed version
Executable file → Normal file
Loading…
Reference in New Issue
Block a user