| 1 | module parser |
| 2 | |
| 3 | import v.ast |
| 4 | import v.pref |
| 5 | |
| 6 | const enum_comptime_test_source = r'module main |
| 7 | |
| 8 | enum EN { |
| 9 | en_x = 1 |
| 10 | $if compile_time_option ? { |
| 11 | en_y = 2147483647 |
| 12 | } $else { |
| 13 | en_z = 2 |
| 14 | } |
| 15 | } |
| 16 | ' |
| 17 | |
| 18 | fn 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 | |
| 32 | fn 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 | |
| 40 | fn 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 | |