Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
davidanthoff committed Jun 28, 2024
1 parent 569e8a2 commit cbf3d87
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 27 deletions.
11 changes: 6 additions & 5 deletions src/requests/textdocument.jl
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,9 @@ function textDocument_didClose_notification(params::DidCloseTextDocumentParams,
delete!(server._open_file_versions, uri)

# If the file doesn't exist on disc, we remove it from the workspace
if !isfile(uri2filepath(uri))
JuliaWorkspaces.delete_file!(server.workspace, uri)
file_path = uri2filepath(uri)
if file_path===nothing || !isfile(file_path)
JuliaWorkspaces.remove_file!(server.workspace, uri)
end
end

Expand Down Expand Up @@ -118,14 +119,14 @@ function textDocument_didChange_notification(params::DidChangeTextDocumentParams
error("This should not happen")

Check warning on line 119 in src/requests/textdocument.jl

View check run for this annotation

Codecov / codecov/patch

src/requests/textdocument.jl#L119

Added line #L119 was not covered by tests
end

if server._open_file_versions[uri]>=params.textDocument.version
error("Outdated version")
if server._open_file_versions[uri]>params.textDocument.version
error("Outdated version: server $(server._open_file_versions[uri]) params $(params.textDocument.version)")

Check warning on line 123 in src/requests/textdocument.jl

View check run for this annotation

Codecov / codecov/patch

src/requests/textdocument.jl#L123

Added line #L123 was not covered by tests
end

JuliaWorkspaces.update_text_file!(
server.workspace,
params.textDocument.uri,
[JuliaWorkspaces.TextChange(_convert_lsrange_to_jlrange(get_text_document(doc), i.range), i.text) for i in params.contentChanges],
[JuliaWorkspaces.TextChange(i.range === missing ? nothing : _convert_lsrange_to_jlrange(get_text_document(doc), i.range), i.text) for i in params.contentChanges],
get_language_id(doc))

if get_language_id(doc) in ("markdown", "juliamarkdown")
Expand Down
2 changes: 1 addition & 1 deletion src/requests/workspace.jl
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ function gc_files_from_workspace(server::LanguageServerInstance)
continue

Check warning on line 162 in src/requests/workspace.jl

View check run for this annotation

Codecov / codecov/patch

src/requests/workspace.jl#L161-L162

Added lines #L161 - L162 were not covered by tests
end

JuliaWorkspaces.delete_file!(server.workspace, file.uri)
JuliaWorkspaces.remove_file!(server.workspace, file.uri)
end

Check warning on line 166 in src/requests/workspace.jl

View check run for this annotation

Codecov / codecov/patch

src/requests/workspace.jl#L165-L166

Added lines #L165 - L166 were not covered by tests
end

Expand Down
8 changes: 8 additions & 0 deletions test/requests/test_actions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,22 @@ end
settestdoc("f(x) = x")
@test any(c.command == "ExpandFunction" for c in action_request_test(0, 5))
c = filter(c -> c.command == "ExpandFunction", action_request_test(0, 5))[1]
closetestdoc()

settestdoc("g(x) = x\nf(x) = x")
@test any(c.command == "ExpandFunction" for c in action_request_test(0, 0))
@test any(c.command == "ExpandFunction" for c in action_request_test(1, 0))

LanguageServer.workspace_executeCommand_request(LanguageServer.ExecuteCommandParams(missing, c.command, c.arguments), server, server.jr_endpoint)
closetestdoc()

settestdoc("f(x) = begin x end")
@test any(c.command == "ExpandFunction" for c in action_request_test(0, 5))
c = filter(c -> c.command == "ExpandFunction", action_request_test(0, 5))[1]


LanguageServer.workspace_executeCommand_request(LanguageServer.ExecuteCommandParams(missing, c.command, c.arguments), server, server.jr_endpoint)
closetestdoc()
end

@testitem "fixmissingref" begin
Expand Down Expand Up @@ -81,6 +85,7 @@ end
@test any(c.command == "CompareNothingWithTripleEqual" for c in action_request_test(1, 6))
c = filter(c -> c.command == "CompareNothingWithTripleEqual", action_request_test(1, 6))[1]
LanguageServer.workspace_executeCommand_request(LanguageServer.ExecuteCommandParams(missing, c.command, c.arguments), server, server.jr_endpoint)
closetestdoc()
end
end

Expand Down Expand Up @@ -108,10 +113,12 @@ end

c = filter(c -> c.command == "OrganizeImports", action_request_test(0, 1))[1]
LanguageServer.workspace_executeCommand_request(LanguageServer.ExecuteCommandParams(missing, c.command, c.arguments), server, server.jr_endpoint)
closetestdoc()

settestdoc("using .LocalModule: foo\n")
c = filter(c -> c.command == "OrganizeImports", action_request_test(0, 1))[1]
LanguageServer.workspace_executeCommand_request(LanguageServer.ExecuteCommandParams(missing, c.command, c.arguments), server, server.jr_endpoint)
closetestdoc()
end

@testitem "Convert between string and raw strings" begin
Expand Down Expand Up @@ -148,6 +155,7 @@ end
str = "he\$\"llo"
raw_str = "he\$\\\"llo" # Will be `he$\"llo` when unescaped/printed
@test sprint(LanguageServer.escape_raw_string, str) == raw_str
closetestdoc()

# raw"..." -> "..."
doc = settestdoc("""
Expand Down
23 changes: 23 additions & 0 deletions test/requests/test_completions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -40,38 +40,47 @@ end

settestdoc("import Base: r")
@test any(item.label == "rand" for item in completion_test(0, 14).items)
closetestdoc()

settestdoc("import ")
@test (r = all(item.label in ("Main", "Base", "Core") for item in completion_test(0, 7).items)) && !isempty(r)
closetestdoc()

settestdoc("""module M end
import .""")
@test_broken completion_test(1, 8).items[1].label == "M"
closetestdoc()

settestdoc("import Base.M")
@test any(item.label == "Meta" for item in completion_test(0, 13).items)
closetestdoc()

settestdoc("import Bas")
@test any(item.label == "Base" for item in completion_test(0, 10).items)
closetestdoc()
end

@testitem "getfield completions" begin
include("../test_shared_server.jl")

settestdoc("Base.")
@test length(completion_test(0, 5).items) > 10
closetestdoc()

settestdoc("Base.B")
@test any(item.label == "Base" for item in completion_test(0, 6).items)
closetestdoc()

settestdoc("Base.r")
@test any(item.label == "rand" for item in completion_test(0, 6).items)
closetestdoc()

settestdoc("""
using Base.Meta
Base.Meta.
""")
@test any(item.label == "quot" for item in completion_test(1, 10).items)
closetestdoc()

settestdoc("""
module M
Expand All @@ -80,12 +89,14 @@ end
M.
""")
@test any(item.label == "inner" for item in completion_test(3, 2).items)
closetestdoc()

settestdoc("""
x = Expr()
x.
""")
@test (r = all(item.label in ("head", "args") for item in completion_test(1, 2).items)) && (!isempty(r))
closetestdoc()

settestdoc("""
struct T
Expand All @@ -96,41 +107,52 @@ end
x.
""")
@test (r = all(item.label in ("f1", "f2") for item in completion_test(5, 2).items)) && !isempty(r)
closetestdoc()
end

@testitem "token completions" begin
include("../test_shared_server.jl")

settestdoc("B")
@test any(item.label == "Base" for item in completion_test(0, 1).items)
closetestdoc()

settestdoc("r")
@test any(item.label == "rand" for item in completion_test(0, 1).items)
closetestdoc()

settestdoc("@t")
@test any(item.label == "@time" for item in completion_test(0, 2).items)
closetestdoc()

settestdoc("i")
@test any(item.label == "if" for item in completion_test(0, 1).items)
closetestdoc()

settestdoc("i")
@test any(item.label == "in" for item in completion_test(0, 1).items)
closetestdoc()

settestdoc("for")
@test any(item.label == "for" for item in completion_test(0, 3).items)
closetestdoc()

settestdoc("in")
@test any(item.label == "in" for item in completion_test(0, 2).items)
closetestdoc()

settestdoc("isa")
@test any(item.label == "isa" for item in completion_test(0, 3).items)
closetestdoc()

# String macros
settestdoc("uint12")
@test any(item.label == "uint128\"" for item in completion_test(0, 6).items)
closetestdoc()

settestdoc("@uint12")
@test any(item.label == "@uint128_str" for item in completion_test(0, 7).items)
closetestdoc()

settestdoc("""
macro foobar_str(ex) ex end
Expand All @@ -139,6 +161,7 @@ end
""")
@test any(item.label == "foobar\"" for item in completion_test(1, 5).items)
@test any(item.label == "@foobar_str" for item in completion_test(2, 6).items)
closetestdoc()
end

@testitem "scope var completions" begin
Expand Down
6 changes: 6 additions & 0 deletions test/requests/test_features.jl
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ end
end
end
"""
closetestdoc()

doc = settestdoc("""
map([A,B,C]) do x
Expand All @@ -142,6 +143,7 @@ end
end
""")
@test range_formatting_test(2, 0, 2, 0)[1].newText == " return 0\n"
closetestdoc()

doc = settestdoc("""
function add(a,b) a+b end
Expand All @@ -153,19 +155,23 @@ end
a - b
end
"""
closetestdoc()

doc = settestdoc("""
function sub(a, b)
a - b
end
""")
@test range_formatting_test(0, 0, 2, 0) == LanguageServer.TextEdit[]
closetestdoc()

# \r\n line endings
doc = settestdoc("function foo(a, b)\r\na - b\r\n end\r\n")
@test range_formatting_test(0, 0, 2, 0)[1].newText == "function foo(a, b)\r\n a - b\r\nend\r\n"
closetestdoc()

# no trailing newline
doc = settestdoc("function foo(a, b)\na - b\n end")
@test range_formatting_test(0, 0, 2, 0)[1].newText == "function foo(a, b)\n a - b\nend"
closetestdoc()
end
1 change: 1 addition & 0 deletions test/requests/test_textdocument.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

LanguageServer.textDocument_didOpen_notification(LanguageServer.DidOpenTextDocumentParams(LanguageServer.TextDocumentItem(uri"untitled:none", "julia", 0, "")), server, server.jr_endpoint)
@test LanguageServer.hasdocument(server, uri"untitled:none")
LanguageServer.textDocument_didClose_notification(LanguageServer.DidCloseTextDocumentParams(LanguageServer.TextDocumentIdentifier(uri"untitled:none")), server, nothing)

LanguageServer.textDocument_didOpen_notification(LanguageServer.DidOpenTextDocumentParams(LanguageServer.TextDocumentItem(uri"untitled:none", "julia", 0, "")), server, server.jr_endpoint)
@test LanguageServer.hasdocument(server, uri"untitled:none")
Expand Down
43 changes: 22 additions & 21 deletions test/test_edit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -33,34 +33,35 @@
LanguageServer.set_text_document!(doc, LanguageServer.apply_text_edits(get_text_document(doc), tdcce, 1))
LanguageServer.parse_all(doc, server)

old_cst = doc.cst
new_cst = CSTParser.parse(LanguageServer.get_text(doc), true)

CSTParser.to_codeobject(doc.cst) == CSTParser.to_codeobject(new_cst), doc.cst, new_cst
LanguageServer.textDocument_didClose_notification(LanguageServer.DidCloseTextDocumentParams(LanguageServer.TextDocumentIdentifier(uri"untitled:none")), server, nothing)

CSTParser.to_codeobject(old_cst) == CSTParser.to_codeobject(new_cst), old_cst, new_cst
end

# techinically tests the same as test_document.jl, but should be changed to incremental re-parsing
# once that's implemented again
@testset "text edits" begin
@test test_edit(server, "a", (0, 0), (0, 0), "a")[1]
@test test_edit(server, "a", (0, 1), (0, 1), "a")[1]
@test test_edit(server, "a", (0, 0), (0, 1), "abc")[1]
@test test_edit(server, "a\n", (1, 0), (1, 0), "b")[1]
@test test_edit(server, "a", (0, 0), (0, 1), "")[1]
@test test_edit(server, "a\na", (1, 0), (1, 1), "b")[1]
@test test_edit(server, "a\na", (1, 0), (1, 1), "")[1]
@test test_edit(server, "begin\nend", (0, 4), (0, 5), "")[1]
@test test_edit(server, "a\nb", (1, 1), (1, 1), "\n")[1]
@test test_edit(server, "bein\nend", (0, 2), (0, 2), "g")[1]
@test test_edit(server, "a\nb\nc", (2, 0), (2, 1), "")[1]
@test test_edit(server, "a\nb\nc", (1, 0), (1, 1), "")[1]
@test test_edit(server, "begin while f end end", (0, 10), (0, 11), "")[1]
@test test_edit(server, "begin while true end end\nf() = 1", (0, 12), (0, 16), "")[1]
@test test_edit(server, "for i ", (0, 6), (0, 6), ";")[1]
@test test_edit(server, "a", (0, 0), (0, 0), "a")[1]
@test test_edit(server, "a", (0, 1), (0, 1), "a")[1]
@test test_edit(server, "a", (0, 0), (0, 1), "abc")[1]
@test test_edit(server, "a\n", (1, 0), (1, 0), "b")[1]
@test test_edit(server, "a", (0, 0), (0, 1), "")[1]
@test test_edit(server, "a\na", (1, 0), (1, 1), "b")[1]
@test test_edit(server, "a\na", (1, 0), (1, 1), "")[1]
@test test_edit(server, "begin\nend", (0, 4), (0, 5), "")[1]
@test test_edit(server, "a\nb", (1, 1), (1, 1), "\n")[1]
@test test_edit(server, "bein\nend", (0, 2), (0, 2), "g")[1]
@test test_edit(server, "a\nb\nc", (2, 0), (2, 1), "")[1]
@test test_edit(server, "a\nb\nc", (1, 0), (1, 1), "")[1]
@test test_edit(server, "begin while f end end", (0, 10), (0, 11), "")[1]
@test test_edit(server, "begin while true end end\nf() = 1", (0, 12), (0, 16), "")[1]
@test test_edit(server, "for i ", (0, 6), (0, 6), ";")[1]

@test test_edit(server, "a\n\nc", (1, 0), (1, 0), "b")[1]
@test test_edit(server, "a\nb\ne", (1, 1), (1, 1), "\nc\nd")[1]
@test test_edit(server, "aaa\nbbb", (0, 0), (0, 0), "\n")[1]
end
@test test_edit(server, "a\n\nc", (1, 0), (1, 0), "b")[1]
@test test_edit(server, "a\nb\ne", (1, 1), (1, 1), "\nc\nd")[1]
@test test_edit(server, "aaa\nbbb", (0, 0), (0, 0), "\n")[1]

end
end
4 changes: 4 additions & 0 deletions test/test_shared_server.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ function settestdoc(text)
doc
end

function closetestdoc()
LanguageServer.textDocument_didClose_notification(LanguageServer.DidCloseTextDocumentParams(LanguageServer.TextDocumentIdentifier(uri"untitled:testdoc")), server, nothing)
end

completion_test(line, char) = LanguageServer.textDocument_completion_request(LanguageServer.CompletionParams(LanguageServer.TextDocumentIdentifier(uri"untitled:testdoc"), LanguageServer.Position(line, char), missing), server, server.jr_endpoint)
action_request_test(line0, char0, line1=line0, char1=char0; diags=[]) = LanguageServer.textDocument_codeAction_request(LanguageServer.CodeActionParams(LanguageServer.TextDocumentIdentifier(uri"untitled:testdoc"), LanguageServer.Range(LanguageServer.Position(line0, char0), LanguageServer.Position(line1, char1)), LanguageServer.CodeActionContext(diags, missing)), server, server.jr_endpoint)
sig_test(line, char) = LanguageServer.textDocument_signatureHelp_request(LanguageServer.TextDocumentPositionParams(LanguageServer.TextDocumentIdentifier(uri"untitled:testdoc"), LanguageServer.Position(line, char)), server, server.jr_endpoint)
Expand Down

0 comments on commit cbf3d87

Please sign in to comment.