mirror of
https://github.com/rbenv/ruby-build.git
synced 2025-10-26 14:50:39 +01:00
Bats doesn't support both suite-wide setup (in helper) *and* file-wide
setup. Which means the existance of any file-level setup() function
overwrites any setup() function from test_helper. This can be confusing,
and (IMO) easier to simply avoid the overwriting and remove any
_implied_ suite-wide setup function from test_helper.
This turns out to not be so bad for the recently added setup function,
because the only test files that actually need aria2c removed from PATH
are those that actually invoke curl. These can be found because they are
the only test files that stub curl; half of which already had
file-specific setup() functions. So the only ones which need a
file-local setup() function added were: checksum.bats and mirror.bats
Along these lines, rbenv.bats and hooks.bats were removing aria2c from
PATH but don't actually need to. (curl isn't stubbed in these tests so
the existance of aria2c wouldn't affect the tests)
Lastly, fixed a tab/spaces whitespace mixup that was introduced by:
750c086d11
162 lines
3.3 KiB
Bash
162 lines
3.3 KiB
Bash
export TMP="$BATS_TEST_DIRNAME/tmp"
|
|
|
|
if [ "$FIXTURE_ROOT" != "$BATS_TEST_DIRNAME/fixtures" ]; then
|
|
export FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures"
|
|
export INSTALL_ROOT="$TMP/install"
|
|
PATH=/usr/bin:/usr/sbin:/bin/:/sbin
|
|
PATH="$BATS_TEST_DIRNAME/../bin:$PATH"
|
|
PATH="$TMP/bin:$PATH"
|
|
export PATH
|
|
fi
|
|
|
|
remove_command_from_path() {
|
|
OLDIFS="${IFS}"
|
|
local cmd="$1"
|
|
local path
|
|
local paths=()
|
|
IFS=:
|
|
for path in ${PATH}; do
|
|
if [ -e "${path}/${cmd}" ]; then
|
|
local tmp_path="$(mktemp -d "${TMP}/path.XXXXX")"
|
|
ln -fs "${path}"/* "${tmp_path}"
|
|
rm -f "${tmp_path}/${cmd}"
|
|
paths["${#paths[@]}"]="${tmp_path}"
|
|
else
|
|
paths["${#paths[@]}"]="${path}"
|
|
fi
|
|
done
|
|
export PATH="${paths[*]}"
|
|
IFS="${OLDIFS}"
|
|
}
|
|
|
|
ensure_not_found_in_path() {
|
|
local cmd
|
|
for cmd; do
|
|
if command -v "${cmd}" 1>/dev/null 2>&1; then
|
|
remove_command_from_path "${cmd}"
|
|
fi
|
|
done
|
|
}
|
|
|
|
teardown() {
|
|
rm -fr "${TMP:?}"/*
|
|
}
|
|
|
|
stub() {
|
|
local program="$1"
|
|
local prefix="$(echo "$program" | tr a-z- A-Z_)"
|
|
shift
|
|
|
|
export "${prefix}_STUB_PLAN"="${TMP}/${program}-stub-plan"
|
|
export "${prefix}_STUB_RUN"="${TMP}/${program}-stub-run"
|
|
export "${prefix}_STUB_END"=
|
|
|
|
mkdir -p "${TMP}/bin"
|
|
ln -sf "${BATS_TEST_DIRNAME}/stubs/stub" "${TMP}/bin/${program}"
|
|
|
|
touch "${TMP}/${program}-stub-plan"
|
|
for arg in "$@"; do printf "%s\n" "$arg" >> "${TMP}/${program}-stub-plan"; done
|
|
}
|
|
|
|
unstub() {
|
|
local program="$1"
|
|
local prefix="$(echo "$program" | tr a-z- A-Z_)"
|
|
local path="${TMP}/bin/${program}"
|
|
|
|
export "${prefix}_STUB_END"=1
|
|
|
|
local STATUS=0
|
|
"$path" || STATUS="$?"
|
|
|
|
rm -f "$path"
|
|
rm -f "${TMP}/${program}-stub-plan" "${TMP}/${program}-stub-run"
|
|
return "$STATUS"
|
|
}
|
|
|
|
run_inline_definition() {
|
|
local definition="${TMP}/build-definition"
|
|
cat > "$definition"
|
|
run ruby-build "$definition" "${1:-$INSTALL_ROOT}"
|
|
}
|
|
|
|
install_fixture() {
|
|
local args
|
|
|
|
while [ "${1#-}" != "$1" ]; do
|
|
args="$args $1"
|
|
shift 1
|
|
done
|
|
|
|
local name="$1"
|
|
local destination="$2"
|
|
[ -n "$destination" ] || destination="$INSTALL_ROOT"
|
|
|
|
run ruby-build $args "$FIXTURE_ROOT/$name" "$destination"
|
|
}
|
|
|
|
assert() {
|
|
if ! "$@"; then
|
|
flunk "failed: $@"
|
|
fi
|
|
}
|
|
|
|
refute() {
|
|
if "$@"; then
|
|
flunk "expected to fail: $@"
|
|
fi
|
|
}
|
|
|
|
flunk() {
|
|
{ if [ "$#" -eq 0 ]; then cat -
|
|
else echo "$@"
|
|
fi
|
|
} | sed "s:${TMP}:\${TMP}:g" >&2
|
|
return 1
|
|
}
|
|
|
|
assert_success() {
|
|
if [ "$status" -ne 0 ]; then
|
|
{ echo "command failed with exit status $status"
|
|
echo "output: $output"
|
|
} | flunk
|
|
elif [ "$#" -gt 0 ]; then
|
|
assert_output "$1"
|
|
fi
|
|
}
|
|
|
|
assert_failure() {
|
|
if [ "$status" -eq 0 ]; then
|
|
flunk "expected failed exit status"
|
|
elif [ "$#" -gt 0 ]; then
|
|
assert_output "$1"
|
|
fi
|
|
}
|
|
|
|
assert_equal() {
|
|
if [ "$1" != "$2" ]; then
|
|
{ echo "expected: $1"
|
|
echo "actual: $2"
|
|
} | flunk
|
|
fi
|
|
}
|
|
|
|
assert_output() {
|
|
local expected
|
|
if [ $# -eq 0 ]; then expected="$(cat -)"
|
|
else expected="$1"
|
|
fi
|
|
assert_equal "$expected" "$output"
|
|
}
|
|
|
|
assert_output_contains() {
|
|
local expected="$1"
|
|
if [ -z "$expected" ]; then
|
|
echo "assert_output_contains needs an argument" >&2
|
|
return 1
|
|
fi
|
|
echo "$output" | $(type -p ggrep grep | head -1) -F "$expected" >/dev/null || {
|
|
{ echo "expected output to contain $expected"
|
|
echo "actual: $output"
|
|
} | flunk
|
|
}
|
|
}
|