v2 / vlib / v / vcache / vcache_test.v
107 lines · 94 sloc · 2.67 KB · 2a66c6aa63251e941ccd415a511821c15fae6bb1
Raw
1import os
2import v.vcache
3
4const vcache_folder = os.join_path(os.vtmp_dir(), 'cache_folder')
5
6fn check_cache_entry_fpath_invariants(x string, extension string) {
7 a := x.replace(vcache_folder + os.path_separator, '').split(os.path_separator)
8 assert a.len > 0
9 assert a[0].len == 2
10 assert a[1].len > 32
11 assert os.file_ext(a[1]) == extension
12 assert a[1][0..2] == a[0]
13}
14
15fn testsuite_begin() {
16 os.setenv('VCACHE', vcache_folder, true)
17 // eprintln('testsuite_begin, vcache_folder = ${vcache_folder}')
18 os.rmdir_all(vcache_folder) or {}
19 vcache.new_cache_manager([])
20 assert os.is_dir(vcache_folder)
21}
22
23fn test_save_and_load() {
24 mut cm := vcache.new_cache_manager([])
25 x := cm.save('.txt', 'first/cache/entry', 'hello') or {
26 assert false
27 ''
28 }
29 check_cache_entry_fpath_invariants(x, '.txt')
30}
31
32fn test_different_options_should_produce_different_cache_entries_for_same_key_and_content() {
33 mut cm1 := vcache.new_cache_manager([])
34 mut cm2 := vcache.new_cache_manager(['-cc tcc'])
35 mut cm3 := vcache.new_cache_manager(['-cc gcc'])
36 x := cm1.save('.txt', 'first/cache/entry', 'hello') or {
37 assert false
38 ''
39 }
40 y := cm2.save('.txt', 'first/cache/entry', 'hello') or {
41 assert false
42 ''
43 }
44 z := cm3.save('.txt', 'first/cache/entry', 'hello') or {
45 assert false
46 ''
47 }
48 check_cache_entry_fpath_invariants(x, '.txt')
49 check_cache_entry_fpath_invariants(y, '.txt')
50 check_cache_entry_fpath_invariants(z, '.txt')
51}
52
53fn test_exists() {
54 mut cm := vcache.new_cache_manager([])
55 cm.exists('.o', 'abc') or { assert true }
56
57 x := cm.save('.x', 'abc', '') or {
58 assert false
59 ''
60 }
61 cm.exists('.o', 'abc') or { assert true }
62
63 y := cm.save('.o', 'zbc', '') or {
64 assert false
65 ''
66 }
67 cm.exists('.o', 'abc') or { assert true }
68
69 z := cm.save('.o', 'abc', '') or {
70 assert false
71 ''
72 }
73 cm.exists('.o', 'abc') or { assert false }
74
75 assert os.is_file(x)
76 assert os.is_file(y)
77 assert os.is_file(z)
78 assert x != y
79 assert x != z
80 assert y != z
81}
82
83fn test_temporary_options_reset_cached_key_paths() {
84 mut cm := vcache.new_cache_manager(['-os freebsd'])
85 path_before := cm.mod_postfix_with_key2cpath('builtin', '.o', '/tmp/gc.o')
86 cm.set_temporary_options(['-target x86_64-unknown-freebsd14.0'])
87 path_after := cm.mod_postfix_with_key2cpath('builtin', '.o', '/tmp/gc.o')
88 assert path_before != path_after
89}
90
91fn test_readme_exists_and_is_readable() {
92 vcache.new_cache_manager([])
93 freadme := os.join_path(vcache_folder, 'README.md')
94 assert os.is_file(freadme)
95 x := os.read_file(freadme) or {
96 assert false
97 ''
98 }
99 assert x.len > 0
100 assert x.starts_with('This folder contains cached build artifacts')
101}
102
103fn testsuite_end() {
104 os.chdir(os.wd_at_startup) or {}
105 os.rmdir_all(vcache_folder) or {}
106 assert !os.is_dir(vcache_folder)
107}
108