forked from pyenv/pyenv
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwhich.bats
137 lines (110 loc) · 4.06 KB
/
which.bats
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env bats
load test_helper
create_executable() {
local bin
if [[ $1 == */* ]]; then bin="$1"
else bin="${PYENV_ROOT}/versions/${1}/bin"
fi
mkdir -p "$bin"
touch "${bin}/$2"
chmod +x "${bin}/$2"
}
@test "outputs path to executable" {
create_executable "2.7" "python"
create_executable "3.4" "py.test"
PYENV_VERSION=2.7 run pyenv-which python
assert_success "${PYENV_ROOT}/versions/2.7/bin/python"
PYENV_VERSION=3.4 run pyenv-which py.test
assert_success "${PYENV_ROOT}/versions/3.4/bin/py.test"
PYENV_VERSION=3.4:2.7 run pyenv-which py.test
assert_success "${PYENV_ROOT}/versions/3.4/bin/py.test"
}
@test "searches PATH for system version" {
create_executable "${PYENV_TEST_DIR}/bin" "kill-all-humans"
create_executable "${PYENV_ROOT}/shims" "kill-all-humans"
PYENV_VERSION=system run pyenv-which kill-all-humans
assert_success "${PYENV_TEST_DIR}/bin/kill-all-humans"
}
@test "searches PATH for system version (shims prepended)" {
create_executable "${PYENV_TEST_DIR}/bin" "kill-all-humans"
create_executable "${PYENV_ROOT}/shims" "kill-all-humans"
PATH="${PYENV_ROOT}/shims:$PATH" PYENV_VERSION=system run pyenv-which kill-all-humans
assert_success "${PYENV_TEST_DIR}/bin/kill-all-humans"
}
@test "searches PATH for system version (shims appended)" {
create_executable "${PYENV_TEST_DIR}/bin" "kill-all-humans"
create_executable "${PYENV_ROOT}/shims" "kill-all-humans"
PATH="$PATH:${PYENV_ROOT}/shims" PYENV_VERSION=system run pyenv-which kill-all-humans
assert_success "${PYENV_TEST_DIR}/bin/kill-all-humans"
}
@test "searches PATH for system version (shims spread)" {
create_executable "${PYENV_TEST_DIR}/bin" "kill-all-humans"
create_executable "${PYENV_ROOT}/shims" "kill-all-humans"
PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/shims:/tmp/non-existent:$PATH:${PYENV_ROOT}/shims" \
PYENV_VERSION=system run pyenv-which kill-all-humans
assert_success "${PYENV_TEST_DIR}/bin/kill-all-humans"
}
@test "doesn't include current directory in PATH search" {
export PATH="$(path_without "kill-all-humans")"
mkdir -p "$PYENV_TEST_DIR"
cd "$PYENV_TEST_DIR"
touch kill-all-humans
chmod +x kill-all-humans
PYENV_VERSION=system run pyenv-which kill-all-humans
assert_failure "pyenv: kill-all-humans: command not found"
}
@test "version not installed" {
create_executable "3.4" "py.test"
PYENV_VERSION=3.3 run pyenv-which py.test
assert_failure "pyenv: version \`3.3' is not installed (set by PYENV_VERSION environment variable)"
}
@test "versions not installed" {
create_executable "3.4" "py.test"
PYENV_VERSION=2.7:3.3 run pyenv-which py.test
assert_failure <<OUT
pyenv: version \`2.7' is not installed (set by PYENV_VERSION environment variable)
pyenv: version \`3.3' is not installed (set by PYENV_VERSION environment variable)
OUT
}
@test "no executable found" {
create_executable "2.7" "py.test"
PYENV_VERSION=2.7 run pyenv-which fab
assert_failure "pyenv: fab: command not found"
}
@test "no executable found for system version" {
export PATH="$(path_without "py.test")"
PYENV_VERSION=system run pyenv-which py.test
assert_failure "pyenv: py.test: command not found"
}
@test "executable found in other versions" {
create_executable "2.7" "python"
create_executable "3.3" "py.test"
create_executable "3.4" "py.test"
PYENV_VERSION=2.7 run pyenv-which py.test
assert_failure
assert_output <<OUT
pyenv: py.test: command not found
The \`py.test' command exists in these Python versions:
3.3
3.4
OUT
}
@test "carries original IFS within hooks" {
create_hook which hello.bash <<SH
hellos=(\$(printf "hello\\tugly world\\nagain"))
echo HELLO="\$(printf ":%s" "\${hellos[@]}")"
exit
SH
IFS=$' \t\n' PYENV_VERSION=system run pyenv-which anything
assert_success
assert_output "HELLO=:hello:ugly:world:again"
}
@test "discovers version from pyenv-version-name" {
mkdir -p "$PYENV_ROOT"
cat > "${PYENV_ROOT}/version" <<<"3.4"
create_executable "3.4" "python"
mkdir -p "$PYENV_TEST_DIR"
cd "$PYENV_TEST_DIR"
PYENV_VERSION= run pyenv-which python
assert_success "${PYENV_ROOT}/versions/3.4/bin/python"
}