2013-04-08 21:35:22 +02:00
|
|
|
#!/usr/bin/env bats
|
|
|
|
|
|
|
|
load test_helper
|
|
|
|
|
|
|
|
setup() {
|
|
|
|
mkdir -p "$RBENV_TEST_DIR"
|
|
|
|
cd "$RBENV_TEST_DIR"
|
|
|
|
}
|
|
|
|
|
|
|
|
@test "reports global file even if it doesn't exist" {
|
|
|
|
assert [ ! -e "${RBENV_ROOT}/version" ]
|
|
|
|
run rbenv-version-origin
|
|
|
|
assert_success "${RBENV_ROOT}/version"
|
|
|
|
}
|
|
|
|
|
|
|
|
@test "detects global file" {
|
|
|
|
mkdir -p "$RBENV_ROOT"
|
|
|
|
touch "${RBENV_ROOT}/version"
|
|
|
|
run rbenv-version-origin
|
|
|
|
assert_success "${RBENV_ROOT}/version"
|
|
|
|
}
|
|
|
|
|
|
|
|
@test "detects RBENV_VERSION" {
|
|
|
|
RBENV_VERSION=1 run rbenv-version-origin
|
|
|
|
assert_success "RBENV_VERSION environment variable"
|
|
|
|
}
|
|
|
|
|
|
|
|
@test "detects local file" {
|
2018-02-26 09:32:43 +01:00
|
|
|
echo "system" > .ruby-version
|
2013-04-08 21:35:22 +02:00
|
|
|
run rbenv-version-origin
|
|
|
|
assert_success "${PWD}/.ruby-version"
|
|
|
|
}
|
|
|
|
|
create hook: version-origin
Expose a `version-origin` hook.
It is invoked *before* the traditional `rbenv-version-file` lookup. Because `version-origin` is traditionally run immediately after `version-name`, then any plugin hooks that alter `version-name` would have done so. Thus, running `version-origin` prior to printing the origin gives those plugins a chance to alter the `version-origin` to match.
If any of the hooks set `$RBENV_VERSION_ORIGIN`, then it is used as the return value. Otherwise, the existing logic continues to return "environment variable" or "filename" as appropriate.
This change, in conjunction with the `version-name` hook, makes a clean seam by which plugins can inject their own ruby version setting logic. Using this seam, as opposed to altering `$RBENV_COMMAND_PATH` from the `which` hook, means that the version name and origin are set more reliably and so `version`, `version-name`, `version-origin` and `which` all work as expected. Indeed, even PS1 works now.
2015-05-28 05:29:11 +02:00
|
|
|
@test "reports from hook" {
|
2015-12-29 17:01:10 +01:00
|
|
|
create_hook version-origin test.bash <<<"RBENV_VERSION_ORIGIN=plugin"
|
create hook: version-origin
Expose a `version-origin` hook.
It is invoked *before* the traditional `rbenv-version-file` lookup. Because `version-origin` is traditionally run immediately after `version-name`, then any plugin hooks that alter `version-name` would have done so. Thus, running `version-origin` prior to printing the origin gives those plugins a chance to alter the `version-origin` to match.
If any of the hooks set `$RBENV_VERSION_ORIGIN`, then it is used as the return value. Otherwise, the existing logic continues to return "environment variable" or "filename" as appropriate.
This change, in conjunction with the `version-name` hook, makes a clean seam by which plugins can inject their own ruby version setting logic. Using this seam, as opposed to altering `$RBENV_COMMAND_PATH` from the `which` hook, means that the version name and origin are set more reliably and so `version`, `version-name`, `version-origin` and `which` all work as expected. Indeed, even PS1 works now.
2015-05-28 05:29:11 +02:00
|
|
|
|
2015-12-29 17:01:10 +01:00
|
|
|
RBENV_VERSION=1 run rbenv-version-origin
|
create hook: version-origin
Expose a `version-origin` hook.
It is invoked *before* the traditional `rbenv-version-file` lookup. Because `version-origin` is traditionally run immediately after `version-name`, then any plugin hooks that alter `version-name` would have done so. Thus, running `version-origin` prior to printing the origin gives those plugins a chance to alter the `version-origin` to match.
If any of the hooks set `$RBENV_VERSION_ORIGIN`, then it is used as the return value. Otherwise, the existing logic continues to return "environment variable" or "filename" as appropriate.
This change, in conjunction with the `version-name` hook, makes a clean seam by which plugins can inject their own ruby version setting logic. Using this seam, as opposed to altering `$RBENV_COMMAND_PATH` from the `which` hook, means that the version name and origin are set more reliably and so `version`, `version-name`, `version-origin` and `which` all work as expected. Indeed, even PS1 works now.
2015-05-28 05:29:11 +02:00
|
|
|
assert_success "plugin"
|
|
|
|
}
|
2015-12-23 17:26:53 +01:00
|
|
|
|
2015-12-29 17:15:27 +01:00
|
|
|
@test "carries original IFS within hooks" {
|
|
|
|
create_hook version-origin hello.bash <<SH
|
|
|
|
hellos=(\$(printf "hello\\tugly world\\nagain"))
|
|
|
|
echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
|
|
|
|
SH
|
|
|
|
|
|
|
|
export RBENV_VERSION=system
|
|
|
|
IFS=$' \t\n' run rbenv-version-origin env
|
|
|
|
assert_success
|
|
|
|
assert_line "HELLO=:hello:ugly:world:again"
|
|
|
|
}
|
|
|
|
|
2015-12-23 17:26:53 +01:00
|
|
|
@test "doesn't inherit RBENV_VERSION_ORIGIN from environment" {
|
|
|
|
RBENV_VERSION_ORIGIN=ignored run rbenv-version-origin
|
|
|
|
assert_success "${RBENV_ROOT}/version"
|
|
|
|
}
|