From 9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 17 Jan 2026 15:41:48 +0900 Subject: add tests for tokenize() --- src/jq/tokenize.zig | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src/jq') diff --git a/src/jq/tokenize.zig b/src/jq/tokenize.zig index c4201b5..39cae29 100644 --- a/src/jq/tokenize.zig +++ b/src/jq/tokenize.zig @@ -54,3 +54,66 @@ pub fn tokenize(allocator: std.mem.Allocator, reader: *std.Io.Reader) ![]Token { try tokens.append(allocator, .end); return tokens.toOwnedSlice(allocator); } + +test "tokenize symbols" { + var allocator = std.heap.ArenaAllocator.init(std.testing.allocator); + defer allocator.deinit(); + + var reader = std.Io.Reader.fixed( + \\.[] + ); + const tokens = try tokenize(allocator.allocator(), &reader); + + try std.testing.expectEqual(4, tokens.len); + try std.testing.expectEqual(.dot, tokens[0]); + try std.testing.expectEqual(.bracket_left, tokens[1]); + try std.testing.expectEqual(.bracket_right, tokens[2]); + try std.testing.expectEqual(.end, tokens[3]); +} + +test "tokenize number" { + var allocator = std.heap.ArenaAllocator.init(std.testing.allocator); + defer allocator.deinit(); + + var reader = std.Io.Reader.fixed("5"); + const tokens = try tokenize(allocator.allocator(), &reader); + + try std.testing.expectEqual(2, tokens.len); + try std.testing.expectEqual(Token{ .number = 5 }, tokens[0]); + try std.testing.expectEqual(.end, tokens[1]); +} + +test "tokenize array index" { + var allocator = std.heap.ArenaAllocator.init(std.testing.allocator); + defer allocator.deinit(); + + var reader = std.Io.Reader.fixed(".[0]"); + const tokens = try tokenize(allocator.allocator(), &reader); + + try std.testing.expectEqual(5, tokens.len); + try std.testing.expectEqual(.dot, tokens[0]); + try std.testing.expectEqual(.bracket_left, tokens[1]); + try std.testing.expectEqual(Token{ .number = 0 }, tokens[2]); + try std.testing.expectEqual(.bracket_right, tokens[3]); + try std.testing.expectEqual(.end, tokens[4]); +} + +test "tokenize empty input returns error" { + var allocator = std.heap.ArenaAllocator.init(std.testing.allocator); + defer allocator.deinit(); + + var reader = std.Io.Reader.fixed(""); + const result = tokenize(allocator.allocator(), &reader); + + try std.testing.expectError(error.UnexpectedEnd, result); +} + +test "tokenize invalid character returns error" { + var allocator = std.heap.ArenaAllocator.init(std.testing.allocator); + defer allocator.deinit(); + + var reader = std.Io.Reader.fixed("`"); + const result = tokenize(allocator.allocator(), &reader); + + try std.testing.expectError(error.InvalidCharacter, result); +} -- cgit v1.3-1-g0d28