Skip to content

Commit 8e57be4

Browse files
authored
chore: add tests for expert code actions (#33)
* chore: add tests for expert code actions handler * chore: fix aliases ordering
1 parent e1ce165 commit 8e57be4

File tree

10 files changed

+87
-11
lines changed

10 files changed

+87
-11
lines changed

apps/expert/lib/expert.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
defmodule Expert do
2-
alias Expert.Provider.Handlers
3-
alias Expert.State
42
alias Expert.Protocol.Convert
53
alias Expert.Protocol.Id
4+
alias Expert.Provider.Handlers
5+
alias Expert.State
66
alias GenLSP.Requests
77
alias GenLSP.Structures
88

apps/expert/lib/expert/configuration.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ defmodule Expert.Configuration do
55

66
alias Expert.Configuration.Support
77
alias Expert.Dialyzer
8-
alias Forge.Project
98
alias Expert.Protocol.Id
9+
alias Forge.Project
1010
alias GenLSP.Notifications.WorkspaceDidChangeConfiguration
1111
alias GenLSP.Requests
1212
alias GenLSP.Structures

apps/expert/lib/expert/project/progress/state.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ defmodule Expert.Project.Progress.State do
22
alias Expert.Configuration
33
alias Expert.Project.Progress.Percentage
44
alias Expert.Project.Progress.Value
5-
alias Forge.Project
65
alias Expert.Protocol.Id
6+
alias Forge.Project
77
alias GenLSP.Requests
88
alias GenLSP.Structures
99

apps/expert/lib/expert/project/search_listener.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
defmodule Expert.Project.SearchListener do
22
alias Expert.EngineApi
3+
alias Expert.Protocol.Id
34
alias Forge.Formats
45
alias Forge.Project
5-
alias Expert.Protocol.Id
66
alias GenLSP.Requests
77

88
import Forge.EngineApi.Messages

apps/expert/test/conversions_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmodule Expert.Protocol.ConversionsTest do
2+
alias Expert.Protocol.Conversions
23
alias Forge.Document
34
alias Forge.Document.Position, as: ExPosition
4-
alias Expert.Protocol.Conversions
55
alias GenLSP.Structures.Position, as: LSPosition
66

77
use ExUnit.Case
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
defmodule Expert.Provider.Handlers.CodeActionTest do
2+
alias Expert.EngineApi
3+
alias Expert.Protocol.Convert
4+
alias Expert.Provider.Handlers
5+
alias Forge.Document
6+
alias GenLSP.Requests.TextDocumentCodeAction
7+
alias GenLSP.Structures
8+
9+
import Forge.EngineApi.Messages
10+
import Forge.Test.Fixtures
11+
12+
use ExUnit.Case, async: false
13+
14+
setup_all do
15+
start_supervised!({Document.Store, derive: [analysis: &Forge.Ast.analyze/1]})
16+
project = project(:navigations)
17+
18+
start_supervised!({DynamicSupervisor, Expert.Project.DynamicSupervisor.options()})
19+
start_supervised!({Expert.Project.Supervisor, project})
20+
21+
EngineApi.register_listener(project, self(), [project_compiled()])
22+
EngineApi.schedule_compile(project, true)
23+
24+
assert_receive project_compiled(), 5000
25+
26+
{:ok, project: project}
27+
end
28+
29+
def build_request(path, {start_line, start_char}, {end_line, end_char}) do
30+
uri = Document.Path.ensure_uri(path)
31+
32+
with {:ok, _} <- Document.Store.open_temporary(uri) do
33+
req = %TextDocumentCodeAction{
34+
id: Expert.Protocol.Id.next(),
35+
params: %Structures.CodeActionParams{
36+
text_document: %Structures.TextDocumentIdentifier{uri: uri},
37+
context: %Structures.CodeActionContext{
38+
trigger_kind: 1,
39+
only: nil,
40+
diagnostics: [
41+
%Structures.Diagnostic{
42+
range: %Structures.Range{
43+
start: %Structures.Position{line: start_line, character: start_char},
44+
end: %Structures.Position{line: end_line, character: end_char}
45+
},
46+
message: "Test diagnostic",
47+
severity: 1,
48+
source: "TestSource"
49+
}
50+
]
51+
},
52+
range: %Structures.Range{
53+
start: %Structures.Position{line: start_line, character: start_char},
54+
end: %Structures.Position{line: end_line, character: end_char}
55+
}
56+
}
57+
}
58+
59+
Convert.to_native(req)
60+
end
61+
end
62+
63+
def handle(request, project) do
64+
config = Expert.Configuration.new(project: project)
65+
Handlers.CodeAction.handle(request, config)
66+
end
67+
68+
describe "handle code actions" do
69+
test "returns code actions for a given range", %{project: project} do
70+
uses_file_path = file_path(project, Path.join("lib", "uses.ex"))
71+
{:ok, request} = build_request(uses_file_path, {4, 4}, {4, 31})
72+
73+
assert {:ok, _actions} = handle(request, project)
74+
end
75+
end
76+
end

apps/expert/test/expert/provider/handlers/code_lens_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
defmodule Expert.Provider.Handlers.CodeLensTest do
22
alias Expert.EngineApi
3+
alias Expert.Protocol.Convert
4+
alias Expert.Protocol.Id
35
alias Expert.Provider.Handlers
46
alias Forge.Document
57
alias Forge.Project
6-
alias Expert.Protocol.Convert
7-
alias Expert.Protocol.Id
88
alias GenLSP.Requests.TextDocumentCodeLens
99
alias GenLSP.Structures
1010

apps/expert/test/expert/provider/handlers/find_references_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
defmodule Expert.Provider.Handlers.FindReferencesTest do
22
alias Expert.EngineApi
3+
alias Expert.Protocol.Convert
34
alias Expert.Provider.Handlers
45
alias Forge.Ast.Analysis
56
alias Forge.Document
67
alias Forge.Document.Location
7-
alias Expert.Protocol.Convert
88
alias GenLSP.Requests.TextDocumentReferences
99
alias GenLSP.Structures
1010

apps/expert/test/expert/provider/handlers/go_to_definition_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
defmodule Expert.Provider.Handlers.GoToDefinitionTest do
22
alias Expert.EngineApi
3+
alias Expert.Protocol.Convert
34
alias Expert.Provider.Handlers
45
alias Forge.Document
56
alias Forge.Document.Location
6-
alias Expert.Protocol.Convert
77
alias GenLSP.Requests.TextDocumentDefinition
88
alias GenLSP.Structures
99

apps/expert/test/expert/provider/handlers/hover_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
defmodule Expert.Provider.Handlers.HoverTest do
22
alias Expert.EngineApi
3+
alias Expert.Protocol.Convert
34
alias Expert.Provider.Handlers
45
alias Forge.Document
56
alias Forge.Document.Position
67
alias Forge.EngineApi.Messages
7-
alias Expert.Protocol.Convert
88
alias Forge.Test.Fixtures
99
alias GenLSP.Requests
1010
alias GenLSP.Structures

0 commit comments

Comments
 (0)