From aca38f5c96709f56db75a476051eb644de644d3d Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 30 Jul 2026 09:36:34 +0200 Subject: restructure project --- src/z/parser/js/root.zig | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/z/parser/js/root.zig (limited to 'src/z/parser/js/root.zig') 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()); +} -- cgit v1.2.3-70-g09d2