v2 / vlib / v / slow_tests / repl / import_vmodules_submodule_test.v
102 lines · 94 sloc · 3.05 KB · 27a427d17fc35ea774f2d881efee4686f2d0180d
Raw
1// vtest build: !musl? && !sanitized_job?
2module main
3
4import os
5import v.slow_tests.repl.runner
6
7@[markused]
8const turn_off_vcolors = os.setenv('VCOLORS', 'never', true)
9
10fn test_repl_can_import_installed_submodules_from_vmodules() {
11 old_vmodules := os.getenv('VMODULES')
12 temp_dir := os.join_path(os.vtmp_dir(), 'v_repl_import_vmodules_submodule_${os.getpid()}')
13 vmodules_dir := os.join_path(temp_dir, '.vmodules')
14 module_root := os.join_path(vmodules_dir, 'importerror')
15 submodule_dir := os.join_path(module_root, 'a')
16 repl_dir := os.join_path(temp_dir, 'repl')
17 defer {
18 if old_vmodules == '' {
19 os.unsetenv('VMODULES')
20 } else {
21 os.setenv('VMODULES', old_vmodules, true)
22 }
23 os.rmdir_all(temp_dir) or {}
24 }
25 os.rmdir_all(temp_dir) or {}
26 os.mkdir_all(submodule_dir) or { panic(err) }
27 os.mkdir_all(repl_dir) or { panic(err) }
28 os.write_file(os.join_path(submodule_dir, 'a.v'), 'module a
29
30pub fn testme() int {
31 return 1
32}
33') or {
34 panic(err)
35 }
36 os.setenv('VMODULES', vmodules_dir, true)
37 vexec := runner.full_path_to_v(5)
38 mut p := os.new_process(vexec)
39 p.set_args(['repl', '-replfolder', repl_dir, '-replprefix', 'import_vmodules_submodule.'])
40 p.set_work_folder(module_root)
41 p.set_redirect_stdio()
42 p.run()
43 p.stdin_write('import importerror.a\na.testme()\nexit\n')
44 p.wait()
45 output := p.stdout_slurp()
46 errors := p.stderr_slurp()
47 p.close()
48 assert p.code == 0, 'stdout: ${output}\nstderr: ${errors}'
49 assert output.trim_space() == '1', 'stdout: ${output}\nstderr: ${errors}'
50}
51
52fn test_repl_import_does_not_rebuild_c_headers_during_check_only() {
53 old_vmodules := os.getenv('VMODULES')
54 temp_dir := os.join_path(os.vtmp_dir(), 'v_repl_import_vmodules_c_header_${os.getpid()}')
55 vmodules_dir := os.join_path(temp_dir, '.vmodules')
56 module_root := os.join_path(vmodules_dir, 'importc')
57 submodule_dir := os.join_path(module_root, 'la')
58 repl_dir := os.join_path(temp_dir, 'repl')
59 defer {
60 if old_vmodules == '' {
61 os.unsetenv('VMODULES')
62 } else {
63 os.setenv('VMODULES', old_vmodules, true)
64 }
65 os.rmdir_all(temp_dir) or {}
66 }
67 os.rmdir_all(temp_dir) or {}
68 os.mkdir_all(submodule_dir) or { panic(err) }
69 os.mkdir_all(repl_dir) or { panic(err) }
70 os.write_file(os.join_path(submodule_dir, 'la.v'), 'module la
71
72pub fn ping() int {
73 return 1
74}
75') or {
76 panic(err)
77 }
78 os.write_file(os.join_path(submodule_dir, 'ffi.c.v'), 'module la
79
80#include "missing_header_17389.h"
81
82fn C.importc_test_missing_header() int
83') or {
84 panic(err)
85 }
86 os.setenv('VMODULES', vmodules_dir, true)
87 vexec := runner.full_path_to_v(5)
88 mut p := os.new_process(vexec)
89 p.set_args(['repl', '-replfolder', repl_dir, '-replprefix', 'import_vmodules_c_header.'])
90 p.set_work_folder(module_root)
91 p.set_redirect_stdio()
92 p.run()
93 p.stdin_write('import importc.la\nexit\n')
94 p.wait()
95 output := p.stdout_slurp()
96 errors := p.stderr_slurp()
97 p.close()
98 combined := output + errors
99 assert p.code == 0, 'stdout: ${output}\nstderr: ${errors}'
100 assert !combined.contains('builder error:'), 'stdout: ${output}\nstderr: ${errors}'
101 assert !combined.contains('missing_header_17389.h'), 'stdout: ${output}\nstderr: ${errors}'
102}
103