#!/bin/sh die () { echo "$@" ; exit 1; } : nvm.sh \. ../../../nvm.sh nvm_version_greater 0.10.0 0.2.12 || die '"nvm_version_greater 0.10.0 0.2.12" did not return true' nvm_version_greater 0.20.12 0.10.0 || die '"nvm_version_greater 0.20.12 0.10.0" did not return true' nvm_version_greater v18.20.0 v18.19.9 || die '"nvm_version_greater v18.20.0 v18.19.9" did not return true' if nvm_version_greater 0.10.0 0.20.12; then die '"nvm_version_greater 0.10.0 0.20.12" returned true' fi if nvm_version_greater 0.10.0 0.10.0; then die '"nvm_version_greater" returned false for the same two versions' fi if nvm_version_greater v18.20.0 v18.20.0; then die '"nvm_version_greater v18.20.0 v18.20.0" returned true for the same two versions' fi if nvm_version_greater v18.19.9 v18.20.0; then die '"nvm_version_greater v18.19.9 v18.20.0" returned true' fi # a partial version is not a plain `x.y.z`, so it keeps the awk comparison nvm_version_greater 0.10 0.2.12 || die '"nvm_version_greater 0.10 0.2.12" did not return true' # the comparison must not write anything to stdout (zsh's `typeset` prints a # local variable when it is redeclared) OUTPUT="$(nvm_version_greater 0.10.0 0.2.12 2>&1)" [ -z "${OUTPUT}" ] || die "nvm_version_greater 0.10.0 0.2.12 wrote output: '${OUTPUT}'" # `nvm_version_greater` must not fork a command for a plain `x.y.z` pair: # mock `awk`, which the comparison used, and fail if it runs TEST_DIR="$(pwd)/nvm_version_greater_tmp" [ ! -e "${TEST_DIR}" ] && mkdir "${TEST_DIR}" MOCK_BIN="${TEST_DIR}/bin" mkdir -p "${MOCK_BIN}" { echo '#!/bin/sh' echo 'echo "awk was called" >&2' echo 'exit 1' } > "${MOCK_BIN}/awk" chmod +x "${MOCK_BIN}/awk" PATH="${MOCK_BIN}:${PATH}" nvm_version_greater 0.10.0 0.2.12 \ || die 'nvm_version_greater 0.10.0 0.2.12 forked a command' PATH="${MOCK_BIN}:${PATH}" nvm_version_greater v18.20.0 v18.19.9 \ || die 'nvm_version_greater v18.20.0 v18.19.9 forked a command' rm -rf "${TEST_DIR}"