blob: 6d41c7bc5eaa536ed362558946a69e5db3cde8af (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
const std = @import("std");
pub const lexical_grammar = @import("lexical_grammar.zig");
pub const ast = @import("ast.zig");
pub const syntactic_grammar = @import("syntactic_grammar.zig");
pub const Result = @import("result.zig").Result;
pub const Parser = @import("parser.zig").Parser;
test "simple literal" {
const source = "42;";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
try std.testing.expect(result.body[0].data == .expr);
}
test "variable declaration" {
const source = "var x = 1;";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
try std.testing.expect(result.body[0].data == .variable);
}
test "function declaration" {
const source = "function foo() { return 1; }";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
try std.testing.expect(result.body[0].data == .function);
}
test "if statement" {
const source = "if (x > 0) { x = 1; } else { x = 2; }";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
try std.testing.expect(result.body[0].data == .@"if");
}
test "binary expression" {
const source = "a + b * c;";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "arrow function" {
const source = "const f = (x) => x + 1;";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "object literal" {
const source = "var obj = { a: 1, b: 2 };";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "class declaration" {
const source = "class Foo { constructor() { } }";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "for loop" {
const source = "for (var i = 0; i < 10; i++) { break; }";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "try catch" {
const source = "try { x; } catch (e) { y; }";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "multiple statements" {
const source = "var a = 1; var b = 2; var c = a + b;";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 3);
}
test "array literal with spread" {
const source = "var arr = [1, ...rest, 3];";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test "template literal" {
const source = "const s = `hello ${name} world`;";
const result = try syntactic_grammar.parse(source);
try std.testing.expect(result.body.len == 1);
}
test {
_ = std.testing.refAllDecls(@This());
}
|