v2 / vlib / v / parser / enum_comptime_test.v
46 lines · 40 sloc · 1.1 KB · 03e6e16b3ee33d727d456513a619dda5ff1b0949
Raw
1module parser
2
3import v.ast
4import v.pref
5
6const enum_comptime_test_source = r'module main
7
8enum EN {
9 en_x = 1
10 $if compile_time_option ? {
11 en_y = 2147483647
12 } $else {
13 en_z = 2
14 }
15}
16'
17
18fn parse_enum_comptime_test_file(args []string) ast.EnumDecl {
19 mut table := ast.new_table()
20 prefs, _ := pref.parse_args_and_show_errors([], args, false)
21 file := parse_text(enum_comptime_test_source, @FILE, mut table, .skip_comments, prefs)
22 assert file.errors.len == 0
23 for stmt in file.stmts {
24 if stmt is ast.EnumDecl {
25 return stmt
26 }
27 }
28 assert false
29 return ast.EnumDecl{}
30}
31
32fn test_enum_comptime_fields_with_define() {
33 enum_decl := parse_enum_comptime_test_file(['-d', 'compile_time_option', @FILE])
34 assert enum_decl.fields.len == 2
35 assert enum_decl.fields[0].name == 'en_x'
36 assert enum_decl.fields[1].name == 'en_y'
37 assert enum_decl.fields[1].has_expr
38}
39
40fn test_enum_comptime_fields_without_define() {
41 enum_decl := parse_enum_comptime_test_file([@FILE])
42 assert enum_decl.fields.len == 2
43 assert enum_decl.fields[0].name == 'en_x'
44 assert enum_decl.fields[1].name == 'en_z'
45 assert enum_decl.fields[1].has_expr
46}
47