v2 / vlib / v / gen / js / global_export_test.v
47 lines · 44 sloc · 1.56 KB · e2e5cf8db56f3562c7baa735061690be936bdf3e
Raw
1import os
2
3const js_global_export_test_vexe = @VEXE
4const js_global_export_test_vroot = @VMODROOT
5const js_global_export_test_dir = os.join_path(os.vtmp_dir(), '_js_global_export_test')
6const js_global_export_test_source = [
7 '@[has_globals]',
8 'module main',
9 '',
10 "@[export: 'TIC']",
11 '__global tic = fn (a int) int {',
12 '\treturn a + 1',
13 '}',
14 '',
15 'fn main() {',
16 '\tassert tic(2) == 3',
17 '}',
18].join_lines()
19
20fn testsuite_end() {
21 os.rmdir_all(js_global_export_test_dir) or {}
22}
23
24fn test_js_backend_supports_exported_global_aliases() {
25 os.chdir(js_global_export_test_vroot) or { panic(err) }
26 os.mkdir_all(js_global_export_test_dir) or { panic(err) }
27 source_path := os.join_path(js_global_export_test_dir, 'global_export.v')
28 js_path := os.join_path(js_global_export_test_dir, 'global_export.js')
29 os.write_file(source_path, js_global_export_test_source) or { panic(err) }
30 compile_res :=
31 os.execute('${os.quoted_path(js_global_export_test_vexe)} -b js -w -o ${os.quoted_path(js_path)} ${os.quoted_path(source_path)}')
32 if compile_res.exit_code != 0 {
33 panic(compile_res.output)
34 }
35 generated := os.read_file(js_path) or { panic(err) }
36 assert generated.contains(r'Object.defineProperty($global,"tic", {')
37 assert generated.contains('Object.defineProperty(globalThis,"TIC", {')
38 assert generated.contains(r'return $global["tic"];')
39 assert generated.contains(r'$global["tic"] = value;')
40 node_res := os.execute('node --version')
41 if node_res.exit_code == 0 {
42 run_res := os.execute('node ${os.quoted_path(js_path)}')
43 if run_res.exit_code != 0 {
44 panic(run_res.output)
45 }
46 }
47}
48