Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

251 rader
4.6 KiB

  1. #!/usr/bin/env bats
  2. load test_helper
  3. create_version() {
  4. mkdir -p "${PYENV_ROOT}/versions/$1"
  5. }
  6. create_alias() {
  7. mkdir -p "${PYENV_ROOT}/versions"
  8. ln -s "$2" "${PYENV_ROOT}/versions/$1"
  9. }
  10. setup() {
  11. mkdir -p "$PYENV_TEST_DIR"
  12. cd "$PYENV_TEST_DIR"
  13. }
  14. stub_system_python() {
  15. local stub="${PYENV_TEST_DIR}/bin/python"
  16. mkdir -p "$(dirname "$stub")"
  17. touch "$stub" && chmod +x "$stub"
  18. }
  19. create_executable() {
  20. local name="$1"
  21. local bin="${PYENV_TEST_DIR}/bin"
  22. mkdir -p "$bin"
  23. sed -Ee '1s/^ +//' > "${bin}/$name"
  24. chmod +x "${bin}/$name"
  25. }
  26. @test "no versions installed" {
  27. stub_system_python
  28. assert [ ! -d "${PYENV_ROOT}/versions" ]
  29. run pyenv-versions
  30. assert_success "* system (set by ${PYENV_ROOT}/version)"
  31. }
  32. @test "not even system python available" {
  33. PATH="$(path_without python python2 python3)" run pyenv-versions
  34. assert_failure
  35. assert_output "Warning: no Python detected on the system"
  36. }
  37. @test "bare output no versions installed" {
  38. assert [ ! -d "${PYENV_ROOT}/versions" ]
  39. run pyenv-versions --bare
  40. assert_success ""
  41. }
  42. @test "single version installed" {
  43. stub_system_python
  44. create_version "3.3"
  45. run pyenv-versions
  46. assert_success
  47. assert_output <<OUT
  48. * system (set by ${PYENV_ROOT}/version)
  49. 3.3
  50. OUT
  51. }
  52. @test "single version bare" {
  53. create_version "3.3"
  54. run pyenv-versions --bare
  55. assert_success "3.3"
  56. }
  57. @test "multiple versions and envs" {
  58. stub_system_python
  59. create_version "2.7.6"
  60. create_version "3.4.0"
  61. create_version "3.4.0/envs/foo"
  62. create_version "3.4.0/envs/bar"
  63. create_version "3.5.2"
  64. run pyenv-versions
  65. assert_success
  66. assert_output <<OUT
  67. * system (set by ${PYENV_ROOT}/version)
  68. 2.7.6
  69. 3.4.0
  70. 3.4.0/envs/bar
  71. 3.4.0/envs/foo
  72. 3.5.2
  73. OUT
  74. }
  75. @test "skips envs with --skip-envs" {
  76. create_version "3.3.3"
  77. create_version "3.4.0"
  78. create_version "3.4.0/envs/foo"
  79. create_version "3.4.0/envs/bar"
  80. create_version "3.5.0"
  81. run pyenv-versions --skip-envs
  82. assert_success <<OUT
  83. * system (set by ${PYENV_ROOT}/version)
  84. 3.3.3
  85. 3.4.0
  86. 3.5.0
  87. OUT
  88. }
  89. @test "indicates current version" {
  90. stub_system_python
  91. create_version "3.3.3"
  92. create_version "3.4.0"
  93. PYENV_VERSION=3.3.3 run pyenv-versions
  94. assert_success
  95. assert_output <<OUT
  96. system
  97. * 3.3.3 (set by PYENV_VERSION environment variable)
  98. 3.4.0
  99. OUT
  100. }
  101. @test "bare doesn't indicate current version" {
  102. create_version "3.3.3"
  103. create_version "3.4.0"
  104. PYENV_VERSION=3.3.3 run pyenv-versions --bare
  105. assert_success
  106. assert_output <<OUT
  107. 3.3.3
  108. 3.4.0
  109. OUT
  110. }
  111. @test "globally selected version" {
  112. stub_system_python
  113. create_version "3.3.3"
  114. create_version "3.4.0"
  115. cat > "${PYENV_ROOT}/version" <<<"3.3.3"
  116. run pyenv-versions
  117. assert_success
  118. assert_output <<OUT
  119. system
  120. * 3.3.3 (set by ${PYENV_ROOT}/version)
  121. 3.4.0
  122. OUT
  123. }
  124. @test "per-project version" {
  125. stub_system_python
  126. create_version "3.3.3"
  127. create_version "3.4.0"
  128. cat > ".python-version" <<<"3.3.3"
  129. run pyenv-versions
  130. assert_success
  131. assert_output <<OUT
  132. system
  133. * 3.3.3 (set by ${PYENV_TEST_DIR}/.python-version)
  134. 3.4.0
  135. OUT
  136. }
  137. @test "ignores non-directories under versions" {
  138. create_version "3.3"
  139. touch "${PYENV_ROOT}/versions/hello"
  140. run pyenv-versions --bare
  141. assert_success "3.3"
  142. }
  143. @test "lists symlinks under versions" {
  144. create_version "2.7.8"
  145. create_alias "2.7" "2.7.8"
  146. run pyenv-versions --bare
  147. assert_success
  148. assert_output <<OUT
  149. 2.7
  150. 2.7.8
  151. OUT
  152. }
  153. @test "doesn't list symlink aliases when --skip-aliases" {
  154. create_version "1.8.7"
  155. create_alias "1.8" "1.8.7"
  156. mkdir moo
  157. create_alias "1.9" "${PWD}/moo"
  158. run pyenv-versions --bare --skip-aliases
  159. assert_success
  160. assert_output <<OUT
  161. 1.8.7
  162. 1.9
  163. OUT
  164. }
  165. @test "lists dot directories under versions" {
  166. create_version ".venv"
  167. run pyenv-versions --bare
  168. assert_success ".venv"
  169. }
  170. @test "sort supports version sorting" {
  171. create_version "1.9.0"
  172. create_version "1.53.0"
  173. create_version "1.218.0"
  174. create_executable sort <<SH
  175. #!$BASH
  176. cat >/dev/null
  177. if [ "\$1" == "--version-sort" ]; then
  178. echo "${PYENV_ROOT}/versions/1.9.0"
  179. echo "${PYENV_ROOT}/versions/1.53.0"
  180. echo "${PYENV_ROOT}/versions/1.218.0"
  181. else exit 1
  182. fi
  183. SH
  184. run pyenv-versions --bare
  185. assert_success
  186. assert_output <<OUT
  187. 1.9.0
  188. 1.53.0
  189. 1.218.0
  190. OUT
  191. }
  192. @test "sort doesn't support version sorting" {
  193. create_version "1.9.0"
  194. create_version "1.53.0"
  195. create_version "1.218.0"
  196. create_executable sort <<SH
  197. #!$BASH
  198. exit 1
  199. SH
  200. run pyenv-versions --bare
  201. assert_success
  202. assert_output <<OUT
  203. 1.218.0
  204. 1.53.0
  205. 1.9.0
  206. OUT
  207. }
  208. @test "non-bare output shows symlink contents" {
  209. create_version "1.9.0"
  210. create_alias "link" "1.9.0"
  211. run pyenv-versions
  212. assert_success
  213. assert_output <<OUT
  214. * system (set by ${PYENV_ROOT}/version)
  215. 1.9.0
  216. link --> 1.9.0
  217. OUT
  218. }