asdf/lib/commands/plugin-test.sh

84 lines
2.4 KiB
Bash

fail_test() {
echo "FAILED: $1"
rm -rf "$ASDF_DIR"
exit 1
}
plugin_test_command() {
ASDF_DIR=$(mktemp -dt asdf.XXXX)
export ASDF_DIR
git clone https://github.com/asdf-vm/asdf.git "$ASDF_DIR"
local plugin_name=$1
local plugin_url=$2
local plugin_command="${*:3}"
if [ -z "$plugin_name" ] || [ -z "$plugin_url" ]; then
fail_test "please provide a plugin name and url"
fi
if ! (asdf plugin-add "$plugin_name" "$plugin_url"); then
fail_test "could not install $plugin_name from $plugin_url"
fi
if ! (asdf plugin-list | grep "^$plugin_name$" > /dev/null); then
fail_test "$plugin_name was not properly installed"
fi
local versions
# shellcheck disable=SC2046
if ! read -r -a versions <<< $(asdf list-all "$plugin_name"); then
fail_test "list-all exited with an error"
fi
if [ ${#versions} -eq 0 ]; then
fail_test "list-all did not return any version"
fi
local latest_version
latest_version=${versions[${#versions[@]} - 1]}
if ! (asdf install "$plugin_name" "$latest_version"); then
fail_test "install exited with an error"
fi
cd "$ASDF_DIR" || fail_test "could not cd $ASDF_DIR"
if ! (asdf local "$plugin_name" "$latest_version"); then
fail_test "install did not add the requested version"
fi
if ! (asdf reshim "$plugin_name"); then
fail_test "could not reshim plugin"
fi
if [ -n "$plugin_command" ]; then
(PATH="$ASDF_DIR/bin:$ASDF_DIR/shims:$PATH" "$plugin_command")
local exit_code
exit_code=$?
if [ $exit_code != 0 ]; then
fail_test "$plugin_command failed with exit code $?"
fi
fi
# Assert the scripts in bin are executable by asdf
for filename in "$ASDF_DIR/plugins/$plugin_name/bin"/*
do
if [ ! -x "$filename" ]; then
fail_test "Incorrect permissions on $filename. Must be executable by asdf"
fi
done
# Assert that a license file exists in the plugin repo and is not empty
license_file="$ASDF_DIR/plugins/$plugin_name/LICENSE"
if [ -f "$license_file" ]; then
if [ ! -s "$license_file" ]; then
fail_test "LICENSE file in the plugin repository must not be empty"
fi
else
fail_test "LICENSE file must be present in the plugin repository"
fi
rm -rf "$ASDF_DIR"
}