mirror of
https://github.com/nvm-sh/nvm.git
synced 2025-05-10 22:31:51 +00:00
240 lines
7.8 KiB
Bash
Executable File
240 lines
7.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
die () { printf "$@" ; exit 1; }
|
|
|
|
\. ../../../nvm.sh
|
|
|
|
BASIC_VERSIONS='1.2.3
|
|
10.21.32
|
|
x.x.x
|
|
X.X.X
|
|
*.*.*
|
|
1.2
|
|
10.21
|
|
x.x
|
|
X.X
|
|
*.*
|
|
1
|
|
10
|
|
x
|
|
*
|
|
X'
|
|
|
|
SEMVER_OPERATORS='v
|
|
=
|
|
<
|
|
>
|
|
<=
|
|
>=
|
|
~
|
|
^'
|
|
|
|
|
|
|
|
# Dynamically generate list of semver expressions to test inside each package.json template.
|
|
# Each semver added to this list is paired with the expected output when executed with nvm_get_node_from_pkg_json.
|
|
# Most valid semvers will expecte the output to be the same as the input but there are some valid semvers with certain
|
|
# sequences of tabs/spaces whose outputs are slightly different from their inputs (documented below).
|
|
|
|
# Format for test cases is input and expected output separated by a colon
|
|
# INPUT:EXPECTED_OUTPUT
|
|
TEST_SEMVERS=''
|
|
|
|
BASIC_VERSIONS_COPY=$(echo "$BASIC_VERSIONS")
|
|
while [ -n "$BASIC_VERSIONS_COPY" ]; do
|
|
BASIC_VERSION=$(echo "$BASIC_VERSIONS_COPY" | head -n1)
|
|
BASIC_VERSIONS_COPY=$(echo "$BASIC_VERSIONS_COPY" | tail -n +2)
|
|
|
|
# add test semver with just the version and no comparator
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
$BASIC_VERSION:$BASIC_VERSION"
|
|
|
|
SEMVER_OPERATORS_COPY=$(echo "$SEMVER_OPERATORS")
|
|
while [ -n "$SEMVER_OPERATORS_COPY" ]; do
|
|
SEMVER_OPERATOR=$(echo "$SEMVER_OPERATORS_COPY" | head -n1)
|
|
SEMVER_OPERATORS_COPY=$(echo "$SEMVER_OPERATORS_COPY" | tail -n +2)
|
|
|
|
# add test semver with version adjacent to operator
|
|
# add test semver with version separated from operator by one space
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
$SEMVER_OPERATOR$BASIC_VERSION:$SEMVER_OPERATOR$BASIC_VERSION
|
|
$SEMVER_OPERATOR $BASIC_VERSION:$SEMVER_OPERATOR $BASIC_VERSION"
|
|
done
|
|
done
|
|
|
|
# add valid basic test semvers with hyphen ranges
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
1.2.3 - 1.2.4:1.2.3 - 1.2.4
|
|
10.21.32 - 10.21.33:10.21.32 - 10.21.33
|
|
1.2 - 1.3:1.2 - 1.3
|
|
10.21 - 10.22:10.21 - 10.22
|
|
1 - 2:1 - 2
|
|
10 - 11:10 - 11"
|
|
|
|
# add more complex test semvers with just one comparator set
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
1.2.3 1.2.4:1.2.3 1.2.4
|
|
1.2 1.3:1.2 1.3
|
|
1 2:1 2
|
|
>1.2.3 <=1.3.0:>1.2.3 <=1.3.0"
|
|
|
|
# add test semvers with multiple comparator sets
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
1.2.3 || 1.2.4:1.2.3 || 1.2.4
|
|
1.2 || 1.3:1.2 || 1.3
|
|
1 || 2:1 || 2"
|
|
|
|
# add test semvers that will be successfully extracted from package.json
|
|
# but will be marked invalid upon going through nvm_validate_semver
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
1.2.3||1.2.4:1.2.3||1.2.4
|
|
1.2||1.3:1.2||1.3
|
|
1||2:1||2
|
|
<1.2.3>:<1.2.3>
|
|
<1.2>:<1.2>
|
|
<1>:<1>
|
|
>>1:>>1
|
|
<<1:<<1
|
|
==1:==1
|
|
**:**
|
|
xx:xx
|
|
^^1:^^1
|
|
~~1:~~1
|
|
1.2.3-1.2.4:1.2.3-1.2.4
|
|
10.21.32-10.21.33:10.21.32-10.21.33
|
|
1.2-1.3:1.2-1.3
|
|
10.21-10.22:10.21-10.22
|
|
1-2:1-2
|
|
10-11:10-11"
|
|
|
|
# add test semvers with tabs inside them
|
|
# These semvers are intended to:
|
|
# - validate that semvers can include tabs
|
|
# - validate that all tabs or consecutive tabs are reduced to one space
|
|
# - validate that leading trailing spaces and tabs are removed
|
|
TEST_SEMVERS="$TEST_SEMVERS
|
|
1 1 :1 1
|
|
2 2 :2 2"
|
|
|
|
|
|
# POSITIVE TEST CASES
|
|
|
|
|
|
# (TEST SET #1) uses valid TEST_SEMVER's and valid package.json templates
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS")
|
|
PREV_TEST_SEMVER=''
|
|
for TEMPLATE_NAME in package_json_templates/_valid_*; do
|
|
while [ -n "$TEST_SEMVERS_COPY" ]; do
|
|
LINE=$(echo "$TEST_SEMVERS_COPY" | head -n1)
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS_COPY" | tail -n +2)
|
|
[ -n "$LINE" ] || continue
|
|
TEST_SEMVER_INPUT=$(echo "$LINE" | awk -F: '{ print $1 }')
|
|
EXPECTED_OUTPUT=$(echo "$LINE" | awk -F: '{ print $2 }')
|
|
|
|
if [ "$PREV_TEST_SEMVER" == "$TEST_SEMVER_INPUT" ]; then
|
|
die "Problem iterating through TEST_SEMVERS_COPY (TEST SET #1). Encountered the same value twice in a row. PREV_TEST_SEMVER='$PREV_TEST_SEMVER' TEST_SEMVER_INPUT='$TEST_SEMVER_INPUT'.\n"
|
|
fi
|
|
PREV_TEST_SEMVER=$(printf "%s" "$TEST_SEMVER_INPUT")
|
|
|
|
PKG_JSON_CONTENTS=$(sed 's/NODE_SEMVER/'"$TEST_SEMVER_INPUT"'/g' "$TEMPLATE_NAME" | tail -n +3)
|
|
ACTUAL_OUTPUT=$(nvm_get_node_from_pkg_json "$PKG_JSON_CONTENTS")
|
|
|
|
if [ "$ACTUAL_OUTPUT" != "$EXPECTED_OUTPUT" ] || [ -z "$ACTUAL_OUTPUT" ] || [ -z "$PKG_JSON_CONTENTS" ]; then
|
|
die "'nvm_get_node_from_pkg_json' POSITIVE test case failed (TEST SET #1). Expected '$EXPECTED_OUTPUT' but got '$ACTUAL_OUTPUT' when given input template '$TEMPLATE_NAME':\n$PKG_JSON_CONTENTS"
|
|
fi
|
|
done
|
|
done
|
|
|
|
|
|
# NEGATIVE TEST CASES
|
|
|
|
|
|
# (TEST SET #2) uses valid TEST_SEMVER's but invalid package.json templates
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS")
|
|
PREV_TEST_SEMVER=''
|
|
for TEMPLATE_NAME in package_json_templates/_invalid_*; do
|
|
while [ -n "$TEST_SEMVERS_COPY" ]; do
|
|
LINE=$(echo "$TEST_SEMVERS_COPY" | head -n1)
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS_COPY" | tail -n +2)
|
|
[ -n "$LINE" ] || continue
|
|
TEST_SEMVER_INPUT=$(echo "$LINE" | awk -F: '{ print $1 }')
|
|
|
|
if [ "$PREV_TEST_SEMVER" == "$TEST_SEMVER_INPUT" ]; then
|
|
die "Problem iterating through TEST_SEMVERS_COPY (TEST SET #2). Encountered the same value twice in a row. PREV_TEST_SEMVER='$PREV_TEST_SEMVER' TEST_SEMVER_INPUT='$TEST_SEMVER_INPUT'.\n"
|
|
fi
|
|
PREV_TEST_SEMVER=$(printf "%s" "$TEST_SEMVER_INPUT")
|
|
|
|
PKG_JSON_CONTENTS=$(sed 's/NODE_SEMVER/'"$TEST_SEMVER_INPUT"'/g' "$TEMPLATE_NAME" | tail -n +3)
|
|
ACTUAL_OUTPUT=$(nvm_get_node_from_pkg_json "$PKG_JSON_CONTENTS")
|
|
|
|
if [ "$ACTUAL_OUTPUT" != "" ] || [ -z "$TEST_SEMVER_INPUT" ] || [ -z "$PKG_JSON_CONTENTS" ]; then
|
|
die "'nvm_get_node_from_pkg_json' NEGATIVE test case failed (TEST SET #2). Expected to get empty string but got '$ACTUAL_OUTPUT' when given input template '$TEMPLATE_NAME':\n$PKG_JSON_CONTENTS"
|
|
fi
|
|
done
|
|
done
|
|
|
|
|
|
# invalid test semvers
|
|
TEST_SEMVERS='&1
|
|
@1
|
|
#1
|
|
$1
|
|
%s
|
|
1)
|
|
1(
|
|
1_
|
|
1+
|
|
1]
|
|
1[
|
|
1"
|
|
1:
|
|
1?
|
|
1`
|
|
1!'
|
|
|
|
# (TEST SET #3) uses invalid TEST_SEMVER's but valid package.json templates
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS")
|
|
PREV_TEST_SEMVER=''
|
|
for TEMPLATE_NAME in package_json_templates/_valid_*; do
|
|
while [ -n "$TEST_SEMVERS_COPY" ]; do
|
|
TEST_SEMVER_INPUT=$(echo "$TEST_SEMVERS_COPY" | head -n1)
|
|
[ -n "$TEST_SEMVER_INPUT" ] || continue
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS_COPY" | tail -n +2)
|
|
|
|
if [ "$PREV_TEST_SEMVER" == "$TEST_SEMVER_INPUT" ]; then
|
|
die "Problem iterating through TEST_SEMVERS_COPY (TEST SET #3). Encountered the same value twice in a row. PREV_TEST_SEMVER='$PREV_TEST_SEMVER' TEST_SEMVER_INPUT='$TEST_SEMVER_INPUT'.\n"
|
|
fi
|
|
PREV_TEST_SEMVER=$(printf "%s" "$TEST_SEMVER_INPUT")
|
|
|
|
PKG_JSON_CONTENTS=$(sed 's/NODE_SEMVER/'"$TEST_SEMVER_INPUT"'/g' "$TEMPLATE_NAME" | tail -n +3)
|
|
ACTUAL_OUTPUT=$(nvm_get_node_from_pkg_json "$PKG_JSON_CONTENTS")
|
|
|
|
if [ "$ACTUAL_OUTPUT" != "" ] || [ -z "$TEST_SEMVER_INPUT" ] || [ -z "$PKG_JSON_CONTENTS" ]; then
|
|
die "'nvm_get_node_from_pkg_json' NEGATIVE test case failed (TEST SET #3). Expected to get empty string but got '$ACTUAL_OUTPUT' when given input template '$TEMPLATE_NAME':\n$PKG_JSON_CONTENTS"
|
|
fi
|
|
done
|
|
done
|
|
|
|
# (TEST SET #4) uses invalid TEST_SEMVER's and invalid package.json templates
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS")
|
|
PREV_TEST_SEMVER=''
|
|
for TEMPLATE_NAME in package_json_templates/_invalid_*; do
|
|
while [ -n "$TEST_SEMVERS_COPY" ]; do
|
|
TEST_SEMVER_INPUT=$(echo "$TEST_SEMVERS_COPY" | head -n1)
|
|
[ -n "$TEST_SEMVER_INPUT" ] || continue
|
|
TEST_SEMVERS_COPY=$(echo "$TEST_SEMVERS_COPY" | tail -n +2)
|
|
|
|
if [ "$PREV_TEST_SEMVER" == "$TEST_SEMVER_INPUT" ]; then
|
|
die "Problem iterating through TEST_SEMVERS_COPY (TEST SET #4). Encountered the same value twice in a row. PREV_TEST_SEMVER='$PREV_TEST_SEMVER' TEST_SEMVER_INPUT='$TEST_SEMVER_INPUT'.\n"
|
|
fi
|
|
PREV_TEST_SEMVER=$(printf "%s" "$TEST_SEMVER_INPUT")
|
|
|
|
PKG_JSON_CONTENTS=$(sed 's/NODE_SEMVER/'"$TEST_SEMVER_INPUT"'/g' "$TEMPLATE_NAME" | tail -n +3)
|
|
ACTUAL_OUTPUT=$(nvm_get_node_from_pkg_json "$PKG_JSON_CONTENTS")
|
|
|
|
if [ "$ACTUAL_OUTPUT" != "" ] || [ -z "$TEST_SEMVER_INPUT" ] || [ -z "$PKG_JSON_CONTENTS" ]; then
|
|
die "'nvm_get_node_from_pkg_json' NEGATIVE test case failed (TEST SET #4). Expected to get empty string but got '$ACTUAL_OUTPUT' when given input template '$TEMPLATE_NAME':\n$PKG_JSON_CONTENTS"
|
|
fi
|
|
done
|
|
done
|