mirror of
https://github.com/pyenv/pyenv.git
synced 2024-11-21 20:47:00 -05: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,
|
GitHub](https://github.com/sstephenson/rbenv). It's clean, modular,
|
||||||
and easy to understand, even if you're not a shell hacker.
|
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
|
Please feel free to submit pull requests and file bugs on the [issue
|
||||||
tracker](https://github.com/sstephenson/rbenv/issues).
|
tracker](https://github.com/sstephenson/rbenv/issues).
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,9 @@ set -e
|
||||||
|
|
||||||
version="0.4.0"
|
version="0.4.0"
|
||||||
|
|
||||||
cd "$RBENV_ROOT"
|
if cd "$RBENV_ROOT" 2>/dev/null; then
|
||||||
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
|
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
|
||||||
git_revision="${git_revision#v}"
|
git_revision="${git_revision#v}"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "rbenv ${git_revision:-$version}"
|
echo "rbenv ${git_revision:-$version}"
|
||||||
|
|
|
@ -11,6 +11,8 @@ if [ "$1" = "--complete" ]; then
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
for command in "${RBENV_ROOT}/shims/"*; do
|
for command in "${RBENV_ROOT}/shims/"*; do
|
||||||
if [ "$1" = "--short" ]; then
|
if [ "$1" = "--short" ]; then
|
||||||
echo "${command##*/}"
|
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
|
#!/usr/bin/env bats
|
||||||
|
|
||||||
export PATH="${BATS_TEST_DIRNAME}/../libexec:$PATH"
|
load test_helper
|
||||||
|
|
||||||
RBENV_TEST_ROOT="${BATS_TMPDIR}/rbenv"
|
|
||||||
export RBENV_ROOT="$RBENV_TEST_ROOT"
|
|
||||||
|
|
||||||
teardown() {
|
|
||||||
rm -rf "$RBENV_TEST_ROOT"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "empty rehash" {
|
@test "empty rehash" {
|
||||||
|
assert [ ! -d "${RBENV_ROOT}/shims" ]
|
||||||
run rbenv-rehash
|
run rbenv-rehash
|
||||||
[ "$status" -eq 0 ]
|
assert_success
|
||||||
[ -d "${RBENV_TEST_ROOT}/shims" ]
|
assert [ -d "${RBENV_ROOT}/shims" ]
|
||||||
rmdir "${RBENV_TEST_ROOT}/shims"
|
rmdir "${RBENV_ROOT}/shims"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "shims directory not writable" {
|
@test "non-writable shims directory" {
|
||||||
mkdir -p "${RBENV_TEST_ROOT}/shims"
|
mkdir -p "${RBENV_ROOT}/shims"
|
||||||
chmod -w "${RBENV_TEST_ROOT}/shims"
|
chmod -w "${RBENV_ROOT}/shims"
|
||||||
run rbenv-rehash
|
run rbenv-rehash
|
||||||
[ "$status" -eq 1 ]
|
assert_failure
|
||||||
[ "$output" = "rbenv: cannot rehash: ${RBENV_TEST_ROOT}/shims isn't writable" ]
|
assert_output "rbenv: cannot rehash: ${RBENV_ROOT}/shims isn't writable"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "rehash in progress" {
|
@test "rehash in progress" {
|
||||||
mkdir -p "${RBENV_TEST_ROOT}/shims"
|
mkdir -p "${RBENV_ROOT}/shims"
|
||||||
touch "${RBENV_TEST_ROOT}/shims/.rbenv-shim"
|
touch "${RBENV_ROOT}/shims/.rbenv-shim"
|
||||||
run rbenv-rehash
|
run rbenv-rehash
|
||||||
[ "$status" -eq 1 ]
|
assert_failure
|
||||||
[ "$output" = "rbenv: cannot rehash: ${RBENV_TEST_ROOT}/shims/.rbenv-shim exists" ]
|
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