mirror of
https://github.com/rbenv/rbenv.git
synced 2024-12-28 20:55:38 +01:00
tests galore
This commit is contained in:
parent
1fe59e41ea
commit
bb6bccb782
13 changed files with 336 additions and 23 deletions
|
@ -398,6 +398,11 @@ The rbenv source code is [hosted on
|
|||
GitHub](https://github.com/sstephenson/rbenv). It's clean, modular,
|
||||
and easy to understand, even if you're not a shell hacker.
|
||||
|
||||
Tests are executed using [Bats](https://github.com/sstephenson/bats):
|
||||
|
||||
$ bats test
|
||||
$ bats test/<file>.bats
|
||||
|
||||
Please feel free to submit pull requests and file bugs on the [issue
|
||||
tracker](https://github.com/sstephenson/rbenv/issues).
|
||||
|
||||
|
|
|
@ -14,8 +14,9 @@ set -e
|
|||
|
||||
version="0.4.0"
|
||||
|
||||
cd "$RBENV_ROOT"
|
||||
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
|
||||
git_revision="${git_revision#v}"
|
||||
if cd "$RBENV_ROOT" 2>/dev/null; then
|
||||
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
|
||||
git_revision="${git_revision#v}"
|
||||
fi
|
||||
|
||||
echo "rbenv ${git_revision:-$version}"
|
||||
|
|
|
@ -11,6 +11,8 @@ if [ "$1" = "--complete" ]; then
|
|||
exit
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
for command in "${RBENV_ROOT}/shims/"*; do
|
||||
if [ "$1" = "--short" ]; then
|
||||
echo "${command##*/}"
|
||||
|
|
27
test/commands.bats
Normal file
27
test/commands.bats
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
@test "commands" {
|
||||
run rbenv-commands
|
||||
assert_success
|
||||
assert_line "init"
|
||||
assert_line "rehash"
|
||||
assert_line "shell"
|
||||
refute_line "sh-shell"
|
||||
assert_line "echo"
|
||||
}
|
||||
|
||||
@test "commands --sh" {
|
||||
run rbenv-commands --sh
|
||||
assert_success
|
||||
refute_line "init"
|
||||
assert_line "shell"
|
||||
}
|
||||
|
||||
@test "commands --no-sh" {
|
||||
run rbenv-commands --no-sh
|
||||
assert_success
|
||||
assert_line "init"
|
||||
refute_line "shell"
|
||||
}
|
31
test/global.bats
Normal file
31
test/global.bats
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
@test "default" {
|
||||
run rbenv global
|
||||
assert_success
|
||||
assert_output "system"
|
||||
}
|
||||
|
||||
@test "read RBENV_ROOT/version" {
|
||||
mkdir -p "$RBENV_ROOT"
|
||||
echo "1.2.3" > "$RBENV_ROOT/version"
|
||||
run rbenv-global
|
||||
assert_success
|
||||
assert_output "1.2.3"
|
||||
}
|
||||
|
||||
@test "set RBENV_ROOT/version" {
|
||||
mkdir -p "$RBENV_ROOT/versions/1.2.3"
|
||||
run rbenv-global "1.2.3"
|
||||
assert_success
|
||||
run rbenv global
|
||||
assert_success "1.2.3"
|
||||
}
|
||||
|
||||
@test "fail setting invalid RBENV_ROOT/version" {
|
||||
mkdir -p "$RBENV_ROOT"
|
||||
run rbenv-global "1.2.3"
|
||||
assert_failure "rbenv: version \`1.2.3' not installed"
|
||||
}
|
2
test/libexec/rbenv-echo
Executable file
2
test/libexec/rbenv-echo
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env bash
|
||||
eval "echo \$$1"
|
53
test/local.bats
Normal file
53
test/local.bats
Normal file
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
setup() {
|
||||
mkdir -p "${RBENV_TEST_DIR}/myproject"
|
||||
cd "${RBENV_TEST_DIR}/myproject"
|
||||
}
|
||||
|
||||
@test "no version" {
|
||||
assert [ ! -e "${PWD}/.ruby-version" ]
|
||||
run rbenv-local
|
||||
assert_failure "rbenv: no local version configured for this directory"
|
||||
}
|
||||
|
||||
@test "local version" {
|
||||
echo "1.2.3" > .ruby-version
|
||||
run rbenv-local
|
||||
assert_success "1.2.3"
|
||||
}
|
||||
|
||||
@test "ignores version in parent directory" {
|
||||
echo "1.2.3" > .ruby-version
|
||||
mkdir -p "subdir" && cd "subdir"
|
||||
run rbenv-local
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "ignores RBENV_DIR" {
|
||||
echo "1.2.3" > .ruby-version
|
||||
mkdir -p "$HOME"
|
||||
echo "2.0-home" > "${HOME}/.ruby-version"
|
||||
RBENV_DIR="$HOME" run rbenv-local
|
||||
assert_success "1.2.3"
|
||||
}
|
||||
|
||||
@test "sets local version" {
|
||||
mkdir -p "${RBENV_ROOT}/versions/1.2.3"
|
||||
run rbenv-local 1.2.3
|
||||
assert_success ""
|
||||
assert [ "$(cat .ruby-version)" = "1.2.3" ]
|
||||
}
|
||||
|
||||
@test "changes local version" {
|
||||
echo "1.0-pre" > .ruby-version
|
||||
mkdir -p "${RBENV_ROOT}/versions/1.2.3"
|
||||
run rbenv-local
|
||||
assert_success "1.0-pre"
|
||||
run rbenv-local 1.2.3
|
||||
assert_success ""
|
||||
run rbenv-local
|
||||
assert_success "1.2.3"
|
||||
}
|
25
test/prefix.bats
Normal file
25
test/prefix.bats
Normal file
|
@ -0,0 +1,25 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
@test "prefix" {
|
||||
mkdir -p "${RBENV_TEST_DIR}/myproject"
|
||||
cd "${RBENV_TEST_DIR}/myproject"
|
||||
echo "1.2.3" > .ruby-version
|
||||
mkdir -p "${RBENV_ROOT}/versions/1.2.3"
|
||||
run rbenv-prefix
|
||||
assert_success "${RBENV_ROOT}/versions/1.2.3"
|
||||
}
|
||||
|
||||
@test "prefix for invalid version" {
|
||||
RBENV_VERSION="1.2.3" run rbenv-prefix
|
||||
assert_failure "rbenv: version \`1.2.3' not installed"
|
||||
}
|
||||
|
||||
@test "prefix for system" {
|
||||
mkdir -p "${RBENV_TEST_DIR}/bin"
|
||||
touch "${RBENV_TEST_DIR}/bin/ruby"
|
||||
chmod +x "${RBENV_TEST_DIR}/bin/ruby"
|
||||
RBENV_VERSION="system" run rbenv-prefix
|
||||
assert_success "$RBENV_TEST_DIR"
|
||||
}
|
47
test/rbenv.bats
Normal file
47
test/rbenv.bats
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
@test "blank invocation" {
|
||||
run rbenv
|
||||
assert_success
|
||||
assert [ "${lines[0]}" = "rbenv 0.4.0" ]
|
||||
}
|
||||
|
||||
@test "invalid command" {
|
||||
run rbenv does-not-exist
|
||||
assert_failure
|
||||
assert_output "rbenv: no such command \`does-not-exist'"
|
||||
}
|
||||
|
||||
@test "default RBENV_ROOT" {
|
||||
RBENV_ROOT="" HOME=/home/mislav run rbenv root
|
||||
assert_success
|
||||
assert_output "/home/mislav/.rbenv"
|
||||
}
|
||||
|
||||
@test "inherited RBENV_ROOT" {
|
||||
RBENV_ROOT=/opt/rbenv run rbenv root
|
||||
assert_success
|
||||
assert_output "/opt/rbenv"
|
||||
}
|
||||
|
||||
@test "default RBENV_DIR" {
|
||||
run rbenv echo RBENV_DIR
|
||||
assert_output "$(pwd)"
|
||||
}
|
||||
|
||||
@test "inherited RBENV_DIR" {
|
||||
dir="${BATS_TMPDIR}/myproject"
|
||||
mkdir -p "$dir"
|
||||
RBENV_DIR="$dir" run rbenv echo RBENV_DIR
|
||||
assert_output "$dir"
|
||||
}
|
||||
|
||||
@test "invalid RBENV_DIR" {
|
||||
dir="${BATS_TMPDIR}/does-not-exist"
|
||||
assert [ ! -d "$dir" ]
|
||||
RBENV_DIR="$dir" run rbenv echo RBENV_DIR
|
||||
assert_failure
|
||||
assert_output "rbenv: cannot change working directory to \`$dir'"
|
||||
}
|
|
@ -1,33 +1,27 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
export PATH="${BATS_TEST_DIRNAME}/../libexec:$PATH"
|
||||
|
||||
RBENV_TEST_ROOT="${BATS_TMPDIR}/rbenv"
|
||||
export RBENV_ROOT="$RBENV_TEST_ROOT"
|
||||
|
||||
teardown() {
|
||||
rm -rf "$RBENV_TEST_ROOT"
|
||||
}
|
||||
load test_helper
|
||||
|
||||
@test "empty rehash" {
|
||||
assert [ ! -d "${RBENV_ROOT}/shims" ]
|
||||
run rbenv-rehash
|
||||
[ "$status" -eq 0 ]
|
||||
[ -d "${RBENV_TEST_ROOT}/shims" ]
|
||||
rmdir "${RBENV_TEST_ROOT}/shims"
|
||||
assert_success
|
||||
assert [ -d "${RBENV_ROOT}/shims" ]
|
||||
rmdir "${RBENV_ROOT}/shims"
|
||||
}
|
||||
|
||||
@test "shims directory not writable" {
|
||||
mkdir -p "${RBENV_TEST_ROOT}/shims"
|
||||
chmod -w "${RBENV_TEST_ROOT}/shims"
|
||||
@test "non-writable shims directory" {
|
||||
mkdir -p "${RBENV_ROOT}/shims"
|
||||
chmod -w "${RBENV_ROOT}/shims"
|
||||
run rbenv-rehash
|
||||
[ "$status" -eq 1 ]
|
||||
[ "$output" = "rbenv: cannot rehash: ${RBENV_TEST_ROOT}/shims isn't writable" ]
|
||||
assert_failure
|
||||
assert_output "rbenv: cannot rehash: ${RBENV_ROOT}/shims isn't writable"
|
||||
}
|
||||
|
||||
@test "rehash in progress" {
|
||||
mkdir -p "${RBENV_TEST_ROOT}/shims"
|
||||
touch "${RBENV_TEST_ROOT}/shims/.rbenv-shim"
|
||||
mkdir -p "${RBENV_ROOT}/shims"
|
||||
touch "${RBENV_ROOT}/shims/.rbenv-shim"
|
||||
run rbenv-rehash
|
||||
[ "$status" -eq 1 ]
|
||||
[ "$output" = "rbenv: cannot rehash: ${RBENV_TEST_ROOT}/shims/.rbenv-shim exists" ]
|
||||
assert_failure
|
||||
assert_output "rbenv: cannot rehash: ${RBENV_ROOT}/shims/.rbenv-shim exists"
|
||||
}
|
||||
|
|
35
test/shell.bats
Normal file
35
test/shell.bats
Normal file
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
@test "no shell version" {
|
||||
mkdir -p "${RBENV_TEST_DIR}/myproject"
|
||||
cd "${RBENV_TEST_DIR}/myproject"
|
||||
echo "1.2.3" > .ruby-version
|
||||
RBENV_VERSION="" run rbenv-sh-shell
|
||||
assert_failure "rbenv: no shell-specific version configured"
|
||||
}
|
||||
|
||||
@test "shell version" {
|
||||
RBENV_VERSION="1.2.3" run rbenv-sh-shell
|
||||
assert_success 'echo "$RBENV_VERSION"'
|
||||
}
|
||||
|
||||
@test "shell unset" {
|
||||
run rbenv-sh-shell --unset
|
||||
assert_success "unset RBENV_VERSION"
|
||||
}
|
||||
|
||||
@test "shell change invalid version" {
|
||||
run rbenv-sh-shell 1.2.3
|
||||
assert_failure
|
||||
assert_line "rbenv: version \`1.2.3' not installed"
|
||||
assert_line "return 1"
|
||||
}
|
||||
|
||||
@test "shell change version" {
|
||||
mkdir -p "${RBENV_ROOT}/versions/1.2.3"
|
||||
run rbenv-sh-shell 1.2.3
|
||||
assert_success 'export RBENV_VERSION="1.2.3"'
|
||||
refute_line "return 1"
|
||||
}
|
29
test/shims.bats
Normal file
29
test/shims.bats
Normal file
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
|
||||
@test "no shims" {
|
||||
run rbenv-shims
|
||||
assert_success
|
||||
assert [ -z "$output" ]
|
||||
}
|
||||
|
||||
@test "shims" {
|
||||
mkdir -p "${RBENV_ROOT}/shims"
|
||||
touch "${RBENV_ROOT}/shims/ruby"
|
||||
touch "${RBENV_ROOT}/shims/irb"
|
||||
run rbenv-shims
|
||||
assert_success
|
||||
assert_line "${RBENV_ROOT}/shims/ruby"
|
||||
assert_line "${RBENV_ROOT}/shims/irb"
|
||||
}
|
||||
|
||||
@test "shims --short" {
|
||||
mkdir -p "${RBENV_ROOT}/shims"
|
||||
touch "${RBENV_ROOT}/shims/ruby"
|
||||
touch "${RBENV_ROOT}/shims/irb"
|
||||
run rbenv-shims --short
|
||||
assert_success
|
||||
assert_line "irb"
|
||||
assert_line "ruby"
|
||||
}
|
62
test/test_helper.bash
Normal file
62
test/test_helper.bash
Normal file
|
@ -0,0 +1,62 @@
|
|||
RBENV_TEST_DIR="${BATS_TMPDIR}/rbenv"
|
||||
export RBENV_ROOT="${RBENV_TEST_DIR}/root"
|
||||
export HOME="${RBENV_TEST_DIR}/home"
|
||||
|
||||
unset RBENV_VERSION
|
||||
unset RBENV_DIR
|
||||
|
||||
export PATH="${RBENV_TEST_DIR}/bin:$PATH"
|
||||
export PATH="${BATS_TEST_DIRNAME}/../libexec:$PATH"
|
||||
export PATH="${BATS_TEST_DIRNAME}/libexec:$PATH"
|
||||
export PATH="${RBENV_ROOT}/shims:$PATH"
|
||||
|
||||
teardown() {
|
||||
rm -rf "$RBENV_TEST_DIR"
|
||||
}
|
||||
|
||||
flunk() {
|
||||
echo "$@" | sed "s:${RBENV_ROOT}:\$RBENV_ROOT:" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
assert_success() {
|
||||
if [ "$status" -ne 0 ]; then
|
||||
flunk "command failed with exit status $status"
|
||||
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_output() {
|
||||
if [ "$output" != "$1" ]; then
|
||||
flunk "expected: $1" || true
|
||||
flunk "got: $output"
|
||||
fi
|
||||
}
|
||||
|
||||
assert_line() {
|
||||
for line in "${lines[@]}"; do
|
||||
if [ "$line" = "$1" ]; then return 0; fi
|
||||
done
|
||||
flunk "expected line \`$1'"
|
||||
}
|
||||
|
||||
refute_line() {
|
||||
for line in "${lines[@]}"; do
|
||||
if [ "$line" = "$1" ]; then flunk "expected to not find line \`$line'"; fi
|
||||
done
|
||||
}
|
||||
|
||||
assert() {
|
||||
if ! "$@"; then
|
||||
flunk "failed: $@"
|
||||
fi
|
||||
}
|
Loading…
Reference in a new issue