v / cmd / tools / vwatch_test.v
49 lines · 42 sloc · 1.29 KB · 4118ee464d0c8849b18e6108f77f2871b29430e4
Raw
1import os
2import time
3
4const vexe = @VEXE
5const vroot = os.dir(vexe)
6const tdir = os.join_path(os.vtmp_dir(), 'vwatch_test_24571')
7const tsource_dir = os.join_path(tdir, 'src')
8const toutput_dir = os.join_path(tdir, 'out')
9
10fn testsuite_begin() {
11 os.rmdir_all(tdir) or {}
12 os.mkdir_all(tsource_dir)!
13 os.mkdir_all(toutput_dir)!
14}
15
16fn testsuite_end() {
17 os.rmdir_all(tdir) or {}
18}
19
20fn test_watch_keeps_backend_flag_intact() {
21 source_path := os.join_path(tsource_dir, 'hello.v')
22 output_path := os.join_path(toutput_dir, 'hello.js')
23 os.write_file(source_path, "fn main() {\n\tprintln('Hello world')\n}\n")!
24
25 mut process := os.new_process(vexe)
26 process.set_work_folder(vroot)
27 process.set_redirect_stdio()
28 process.use_pgroup = true
29 process.set_args(['watch', '-backend', 'js_browser', '-output', output_path, source_path])
30 process.run()
31
32 for _ in 0 .. 300 {
33 if os.exists(output_path) || !process.is_alive() {
34 break
35 }
36 time.sleep(100 * time.millisecond)
37 }
38 if process.is_alive() {
39 process.signal_pgkill()
40 }
41 process.wait()
42 output := process.stdout_slurp() + process.stderr_slurp()
43 process.close()
44
45 assert os.exists(output_path), output
46 assert output.contains(' -backend js_browser '), output
47 assert !output.contains('-baend'), output
48 assert !output.contains('Unknown argument `-baend`'), output
49}
50