v2 / vlib / v / ast / cflags_test.v
88 lines · 82 sloc · 2.96 KB · 84e019ace22de841bc541090ca119375daecba9e
Raw
1import v.ast
2import v.cflag
3
4const module_name = 'main'
5const cdefines = []string{}
6const no_name = ''
7const no_flag = ''
8const no_os = ''
9
10fn test_parse_valid_cflags() {
11 mut t := ast.new_table()
12 expected_flags := [
13 make_flag('freebsd', '-I', '/usr/local/include/freetype2'),
14 make_flag('linux', '-l', 'glfw'),
15 make_flag('mingw', no_name, '-mwindows'),
16 make_flag('solaris', '-L', '/opt/local/lib'),
17 make_flag('darwin', '-framework', 'Cocoa'),
18 make_flag('mac', '-l', 'openal'),
19 make_flag('windows', '-l', 'gdi32'),
20 make_flag(no_os, '-l', 'mysqlclient'),
21 make_flag(no_os, no_name, '-test'),
22 make_flag('linux', '-I', '/usr/include/SDL2'),
23 make_flag('linux', '-D', '_REENTRANT'),
24 make_flag('linux', '-L', '/usr/lib/x86_64-linux-gnu'),
25 make_flag('linux', '-l', 'SDL2'),
26 make_flag(no_os, '-I', '/usr/include/mysql'),
27 make_flag(no_os, no_name, '-m64'),
28 make_flag(no_os, '-I', '/usr/include'),
29 make_flag(no_os, no_name, '/v/thirdparty/tcc/lib/libgc.a'),
30 make_flag(no_os, '-I', '/usr/include/你好 my , @с интервали'),
31 ]
32 parse_valid_flag(mut t, '-lmysqlclient')
33 parse_valid_flag(mut t, '-test')
34 parse_valid_flag(mut t, 'darwin -framework Cocoa')
35 parse_valid_flag(mut t, 'mac -lopenal')
36 parse_valid_flag(mut t, 'freebsd -I/usr/local/include/freetype2')
37 parse_valid_flag(mut t, 'linux -lglfw')
38 parse_valid_flag(mut t, 'mingw -mwindows')
39 parse_valid_flag(mut t, 'solaris -L/opt/local/lib')
40 parse_valid_flag(mut t, 'windows -lgdi32')
41 parse_valid_flag(mut t,
42 'linux -I/usr/include/SDL2 -D_REENTRANT -L/usr/lib/x86_64-linux-gnu -lSDL2')
43 parse_valid_flag(mut t, '-I/usr/include/mysql -m64 -I/usr/include')
44 parse_valid_flag(mut t, '/v/thirdparty/tcc/lib/libgc.a')
45 parse_valid_flag(mut t, '-I/usr/include/你好 my , @с интервали')
46 assert t.cflags.len == expected_flags.len
47 for f in expected_flags {
48 assert t.has_cflag(f)
49 }
50}
51
52fn test_parse_invalid_cflags() {
53 mut t := ast.new_table()
54 // -I, -L, -l must have values
55 assert_parse_invalid_flag(mut t, 'windows -l')
56 assert_parse_invalid_flag(mut t, '-I')
57 assert_parse_invalid_flag(mut t, '-L')
58 assert_parse_invalid_flag(mut t, 'darwin `sdl2-config --cflags --libs` -lSDL2')
59 // OS/compiler name only is not allowed
60 assert_parse_invalid_flag(mut t, 'darwin')
61 assert_parse_invalid_flag(mut t, 'mac')
62 assert_parse_invalid_flag(mut t, 'freebsd')
63 assert_parse_invalid_flag(mut t, 'linux')
64 assert_parse_invalid_flag(mut t, 'mingw')
65 assert_parse_invalid_flag(mut t, 'solaris')
66 assert_parse_invalid_flag(mut t, 'windows')
67 // Empty flag is not allowed
68 assert_parse_invalid_flag(mut t, no_flag)
69 assert t.cflags.len == 0
70}
71
72fn parse_valid_flag(mut t ast.Table, flag string) {
73 t.parse_cflag(flag, module_name, cdefines) or {}
74}
75
76fn assert_parse_invalid_flag(mut t ast.Table, flag string) {
77 t.parse_cflag(flag, module_name, cdefines) or { return }
78 assert false
79}
80
81fn make_flag(os string, name string, value string) cflag.CFlag {
82 return cflag.CFlag{
83 mod: module_name
84 os: os
85 name: name
86 value: value
87 }
88}
89