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()); }