add tests for semantic tokens
This commit is contained in:
parent
f6082e837d
commit
f0b71f3861
55
tests/lsp_features/semantic_tokens.zig
Normal file
55
tests/lsp_features/semantic_tokens.zig
Normal file
@ -0,0 +1,55 @@
|
||||
const std = @import("std");
|
||||
const zls = @import("zls");
|
||||
|
||||
const Context = @import("context").Context;
|
||||
|
||||
const requests = zls.requests;
|
||||
|
||||
const allocator: std.mem.Allocator = std.testing.allocator;
|
||||
|
||||
test "semantic tokens - empty" {
|
||||
try testSemanticTokens("", &.{});
|
||||
}
|
||||
|
||||
test "semantic tokens" {
|
||||
try testSemanticTokens(
|
||||
\\const std = @import("std");
|
||||
,
|
||||
&.{ 0, 0, 5, 7, 0, 0, 6, 3, 0, 33, 0, 4, 1, 11, 0, 0, 2, 7, 12, 0, 0, 8, 5, 9, 0 },
|
||||
);
|
||||
// TODO more tests
|
||||
}
|
||||
|
||||
fn testSemanticTokens(source: []const u8, expected: []const u32) !void {
|
||||
var ctx = try Context.init();
|
||||
defer ctx.deinit();
|
||||
|
||||
ctx.server.config.enable_semantic_tokens = true;
|
||||
|
||||
const open_document = requests.OpenDocument{
|
||||
.params = .{
|
||||
.textDocument = .{
|
||||
.uri = "file:///test.zig",
|
||||
// .languageId = "zig",
|
||||
// .version = 420,
|
||||
.text = source,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const did_open_method = try std.json.stringifyAlloc(allocator, open_document.params, .{});
|
||||
defer allocator.free(did_open_method);
|
||||
|
||||
try ctx.request("textDocument/didOpen", did_open_method, null);
|
||||
|
||||
const Response = struct {
|
||||
data: []const u32,
|
||||
};
|
||||
|
||||
const expected_bytes = try std.json.stringifyAlloc(allocator, Response{ .data = expected }, .{});
|
||||
defer allocator.free(expected_bytes);
|
||||
|
||||
try ctx.request("textDocument/semanticTokens/full",
|
||||
\\{"textDocument":{"uri":"file:///test.zig"}}
|
||||
, expected_bytes);
|
||||
}
|
@ -3,21 +3,6 @@ const Context = @import("context.zig").Context;
|
||||
|
||||
const allocator = std.testing.allocator;
|
||||
|
||||
test "Open file, ask for semantic tokens" {
|
||||
var ctx = try Context.init();
|
||||
defer ctx.deinit();
|
||||
|
||||
try ctx.request("textDocument/didOpen",
|
||||
\\{"textDocument":{"uri":"file:///test.zig","languageId":"zig","version":420,"text":"const std = @import(\"std\");"}}
|
||||
, null);
|
||||
|
||||
try ctx.request("textDocument/semanticTokens/full",
|
||||
\\{"textDocument":{"uri":"file:///test.zig"}}
|
||||
,
|
||||
\\{"data":[0,0,5,7,0,0,6,3,0,33,0,4,1,11,0,0,2,7,12,0,0,8,5,9,0]}
|
||||
);
|
||||
}
|
||||
|
||||
test "Request completion in an empty file" {
|
||||
var ctx = try Context.init();
|
||||
defer ctx.deinit();
|
||||
|
@ -5,7 +5,8 @@ test {
|
||||
|
||||
// TODO Document Synchronization
|
||||
|
||||
// TODO LSP features
|
||||
// LSP features
|
||||
_ = @import("lsp_features/semantic_tokens.zig");
|
||||
|
||||
// TODO Language features
|
||||
}
|
Loading…
Reference in New Issue
Block a user