v/vlib/v/tests/vsh_envbang_test.v

37 lines
1010 B
V

import os
import rand
fn test_envbang_script_runs() ? {
env_location := '/usr/bin/env'
$if windows {
skip_test('windows does not support envbang lines')
}
if !os.exists(env_location) {
skip_test('$env_location does not exist')
}
if !os.is_executable(env_location) {
skip_test('$env_location is not executable')
}
os.find_abs_path_of_executable('v') or { skip_test('v is not in PATH') }
rndname := rand.ulid()
rnd_vsh_script_path := os.real_path(os.join_path(os.cache_dir(), '${rndname}.vsh'))
os.write_file(rnd_vsh_script_path, "#!$env_location v
import os
println('hello')
println(os.args)
")?
os.chmod(rnd_vsh_script_path, 0o700)?
res := os.execute('${os.quoted_path(rnd_vsh_script_path)} abc 123 -option')
assert res.exit_code == 0
lines := res.output.split_into_lines()
assert lines[0] == 'hello'
assert lines[1].ends_with(", 'abc', '123', '-option']")
os.rm(rnd_vsh_script_path)?
}
[noreturn]
fn skip_test(reason string) {
println('skipping test, because $reason .')
exit(0)
}