| 1 | import v.ast |
| 2 | import v.cflag |
| 3 | |
| 4 | const module_name = 'main' |
| 5 | const cdefines = []string{} |
| 6 | const no_name = '' |
| 7 | const no_flag = '' |
| 8 | const no_os = '' |
| 9 | |
| 10 | fn 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 | |
| 52 | fn 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 | |
| 72 | fn parse_valid_flag(mut t ast.Table, flag string) { |
| 73 | t.parse_cflag(flag, module_name, cdefines) or {} |
| 74 | } |
| 75 | |
| 76 | fn 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 | |
| 81 | fn 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 | |