| 1 | module builder |
| 2 | |
| 3 | import os |
| 4 | import v.ast |
| 5 | import v.pref |
| 6 | |
| 7 | fn 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 |
| 20 | if [ "\$1" = "download" ] && [ "\$2" = "-o" ]; then |
| 21 | mkdir -p "\$(dirname "\$3")" |
| 22 | : > "\$3" |
| 23 | exit 0 |
| 24 | fi |
| 25 | exit 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 | |