diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-17 15:41:48 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-17 15:41:48 +0900 |
| commit | 9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452 (patch) | |
| tree | faec0cfee6402113b3935194abf0d074c4c81c02 /src/jq | |
| parent | a7f626b9a6b8110c70fdfaf5b66db73c025b6de1 (diff) | |
| download | zgjq-9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452.tar.gz zgjq-9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452.tar.zst zgjq-9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452.zip | |
add tests for tokenize()
Diffstat (limited to 'src/jq')
| -rw-r--r-- | src/jq/tokenize.zig | 63 |
1 files changed, 63 insertions, 0 deletions
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); +} |
