aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-17 15:41:48 +0900
committernsfisis <nsfisis@gmail.com>2026-01-17 15:41:48 +0900
commit9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452 (patch)
treefaec0cfee6402113b3935194abf0d074c4c81c02
parenta7f626b9a6b8110c70fdfaf5b66db73c025b6de1 (diff)
downloadzgjq-9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452.tar.gz
zgjq-9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452.tar.zst
zgjq-9d6fa7e3fff4569cd7ef851b087fd99b1c2d2452.zip
add tests for tokenize()
-rw-r--r--src/jq/tokenize.zig63
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);
+}