67 lines
1.7 KiB
Zig
67 lines
1.7 KiB
Zig
|
const std = @import("std");
|
||
|
const zls = @import("zls");
|
||
|
const builtin = @import("builtin");
|
||
|
|
||
|
const Context = @import("../context.zig").Context;
|
||
|
|
||
|
const types = zls.types;
|
||
|
const requests = zls.requests;
|
||
|
|
||
|
const allocator: std.mem.Allocator = std.testing.allocator;
|
||
|
|
||
|
test "foldingRange - empty" {
|
||
|
try testFoldingRange("", "[]");
|
||
|
}
|
||
|
|
||
|
test "foldingRange - smoke" {
|
||
|
try testFoldingRange(
|
||
|
\\fn main() u32 {
|
||
|
\\ return 1 + 1;
|
||
|
\\}
|
||
|
,
|
||
|
\\[{"startLine":0,"endLine":1}]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
test "foldingRange - #801" {
|
||
|
try testFoldingRange(
|
||
|
\\fn score(c: u8) !u32 {
|
||
|
\\ return switch(c) {
|
||
|
\\ 'a'...'z' => c - 'a',
|
||
|
\\ 'A'...'Z' => c - 'A',
|
||
|
\\ _ => error
|
||
|
\\ };
|
||
|
\\}
|
||
|
,
|
||
|
\\[]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
fn testFoldingRange(source: []const u8, expect: []const u8) !void {
|
||
|
var ctx = try Context.init();
|
||
|
defer ctx.deinit();
|
||
|
|
||
|
const test_uri: []const u8 = switch (builtin.os.tag) {
|
||
|
.windows => "file:///C:\\test.zig",
|
||
|
else => "file:///test.zig",
|
||
|
};
|
||
|
|
||
|
try ctx.requestDidOpen(test_uri, source);
|
||
|
|
||
|
const request = requests.FoldingRange{ .params = .{ .textDocument = .{ .uri = test_uri } } };
|
||
|
|
||
|
const response = try ctx.requestGetResponse(?[]types.FoldingRange, "textDocument/foldingRange", request);
|
||
|
defer response.deinit();
|
||
|
|
||
|
var actual = std.ArrayList(u8).init(allocator);
|
||
|
defer actual.deinit();
|
||
|
|
||
|
try std.json.stringify(response.result, .{}, actual.writer());
|
||
|
try expectEqualJson(expect, actual.items);
|
||
|
}
|
||
|
|
||
|
fn expectEqualJson(expect: []const u8, actual: []const u8) !void {
|
||
|
// TODO: Actually compare strings as JSON values.
|
||
|
return std.testing.expectEqualStrings(expect, actual);
|
||
|
}
|