選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

125 行
3.6 KiB

  1. #!/usr/bin/env bats
  2. load test_helper
  3. create_executable() {
  4. local bin
  5. if [[ $1 == */* ]]; then bin="$1"
  6. else bin="${RBENV_ROOT}/versions/${1}/bin"
  7. fi
  8. mkdir -p "$bin"
  9. touch "${bin}/$2"
  10. chmod +x "${bin}/$2"
  11. }
  12. @test "outputs path to executable" {
  13. create_executable "1.8" "ruby"
  14. create_executable "2.0" "rspec"
  15. RBENV_VERSION=1.8 run rbenv-which ruby
  16. assert_success "${RBENV_ROOT}/versions/1.8/bin/ruby"
  17. RBENV_VERSION=2.0 run rbenv-which rspec
  18. assert_success "${RBENV_ROOT}/versions/2.0/bin/rspec"
  19. }
  20. @test "searches PATH for system version" {
  21. create_executable "${RBENV_TEST_DIR}/bin" "kill-all-humans"
  22. create_executable "${RBENV_ROOT}/shims" "kill-all-humans"
  23. RBENV_VERSION=system run rbenv-which kill-all-humans
  24. assert_success "${RBENV_TEST_DIR}/bin/kill-all-humans"
  25. }
  26. @test "searches PATH for system version (shims prepended)" {
  27. create_executable "${RBENV_TEST_DIR}/bin" "kill-all-humans"
  28. create_executable "${RBENV_ROOT}/shims" "kill-all-humans"
  29. PATH="${RBENV_ROOT}/shims:$PATH" RBENV_VERSION=system run rbenv-which kill-all-humans
  30. assert_success "${RBENV_TEST_DIR}/bin/kill-all-humans"
  31. }
  32. @test "searches PATH for system version (shims appended)" {
  33. create_executable "${RBENV_TEST_DIR}/bin" "kill-all-humans"
  34. create_executable "${RBENV_ROOT}/shims" "kill-all-humans"
  35. PATH="$PATH:${RBENV_ROOT}/shims" RBENV_VERSION=system run rbenv-which kill-all-humans
  36. assert_success "${RBENV_TEST_DIR}/bin/kill-all-humans"
  37. }
  38. @test "searches PATH for system version (shims spread)" {
  39. create_executable "${RBENV_TEST_DIR}/bin" "kill-all-humans"
  40. create_executable "${RBENV_ROOT}/shims" "kill-all-humans"
  41. PATH="${RBENV_ROOT}/shims:${RBENV_ROOT}/shims:/tmp/non-existent:$PATH:${RBENV_ROOT}/shims" \
  42. RBENV_VERSION=system run rbenv-which kill-all-humans
  43. assert_success "${RBENV_TEST_DIR}/bin/kill-all-humans"
  44. }
  45. @test "doesn't include current directory in PATH search" {
  46. export PATH="$(path_without "kill-all-humans")"
  47. mkdir -p "$RBENV_TEST_DIR"
  48. cd "$RBENV_TEST_DIR"
  49. touch kill-all-humans
  50. chmod +x kill-all-humans
  51. RBENV_VERSION=system run rbenv-which kill-all-humans
  52. assert_failure "rbenv: kill-all-humans: command not found"
  53. }
  54. @test "version not installed" {
  55. create_executable "2.0" "rspec"
  56. RBENV_VERSION=1.9 run rbenv-which rspec
  57. assert_failure "rbenv: version \`1.9' is not installed (set by RBENV_VERSION environment variable)"
  58. }
  59. @test "no executable found" {
  60. create_executable "1.8" "rspec"
  61. RBENV_VERSION=1.8 run rbenv-which rake
  62. assert_failure "rbenv: rake: command not found"
  63. }
  64. @test "no executable found for system version" {
  65. export PATH="$(path_without "rake")"
  66. RBENV_VERSION=system run rbenv-which rake
  67. assert_failure "rbenv: rake: command not found"
  68. }
  69. @test "executable found in other versions" {
  70. create_executable "1.8" "ruby"
  71. create_executable "1.9" "rspec"
  72. create_executable "2.0" "rspec"
  73. RBENV_VERSION=1.8 run rbenv-which rspec
  74. assert_failure
  75. assert_output <<OUT
  76. rbenv: rspec: command not found
  77. The \`rspec' command exists in these Ruby versions:
  78. 1.9
  79. 2.0
  80. OUT
  81. }
  82. @test "carries original IFS within hooks" {
  83. create_hook which hello.bash <<SH
  84. hellos=(\$(printf "hello\\tugly world\\nagain"))
  85. echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
  86. exit
  87. SH
  88. IFS=$' \t\n' RBENV_VERSION=system run rbenv-which anything
  89. assert_success
  90. assert_output "HELLO=:hello:ugly:world:again"
  91. }
  92. @test "discovers version from rbenv-version-name" {
  93. mkdir -p "$RBENV_ROOT"
  94. cat > "${RBENV_ROOT}/version" <<<"1.8"
  95. create_executable "1.8" "ruby"
  96. mkdir -p "$RBENV_TEST_DIR"
  97. cd "$RBENV_TEST_DIR"
  98. RBENV_VERSION= run rbenv-which ruby
  99. assert_success "${RBENV_ROOT}/versions/1.8/bin/ruby"
  100. }