asdf

Форк
0
/
install_command.bats 
312 строк · 9.6 Кб
1
#!/usr/bin/env bats
2

3
load test_helpers
4

5
setup() {
6
  setup_asdf_dir
7
  install_dummy_legacy_plugin
8
  install_dummy_plugin
9
  install_dummy_broken_plugin
10

11
  PROJECT_DIR="$HOME/project"
12
  mkdir -p "$PROJECT_DIR"
13
}
14

15
teardown() {
16
  clean_asdf_dir
17
}
18

19
@test "install_command installs the correct version" {
20
  run asdf install dummy 1.1.0
21
  [ "$status" -eq 0 ]
22
  [ "$(cat "$ASDF_DIR/installs/dummy/1.1.0/version")" = "1.1.0" ]
23
}
24

25
@test "install_command installs the correct version for plugins without download script" {
26
  run asdf install legacy-dummy 1.1.0
27
  [ "$status" -eq 0 ]
28
  [ "$(cat "$ASDF_DIR/installs/legacy-dummy/1.1.0/version")" = "1.1.0" ]
29
}
30

31
@test "install_command without arguments installs even if the user is terrible and does not use newlines" {
32
  cd "$PROJECT_DIR"
33
  echo -n 'dummy 1.2.0' >".tool-versions"
34
  run asdf install
35
  [ "$status" -eq 0 ]
36
  [ "$(cat "$ASDF_DIR/installs/dummy/1.2.0/version")" = "1.2.0" ]
37
}
38

39
@test "install_command with only name installs the version in .tool-versions" {
40
  cd "$PROJECT_DIR"
41
  echo -n 'dummy 1.2.0' >".tool-versions"
42
  run asdf install dummy
43
  [ "$status" -eq 0 ]
44
  [ "$(cat "$ASDF_DIR/installs/dummy/1.2.0/version")" = "1.2.0" ]
45
}
46

47
@test "install_command set ASDF_CONCURRENCY" {
48
  run asdf install dummy 1.0.0
49
  [ "$status" -eq 0 ]
50
  [ -f "$ASDF_DIR/installs/dummy/1.0.0/env" ]
51
  run grep ASDF_CONCURRENCY "$ASDF_DIR/installs/dummy/1.0.0/env"
52
  [ "$status" -eq 0 ]
53
}
54

55
@test "install_command set ASDF_CONCURRENCY via env var" {
56
  ASDF_CONCURRENCY=-1 run asdf install dummy 1.0.0
57
  [ "$status" -eq 0 ]
58
  [ -f "$ASDF_DIR/installs/dummy/1.0.0/env" ]
59
  run grep ASDF_CONCURRENCY=-1 "$ASDF_DIR/installs/dummy/1.0.0/env"
60
  [ "$status" -eq 0 ]
61
}
62

63
@test "install_command set ASDF_CONCURRENCY via asdfrc" {
64
  cat >"$HOME/.asdfrc" <<-'EOM'
65
  concurrency = -2
66
EOM
67
  run asdf install dummy 1.0.0
68
  [ "$status" -eq 0 ]
69
  [ -f "$ASDF_DIR/installs/dummy/1.0.0/env" ]
70
  run grep ASDF_CONCURRENCY=-2 "$ASDF_DIR/installs/dummy/1.0.0/env"
71
  [ "$status" -eq 0 ]
72
}
73

74
@test "install_command without arguments should work in directory containing whitespace" {
75
  WHITESPACE_DIR="$PROJECT_DIR/whitespace\ dir"
76
  mkdir -p "$WHITESPACE_DIR"
77
  cd "$WHITESPACE_DIR"
78
  echo 'dummy 1.2.0' >>"$WHITESPACE_DIR/.tool-versions"
79

80
  run asdf install
81

82
  [ "$status" -eq 0 ]
83
  [ "$(cat "$ASDF_DIR/installs/dummy/1.2.0/version")" = "1.2.0" ]
84
}
85

86
@test "install_command should create a shim with asdf-plugin metadata" {
87
  run asdf install dummy 1.0.0
88
  [ "$status" -eq 0 ]
89
  [ -f "$ASDF_DIR/installs/dummy/1.0.0/env" ]
90
  run grep "asdf-plugin: dummy 1.0.0" "$ASDF_DIR/shims/dummy"
91
  [ "$status" -eq 0 ]
92
}
93

94
@test "install_command should create a shim with asdf-plugin metadata for plugins without download script" {
95
  run asdf install legacy-dummy 1.0.0
96
  [ "$status" -eq 0 ]
97
  [ -f "$ASDF_DIR/installs/legacy-dummy/1.0.0/env" ]
98
  run grep "asdf-plugin: legacy-dummy 1.0.0" "$ASDF_DIR/shims/dummy"
99
  [ "$status" -eq 0 ]
100
}
101

