aboutsummaryrefslogtreecommitdiff
path: root/src/z/parser/js/root.zig
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2026-07-30 09:36:34 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2026-07-30 09:36:34 +0200
commitaca38f5c96709f56db75a476051eb644de644d3d (patch)
tree1ce90ccffb80cff8d527be6efbd073031fccd3a1 /src/z/parser/js/root.zig
parent006674d7e08146a9bd980e2138ce9444d2e40e6f (diff)
restructure project
Diffstat (limited to 'src/z/parser/js/root.zig')
-rw-r--r--src/z/parser/js/root.zig85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/z/parser/js/root.zig b/src/z/parser/js/root.zig
new file mode 100644
index 0000000..565d572
--- /dev/null
+++ b/src/z/parser/js/root.zig
@@ -0,0 +1,85 @@
+const std = @import("std");
+
+pub const lexical_grammar = @import("lexical_grammar.zig");
+pub const ast = @import("ast.zig");
+
+test "simple literal" {
+ comptime {
+ _ = try ast.Program.parse("42;");
+ }
+}
+
+test "variable declaration" {
+ comptime {
+ _ = try ast.Program.parse("var x = 1;");
+ }
+}
+
+test "function declaration" {
+ comptime {
+ _ = try ast.Program.parse("function foo() { return 1; }");
+ }
+}
+
+test "if statement" {
+ comptime {
+ _ = try ast.Program.parse("if (x > 0) { x = 1; } else { x = 2; }");
+ }
+}
+
+test "binary expression" {
+ comptime {
+ _ = try ast.Program.parse("a + b * c;");
+ }
+}
+
+test "arrow function" {
+ comptime {
+ _ = try ast.Program.parse("const f = (x) => x + 1;");
+ }
+}
+
+test "class declaration" {
+ comptime {
+ _ = try ast.Program.parse("class Foo { constructor() { } }");
+ }
+}
+
+test "for loop" {
+ comptime {
+ _ = try ast.Program.parse("for (var i = 0; i < 10; i++) { break; }");
+ }
+}
+
+test "try catch" {
+ comptime {
+ _ = try ast.Program.parse("try { x; } catch (e) { y; }");
+ }
+}
+
+test "multiple statements" {
+ comptime {
+ _ = try ast.Program.parse("var a = 1; var b = 2; var c = a + b;");
+ }
+}
+
+test "comprehensive fixture" {
+ comptime {
+ _ = try ast.Program.parse(@embedFile("test_fixture.js"));
+ }
+}
+
+test "format fixture" {
+ comptime {
+ var buf: [65536]u8 = undefined;
+ const ast1 = try ast.Program.parse(@embedFile("test_fixture.js"));
+ var f = ast.Formatter{ .buf = buf[0..], .pos = 0, .indent_level = 0, .options = .{} };
+ ast1.fmt(&f);
+ const formatted = buf[0..f.pos];
+ try std.testing.expect(formatted.len > 0);
+ }
+}
+
+test {
+ _ = std.testing.refAllDecls(@This());
+}