mirror of
https://github.com/rbenv/ruby-build.git
synced 2025-09-09 10:41:18 +02:00
For the tests to run on FreeBSD, the bash executable needs to be available in PATH. The test_helper PATH was modified by49a9471758
andf70d958f47
in order to be sure that bash is in PATH on FreeBSD. (The default location for packages on FreeBSD is /usr/local/bin, and since bash isn't provided by FreeBSD itself, that means /usr/local/bin is the most common, if not only, location to find bash on FreeBSD.) However, adding /usr/local/bin to PATH means that homebrew-managed packages on macOS are now in PATH for the test suite. This is especially important due to packages like readline. Since ruby-build prefers homebrew readline when available, this makes the tests fail on macOS (because the tests are written assuming no readline configuration.) While the tests could stub brew in all cases, to ensure the readline package is ignored by the tests, it seems more prudent to revert the PATH to be as minimal as possible, and to only include /usr/local/bin by precisely the OS that depends on it.
138 lines
2.8 KiB
Bash
138 lines
2.8 KiB
Bash
export TMP="$BATS_TEST_DIRNAME/tmp"
|
|
export RUBY_BUILD_CURL_OPTS=
|
|
export RUBY_BUILD_HTTP_CLIENT="curl"
|
|
|
|
if [ "$FIXTURE_ROOT" != "$BATS_TEST_DIRNAME/fixtures" ]; then
|
|
export FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures"
|
|
export INSTALL_ROOT="$TMP/install"
|
|
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
|
|
if [ "FreeBSD" = "$(uname -s)" ]; then
|
|
PATH="/usr/local/bin:$PATH"
|
|
fi
|
|
PATH="$BATS_TEST_DIRNAME/../bin:$PATH"
|
|
PATH="$TMP/bin:$PATH"
|
|
export PATH
|
|
fi
|
|
|
|
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
|
|
}
|
|
}
|