102
@test "install_command on two versions should create a shim with asdf-plugin metadata" {
103
  run asdf install dummy 1.1.0
104
  [ "$status" -eq 0 ]
105

106
  run grep "asdf-plugin: dummy 1.1.0" "$ASDF_DIR/shims/dummy"
107
  [ "$status" -eq 0 ]
108

109
  run grep "asdf-plugin: dummy 1.0.0" "$ASDF_DIR/shims/dummy"
110
  [ "$status" -eq 1 ]
111

112
  run asdf install dummy 1.0.0
113
  [ "$status" -eq 0 ]
114
  run grep "asdf-plugin: dummy 1.0.0" "$ASDF_DIR/shims/dummy"
115
  [ "$status" -eq 0 ]
116

117
  run grep "# asdf-plugin: dummy 1.0.0"$'\n'"# asdf-plugin: dummy 1.1.0" "$ASDF_DIR/shims/dummy"
118
  [ "$status" -eq 0 ]
119

120
  lines_count=$(grep -c "asdf-plugin: dummy 1.1.0" "$ASDF_DIR/shims/dummy")
121
  [ "$lines_count" -eq "1" ]
122
}
123

124
@test "install_command without arguments should not generate shim for subdir" {
125
  cd "$PROJECT_DIR"
126
  echo 'dummy 1.0.0' >"$PROJECT_DIR/.tool-versions"
127

128
  run asdf install
129
  [ "$status" -eq 0 ]
130
  [ -f "$ASDF_DIR/shims/dummy" ]
131
  [ ! -f "$ASDF_DIR/shims/subdir" ]
132
}
133

134
@test "install_command without arguments should generate shim that passes all arguments to executable" {
135
  # asdf lib needed to run generated shims
136
  cp -rf "$BATS_TEST_DIRNAME"/../{bin,lib} "$ASDF_DIR/"
137

138
  cd "$PROJECT_DIR"
139
  echo 'dummy 1.0.0' >"$PROJECT_DIR/.tool-versions"
140
  run asdf install
141

142
  # execute the generated shim
143
  run "$ASDF_DIR/shims/dummy" world hello
144
  [ "$status" -eq 0 ]
145
  [ "$output" = "This is Dummy 1.0.0! hello world" ]
146
}
147

148
@test "install_command fails when tool is specified but no version of the tool is configured" {
149
  run asdf install dummy
150
  [ "$status" -eq 1 ]
151
  [ "$output" = "No versions specified for dummy in config files or environment" ]
152
  [ ! -f "$ASDF_DIR/installs/dummy/1.1.0/version" ]
153
}
154

155
@test "install_command fails if the plugin is not installed" {
156
  cd "$PROJECT_DIR"
157
  echo 'other_dummy 1.0.0' >"$PROJECT_DIR/.tool-versions"
158

159
  run asdf install
160
  [ "$status" -eq 1 ]
161
  [ "$output" = "other_dummy plugin is not installed" ]
162
}
163

164
@test "install_command fails if the plugin is not installed without collisions" {
165
  cd "$PROJECT_DIR"
166
  printf "dummy 1.0.0\ndum 1.0.0" >"$PROJECT_DIR/.tool-versions"
167

168
  run asdf install
169
  [ "$status" -eq 1 ]
170
  [ "$output" = "dum plugin is not installed" ]
171
}
172

173
@test "install_command fails when tool is specified but no version of the tool is configured in config file" {
174
  echo 'dummy 1.0.0' >"$PROJECT_DIR/.tool-versions"
175
  run asdf install other-dummy
176
  [ "$status" -eq 1 ]
177
  [ "$output" = "No versions specified for other-dummy in config files or environment" ]
178
  [ ! -f "$ASDF_DIR/installs/dummy/1.0.0/version" ]
179
}
180

181
@test "install_command fails when two tools are specified with no versions" {
182
  printf 'dummy 1.0.0\nother-dummy 2.0.0' >"$PROJECT_DIR/.tool-versions"
183
  run asdf install dummy other-dummy
184
  [ "$status" -eq 1 ]
185
  [ "$output" = "Dummy couldn't install version: other-dummy (on purpose)" ]
186
  [ ! -f "$ASDF_DIR/installs/dummy/1.0.0/version" ]
187
  [ ! -f "$ASDF_DIR/installs/other-dummy/2.0.0/version" ]
188
}
189

190
@test "install_command without arguments uses a parent directory .tool-versions file if present" {
191
  # asdf lib needed to run generated shims
192
  cp -rf "$BATS_TEST_DIRNAME"/../{bin,lib} "$ASDF_DIR/"
193

194
  echo 'dummy 1.0.0' >"$PROJECT_DIR/.tool-versions"
195
  mkdir -p "$PROJECT_DIR/child"
196

197
  cd "$PROJECT_DIR/child"
198

199
  run asdf install
200

201
  # execute the generated shim
202
  [ "$("$ASDF_DIR/shims/dummy" world hello)" = "This is Dummy 1.0.0! hello world" ]
203
  [ "$status" -eq 0 ]
204
}
205

