Files
nvm/test/fast/Unit tests/nvm_echo
T
Cassidy Marble 66640e6000 [Perf] nvm_echo: use the printf shell builtin under zsh
In zsh, `command printf` skips the builtin and forks `/usr/bin/printf`.
2026-10-06 17:54:48 -03:00

39 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
die () { echo "$@" ; exit 1; }
cleanup() {
rm -rf "${TEST_DIR}"
}
: nvm.sh
\. ../../../nvm.sh
TEST_DIR="$(pwd)/nvm_echo_tmp"
[ ! -e "${TEST_DIR}" ] && mkdir "${TEST_DIR}"
# a `printf` that reports that it ran: `nvm_echo` must use a shell builtin
# rather than resolving `printf` through `PATH` (zsh's `command` skips the
# builtin and runs `/usr/bin/printf` on every call)
MOCK_BIN="${TEST_DIR}/bin"
mkdir -p "${MOCK_BIN}"
{
echo '#!/bin/sh'
echo "echo 'MOCKED-PRINTF'"
} > "${MOCK_BIN}/printf"
chmod +x "${MOCK_BIN}/printf"
OUTPUT="$(nvm_echo 'hello world')"
[ "${OUTPUT}" = 'hello world' ] || die "expected 'hello world', got '${OUTPUT}'"
OUTPUT="$(nvm_echo)"
[ -z "${OUTPUT}" ] || die "expected no output, got '${OUTPUT}'"
OUTPUT="$(PATH="${MOCK_BIN}:${PATH}" nvm_echo 'no fork, please' 2>&1)"
[ "${OUTPUT}" = 'no fork, please' ] || die "for nvm_echo, expected 'no fork, please', got '${OUTPUT}'"
OUTPUT="$(PATH="${MOCK_BIN}:${PATH}" nvm_echo_with_colors 'no fork, please' 2>&1)"
[ "${OUTPUT}" = 'no fork, please' ] || die "for nvm_echo_with_colors, expected 'no fork, please', got '${OUTPUT}'"
cleanup