Skip to content

Commit 96f96ef

Browse files
authored
Cleanup test's output (#270)
* Cleanup tests If a process is registered as :elixir_ls_test_process, JsonRPC will send output to that process instead of cluttering up the test output. Don't import WireProtocol.send/1 because it is easily confused with Kernel.send Switch an IO.warn to a JsonRpc warning Send WorkspaceSymbols messages through PacketCapture for the dialyzer test Fix config_path for debugger and language_server (note: this is not otherwise used, but is better for consistency) * Remove unused alias
1 parent c7cb6f7 commit 96f96ef

File tree

10 files changed

+63
-20
lines changed

10 files changed

+63
-20
lines changed

apps/debugger/mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule ElixirLS.Debugger.Mixfile do
66
app: :debugger,
77
version: "0.4.0",
88
build_path: "../../_build",
9-
config_path: "config/config.exs",
9+
config_path: "../../config/config.exs",
1010
deps_path: "../../deps",
1111
lockfile: "../../mix.lock",
1212
elixir: ">= 1.7.0",

apps/elixir_ls_utils/lib/wire_protocol.ex

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,24 @@ defmodule ElixirLS.Utils.WireProtocol do
55
alias ElixirLS.Utils.{PacketStream, OutputDevice}
66

77
def send(packet) do
8-
pid = Process.whereis(:raw_user) || Process.group_leader()
8+
pid = io_dest()
99
body = JasonVendored.encode!(packet) <> "\r\n\r\n"
1010
IO.binwrite(pid, "Content-Length: #{byte_size(body)}\r\n\r\n" <> body)
1111
end
1212

13+
case Mix.env() do
14+
:test ->
15+
defp io_dest do
16+
Process.whereis(:raw_user) || Process.whereis(:elixir_ls_test_process) ||
17+
Process.group_leader()
18+
end
19+
20+
_ ->
21+
defp io_dest do
22+
Process.whereis(:raw_user) || Process.group_leader()
23+
end
24+
end
25+
1326
def io_intercepted? do
1427
!!Process.whereis(:raw_user)
1528
end

