v2 / vlib / v / builder / coroutines_runtime_test.v
53 lines · 51 sloc · 1.33 KB · f36bff188d9722a965ac7483d89030096541dff8
Raw
1module builder
2
3import os
4import v.ast
5import v.pref
6
7fn test_ensure_imported_coroutines_runtime_downloads_photonwrapper() {
8 $if !macos && !linux {
9 // coroutines are only supported on macOS & Linux — see pref.ensure_coroutines_runtime
10 return
11 }
12 test_root := os.join_path(os.vtmp_dir(), 'v_builder_coroutines_runtime')
13 os.rmdir_all(test_root) or {}
14 defer {
15 os.rmdir_all(test_root) or {}
16 }
17 fake_vexe := os.join_path(test_root, 'v')
18 os.mkdir_all(test_root) or { panic(err) }
19 os.write_file(fake_vexe, '#!/bin/sh
20if [ "\$1" = "download" ] && [ "\$2" = "-o" ]; then
21 mkdir -p "\$(dirname "\$3")"
22 : > "\$3"
23 exit 0
24fi
25exit 1
26') or {
27 panic(err)
28 }
29 os.chmod(fake_vexe, 0o700) or { panic(err) }
30 old_vexe := os.getenv('VEXE')
31 old_dyld_paths := os.getenv('DYLD_FALLBACK_LIBRARY_PATH')
32 defer {
33 if old_vexe == '' {
34 os.unsetenv('VEXE')
35 } else {
36 os.setenv('VEXE', old_vexe, true)
37 }
38 if old_dyld_paths == '' {
39 os.unsetenv('DYLD_FALLBACK_LIBRARY_PATH')
40 } else {
41 os.setenv('DYLD_FALLBACK_LIBRARY_PATH', old_dyld_paths, true)
42 }
43 }
44 os.setenv('VEXE', fake_vexe, true)
45 mut table := ast.new_table()
46 table.imports << 'coroutines'
47 mut b := Builder{
48 pref: &pref.Preferences{}
49 table: table
50 }
51 b.ensure_imported_coroutines_runtime() or { panic(err) }
52 assert os.exists(os.join_path(test_root, 'thirdparty', 'photon', 'photonwrapper.so'))
53}
54