206
@test "install_command installs multiple tool versions when they are specified in a .tool-versions file" {
207
  echo 'dummy 1.0.0 1.2.0' >"$PROJECT_DIR/.tool-versions"
208
  cd "$PROJECT_DIR"
209

210
  run asdf install
211
  [ "$status" -eq 0 ]
212

213
  [ "$(cat "$ASDF_DIR/installs/dummy/1.0.0/version")" = "1.0.0" ]
214
  [ "$(cat "$ASDF_DIR/installs/dummy/1.2.0/version")" = "1.2.0" ]
215
}
216

217
@test "install_command doesn't install system version" {
218
  run asdf install dummy system
219
  [ "$status" -eq 0 ]
220
  [ ! -f "$ASDF_DIR/installs/dummy/system/version" ]
221
}
222

223
@test "install command executes configured pre plugin install hook" {
224
  cat >"$HOME/.asdfrc" <<-'EOM'
225
pre_asdf_install_dummy = echo will install dummy $1
226
EOM
227

228
  run asdf install dummy 1.0.0
229
  [ "$output" = "will install dummy 1.0.0" ]
230
}
231

232
@test "install command executes configured post plugin install hook" {
233
  cat >"$HOME/.asdfrc" <<-'EOM'
234
post_asdf_install_dummy = echo HEY $version FROM $plugin_name
235
EOM
236

237
  run asdf install dummy 1.0.0
238
  [ "$output" = "HEY 1.0.0 FROM dummy" ]
239
}
240

241
@test "install command without arguments installs versions from legacy files" {
242
  echo 'legacy_version_file = yes' >"$HOME/.asdfrc"
243
  echo '1.2.0' >>"$PROJECT_DIR/.dummy-version"
244
  cd "$PROJECT_DIR"
245

246
  run asdf install
247
  [ "$status" -eq 0 ]
248
  [ -f "$ASDF_DIR/installs/dummy/1.2.0/version" ]
249
}
250

251
@test "install command without arguments installs versions from legacy files in parent directories" {
252
  echo 'legacy_version_file = yes' >"$HOME/.asdfrc"
253
  echo '1.2.0' >>"$PROJECT_DIR/.dummy-version"
254

255
  mkdir -p "$PROJECT_DIR/child"
256
  cd "$PROJECT_DIR/child"
257

258
  run asdf install
259
  [ "$status" -eq 0 ]
260
  [ -f "$ASDF_DIR/installs/dummy/1.2.0/version" ]
261
}
262

263
@test "install_command latest installs latest stable version" {
264
  run asdf install dummy latest
265
  [ "$status" -eq 0 ]
266
  [ "$(cat "$ASDF_DIR/installs/dummy/2.0.0/version")" = "2.0.0" ]
267
}
268

269
@test "install_command latest:version installs latest stable version that matches the given string" {
270
  run asdf install dummy latest:1
271
  [ "$status" -eq 0 ]
272
  [ "$(cat "$ASDF_DIR/installs/dummy/1.1.0/version")" = "1.1.0" ]
273
}
274

275
@test "install_command deletes the download directory" {
276
  run asdf install dummy 1.1.0
277
  [ "$status" -eq 0 ]
278
  [ ! -d "$ASDF_DIR/downloads/dummy/1.1.0" ]
279
  [ "$(cat "$ASDF_DIR/installs/dummy/1.1.0/version")" = "1.1.0" ]
280
}
281

282
@test "install_command keeps the download directory when --keep-download flag is provided" {
283
  run asdf install dummy 1.1.0 --keep-download
284
  [ "$status" -eq 0 ]
285
  [ -d "$ASDF_DIR/downloads/dummy/1.1.0" ]
286
  [ "$(cat "$ASDF_DIR/installs/dummy/1.1.0/version")" = "1.1.0" ]
287
}
288

289
@test "install_command keeps the download directory when always_keep_download setting is true" {
290
  echo 'always_keep_download = yes' >"$HOME/.asdfrc"
291
  run asdf install dummy 1.1.0
292
  [ "$status" -eq 0 ]
293
  [ -d "$ASDF_DIR/downloads/dummy/1.1.0" ]
294
  [ "$(cat "$ASDF_DIR/installs/dummy/1.1.0/version")" = "1.1.0" ]
295
}
296

297
@test "install_command fails when download script exits with non-zero code" {
298
  run asdf install dummy-broken 1.0.0
299
  [ "$status" -eq 1 ]
300
  [ ! -d "$ASDF_DIR/downloads/dummy-broken/1.1.0" ]
301
  [ ! -d "$ASDF_DIR/installs/dummy-broken/1.1.0" ]
302
  [ "$output" = "Download failed!" ]
303
}
304

305
@test "install_command prints info message if plugin does not support preserving download data if configured" {
306
  install_dummy_plugin_no_download
307

308
  run asdf install dummy-no-download 1.0.0
309
  [ "$status" -eq 0 ]
310

311
  [[ "$output" == *'asdf: Warn:'*'not be preserved'* ]]
312
}
313

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.