apps/language_server/lib/language_server/json_rpc.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
66
responses and notifications
77
"""
88

9-
import ElixirLS.Utils.WireProtocol, only: [{:send, 1}]
109
use GenServer
10+
alias ElixirLS.Utils.WireProtocol
1111

1212
defstruct language_server: ElixirLS.LanguageServer.Server,
1313
next_id: 1,
@@ -67,16 +67,16 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
6767
## Utils
6868

6969
def notify(method, params) do
70-
send(notification(method, params))
70+
WireProtocol.send(notification(method, params))
7171
end
7272

7373
def respond(id, result) do
74-
send(response(id, result))
74+
WireProtocol.send(response(id, result))
7575
end
7676

7777
def respond_with_error(id, type, message) do
7878
{code, default_message} = error_code_and_message(type)
79-
send(error_response(id, code, message || default_message))
79+
WireProtocol.send(error_response(id, code, message || default_message))
8080
end
8181

8282
def show_message(type, message) do
@@ -175,7 +175,7 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
175175

176176
@impl GenServer
177177
def handle_call({:request, method, params}, from, state) do
178-
send(request(state.next_id, method, params))
178+
WireProtocol.send(request(state.next_id, method, params))
179179
state = update_in(state.outgoing_requests, &Map.put(&1, state.next_id, from))
180180
state = %__MODULE__{state | next_id: state.next_id + 1}
181181
{:noreply, state}

apps/language_server/lib/language_server/providers/definition.ex

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ defmodule ElixirLS.LanguageServer.Providers.Definition do
2121
_ -> SourceFile.path_to_uri(file)
2222
end
2323

24-
ElixirLS.LanguageServer.JsonRpc.log_message(:info, "Returning location struct")
25-
2624
{:ok,
2725
%Protocol.Location{
2826
uri: uri,

apps/language_server/lib/language_server/server.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,8 @@ defmodule ElixirLS.LanguageServer.Server do
282282
# The source file was not marked as open either due to a bug in the
283283
# client or a restart of the server. So just ignore the message and do
284284
# not update the state
285-
IO.warn(
285+
JsonRpc.log_message(
286+
:warning,
286287
"Received textDocument/didChange for file that is not open. Received uri: #{
287288
inspect(uri)
288289
}"

apps/language_server/mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ defmodule ElixirLS.LanguageServer.Mixfile do
77
version: "0.4.0",
88
elixir: ">= 1.7.0",
99
build_path: "../../_build",
10-
config_path: "config/config.exs",
10+
config_path: "../../config/config.exs",
1111
deps_path: "../../deps",
1212
lockfile: "../../mix.lock",
1313
elixirc_paths: elixirc_paths(Mix.env()),

apps/language_server/test/dialyzer_test.exs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
22
# TODO: Test loading and saving manifest
33

44
alias ElixirLS.LanguageServer.{Dialyzer, Server, Protocol, SourceFile}
5-
alias ElixirLS.Utils.PacketCapture
65
import ExUnit.CaptureLog
76
use ElixirLS.Utils.MixTest.Case, async: false
87
use Protocol
@@ -15,9 +14,7 @@ defmodule ElixirLS.LanguageServer.DialyzerTest do
1514
end
1615

1716
setup do
18-
{:ok, server} = Server.start_link()
19-
{:ok, packet_capture} = PacketCapture.start_link(self())
20-
Process.group_leader(server, packet_capture)
17+
server = ElixirLS.LanguageServer.Test.ServerTestHelpers.start_server()
2118

2219
{:ok, %{server: server}}
2320
end

apps/language_server/test/providers/workspace_symbols_test.exs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbolsTest do
2-
use ExUnit.Case
2+
use ExUnit.Case, async: false
33
alias ElixirLS.LanguageServer.Providers.WorkspaceSymbols
44

5-
setup_all do
5+
setup do
6+
alias ElixirLS.Utils.PacketCapture
7+
packet_capture = start_supervised!({PacketCapture, self()})
8+
Process.register(packet_capture, :elixir_ls_test_process)
9+
610
pid =
711
case WorkspaceSymbols.start_link([]) do
812
{:ok, pid} -> pid
@@ -40,6 +44,11 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbolsTest do
4044

4145
test "empty query" do
4246
assert {:ok, []} == WorkspaceSymbols.symbols("")
47+
48+
assert_receive %{
49+
"method" => "window/logMessage",
50+
"params" => %{"message" => "[ElixirLS WorkspaceSymbols] Updating index..."}
51+
}
4352
end
4453

4554
test "returns modules" do

apps/language_server/test/server_test.exs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ defmodule ElixirLS.LanguageServer.ServerTest do
2222

2323
setup context do
2424
unless context[:skip_server] do
25-
server = start_supervised!({Server, nil})
26-
packet_capture = start_supervised!({PacketCapture, self()})
27-
Process.group_leader(server, packet_capture)
25+
server = ElixirLS.LanguageServer.Test.ServerTestHelpers.start_server()
26+
2827
{:ok, %{server: server}}
2928
else
3029
:ok
@@ -47,8 +46,18 @@ defmodule ElixirLS.LanguageServer.ServerTest do
4746
]
4847

4948
version = 2
49+
5050
Server.receive_packet(server, did_change(uri, version, content_changes))
5151

52+
assert_receive %{
53+
"method" => "window/logMessage",
54+
"params" => %{
55+
"message" =>
56+
"Received textDocument/didChange for file that is not open. Received uri: \"file:///file.ex\"",
57+
"type" => 2
58+
}
59+
}
60+
5261
# Wait for the server to process the message and ensure that there is no exception
5362
_ = :sys.get_state(server)
5463
end
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
defmodule ElixirLS.LanguageServer.Test.ServerTestHelpers do
2+
import ExUnit.Callbacks, only: [start_supervised!: 1]
3+
alias ElixirLS.LanguageServer.Server
4+
alias ElixirLS.Utils.PacketCapture
5+
6+
def start_server do
7+
server = start_supervised!({Server, nil})
8+
packet_capture = start_supervised!({PacketCapture, self()})
9+
Process.group_leader(server, packet_capture)
10+
11+
Process.whereis(ElixirLS.LanguageServer.Providers.WorkspaceSymbols)
12+
|> Process.group_leader(packet_capture)
13+
14+
server
15+
end
16+
end

0 commit comments

Comments
 (0)