Skip to content

Commit 4477847

Browse files
committed
make tests more stable
1 parent 830be21 commit 4477847

File tree

9 files changed

+502
-414
lines changed

9 files changed

+502
-414
lines changed

apps/elixir_ls_debugger/lib/debugger/server.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ defmodule ElixirLS.Debugger.Server do
207207

208208
Output.debugger_important("Terminating #{__MODULE__}: #{message}")
209209

210-
unless Application.get_env(:elixir_ls_debugger, :test_mode) do
210+
unless :persistent_term.get(:elixir_ls_debugger_test_mode, false) do
211211
System.stop(1)
212212
end
213213
end
@@ -609,7 +609,7 @@ defmodule ElixirLS.Debugger.Server do
609609
# die right after responding to the request
610610
@impl GenServer
611611
def handle_continue(:disconnect, state = %__MODULE__{}) do
612-
unless Application.get_env(:elixir_ls_debugger, :test_mode) do
612+
unless :persistent_term.get(:elixir_ls_debugger_test_mode, false) do
613613
Output.debugger_console("Received disconnect request")
614614
Process.sleep(200)
615615
System.stop(0)

apps/elixir_ls_debugger/test/test_helper.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Application.put_env(:elixir_ls_debugger, :test_mode, true)
1+
:persistent_term.put(:elixir_ls_debugger_test_mode, true)
22
ExUnit.start(exclude: [pending: true])
33

44
if Version.match?(System.version(), ">= 1.15.0") do

apps/language_server/lib/language_server.ex

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ defmodule ElixirLS.LanguageServer do
3232
"ElixirLS has crashed. See Output panel."
3333
)
3434

35-
System.halt(1)
35+
unless :persistent_term.get(:language_server_test_mode, false) do
36+
Process.sleep(2000)
37+
System.halt(1)
38+
else
39+
IO.warn("Application stopping")
40+
end
3641
end
3742

3843
:ok

apps/language_server/lib/language_server/providers/workspace_symbols.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ defmodule ElixirLS.LanguageServer.Providers.WorkspaceSymbols do
7373
end
7474

7575
def notify_build_complete(server \\ __MODULE__, override_test_mode \\ false) do
76-
unless Application.get_env(:language_server, :test_mode) && not override_test_mode do
76+
unless :persistent_term.get(:language_server_test_mode, false) && not override_test_mode do
7777
GenServer.cast(server, :build_complete)
7878
end
7979
end
8080

8181
@spec notify_uris_modified([String.t()]) :: :ok | nil
8282
def notify_uris_modified(uris, server \\ __MODULE__, override_test_mode \\ false) do
83-
unless Application.get_env(:language_server, :test_mode) && not override_test_mode do
83+
unless :persistent_term.get(:language_server_test_mode, false) && not override_test_mode do
8484
GenServer.cast(server, {:uris_modified, uris})
8585
end
8686
end

apps/language_server/lib/language_server/server.ex

Lines changed: 119 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,11 @@ defmodule ElixirLS.LanguageServer.Server do
155155

156156
Logger.error("Terminating #{__MODULE__}: #{message}")
157157

158-
unless Application.get_env(:language_server, :test_mode) do
158+
unless :persistent_term.get(:language_server_test_mode, false) do
159159
Process.sleep(2000)
160160
System.halt(1)
161+
else
162+
IO.warn("Terminating #{__MODULE__}: #{message}")
161163
end
162164
end
163165

@@ -326,8 +328,13 @@ defmodule ElixirLS.LanguageServer.Server do
326328

327329
Logger.error(message)
328330
JsonRpc.show_message(:error, message)
329-
Process.sleep(2000)
330-
System.halt(1)
331+
332+
unless :persistent_term.get(:language_server_test_mode, false) do
333+
Process.sleep(2000)
334+
System.halt(1)
335+
else
336+
IO.warn(message)
337+
end
331338
end
332339

333340
state =
@@ -545,10 +552,10 @@ defmodule ElixirLS.LanguageServer.Server do
545552
defp handle_notification(notification("exit"), state = %__MODULE__{}) do
546553
code = if state.received_shutdown?, do: 0, else: 1
547554

548-
unless Application.get_env(:language_server, :test_mode) do
555+
unless :persistent_term.get(:language_server_test_mode, false) do
549556
System.stop(code)
550557
else
551-
Process.exit(self(), {:exit_code, code})
558+
Logger.info("Received exit with code #{code}")
552559
end
553560

554561
state
@@ -1358,8 +1365,13 @@ defmodule ElixirLS.LanguageServer.Server do
13581365

13591366
Logger.error(message)
13601367
JsonRpc.show_message(:error, message)
1361-
Process.sleep(2000)
1362-
System.halt(1)
1368+
1369+
unless :persistent_term.get(:language_server_test_mode, false) do
1370+
Process.sleep(2000)
1371+
System.halt(1)
1372+
else
1373+
IO.warn(message)
1374+
end
13631375
end
13641376
end
13651377

@@ -1618,8 +1630,12 @@ defmodule ElixirLS.LanguageServer.Server do
16181630
"Invalid `dialyzerWarnOpts` in configuration. Expected list of strings or nil, got #{inspect(dialyzer_warn_opts)}."
16191631
)
16201632

1621-
Process.sleep(2000)
1622-
System.halt(1)
1633+
unless :persistent_term.get(:language_server_test_mode, false) do
1634+
Process.sleep(2000)
1635+
System.halt(1)
1636+
else
1637+
IO.warn("Invalid `dialyzerWarnOpts` #{inspect(dialyzer_warn_opts)}")
1638+
end
16231639
end
16241640

16251641
dialyzer_formats = [
@@ -1638,8 +1654,12 @@ defmodule ElixirLS.LanguageServer.Server do
16381654
"Invalid `dialyzerFormat` in configuration. Expected one of #{Enum.join(dialyzer_formats, ", ")} or nil, got #{inspect(dialyzer_format)}."
16391655
)
16401656

1641-
Process.sleep(2000)
1642-
System.halt(1)
1657+
unless :persistent_term.get(:language_server_test_mode, false) do
1658+
Process.sleep(2000)
1659+
System.halt(1)
1660+
else
1661+
IO.warn("Invalid `dialyzerFormat` #{inspect(dialyzer_format)}")
1662+
end
16431663
end
16441664
end
16451665

@@ -1711,8 +1731,12 @@ defmodule ElixirLS.LanguageServer.Server do
17111731
"Invalid `additionalWatchedExtensions` in configuration. Expected list of extensions starting with `.` or nil, got #{inspect(exts)}."
17121732
)
17131733

1714-
Process.sleep(2000)
1715-
System.halt(1)
1734+
unless :persistent_term.get(:language_server_test_mode, false) do
1735+
Process.sleep(2000)
1736+
System.halt(1)
1737+
else
1738+
IO.warn("Invalid `additionalWatchedExtensions`: #{inspect(exts)}")
1739+
end
17161740
end
17171741

17181742
case JsonRpc.register_capability_request(
@@ -1800,8 +1824,14 @@ defmodule ElixirLS.LanguageServer.Server do
18001824
"Invalid `envVariables` in configuration. Expected a map with string key value pairs, got #{inspect(env)}."
18011825
)
18021826

1803-
Process.sleep(2000)
1804-
System.halt(1)
1827+
unless :persistent_term.get(:language_server_test_mode, false) do
1828+
Process.sleep(2000)
1829+
System.halt(1)
1830+
else
1831+
IO.warn(
1832+
"Cannot set environment variables to #{inspect(env)}: #{Exception.message(e)}"
1833+
)
1834+
end
18051835
end
18061836
else
18071837
JsonRpc.show_message(
@@ -1849,8 +1879,12 @@ defmodule ElixirLS.LanguageServer.Server do
18491879
"Invalid `mixEnv` in configuration. Expected a string or nil, got #{inspect(env)}."
18501880
)
18511881

1852-
Process.sleep(2000)
1853-
System.halt(1)
1882+
unless :persistent_term.get(:language_server_test_mode, false) do
1883+
Process.sleep(2000)
1884+
System.halt(1)
1885+
else
1886+
IO.warn("Cannot set mix env to #{inspect(env)}: #{Exception.message(e)}")
1887+
end
18541888
end
18551889
else
18561890
JsonRpc.show_message(:warning, "Mix env change detected. ElixirLS will restart.")
@@ -1892,8 +1926,12 @@ defmodule ElixirLS.LanguageServer.Server do
18921926
"Invalid `mixTarget` in configuration. Expected a string or nil, got #{inspect(target)}."
18931927
)
18941928

1895-
Process.sleep(2000)
1896-
System.halt(1)
1929+
unless :persistent_term.get(:language_server_test_mode, false) do
1930+
Process.sleep(2000)
1931+
System.halt(1)
1932+
else
1933+
IO.warn("Cannot set mix target to #{inspect(target)}: #{Exception.message(e)}")
1934+
end
18971935
end
18981936
else
18991937
JsonRpc.show_message(:warning, "Mix target change detected. ElixirLS will restart")
@@ -1934,17 +1972,26 @@ defmodule ElixirLS.LanguageServer.Server do
19341972
"Invalid `projectDir` in configuration. Expected a string or nil, got #{inspect(project_dir_config)}."
19351973
)
19361974

1937-
Process.sleep(2000)
1938-
System.halt(1)
1975+
unless :persistent_term.get(:language_server_test_mode, false) do
1976+
Process.sleep(2000)
1977+
System.halt(1)
1978+
else
1979+
IO.warn("Invalid `projectDir`: #{inspect(project_dir_config)}")
1980+
end
19391981
end
19401982
end
19411983

19421984
cond do
19431985
not File.dir?(project_dir) ->
19441986
Logger.error("Project directory #{project_dir} does not exist")
19451987
JsonRpc.show_message(:error, "Project directory #{project_dir} does not exist")
1946-
Process.sleep(2000)
1947-
System.halt(1)
1988+
1989+
unless :persistent_term.get(:language_server_test_mode, false) do
1990+
Process.sleep(2000)
1991+
System.halt(1)
1992+
else
1993+
IO.warn("Project directory #{project_dir} does not exist")
1994+
end
19481995

19491996
is_nil(prev_project_dir) ->
19501997
with :ok <- File.cd(project_dir),
@@ -1964,8 +2011,12 @@ defmodule ElixirLS.LanguageServer.Server do
19642011
"Please make sure the directory exists and you have necessary permissions"
19652012
)
19662013

1967-
Process.sleep(2000)
1968-
System.halt(1)
2014+
unless :persistent_term.get(:language_server_test_mode, false) do
2015+
Process.sleep(2000)
2016+
System.halt(1)
2017+
else
2018+
IO.warn("Unable to change directory into #{project_dir}: #{inspect(reason)}")
2019+
end
19692020
end
19702021

19712022
prev_project_dir != project_dir ->
@@ -2015,8 +2066,12 @@ defmodule ElixirLS.LanguageServer.Server do
20152066
"Cannot create .elixir_ls/.gitignore"
20162067
)
20172068

2018-
Process.sleep(2000)
2019-
System.halt(1)
2069+
unless :persistent_term.get(:language_server_test_mode, false) do
2070+
Process.sleep(2000)
2071+
System.halt(1)
2072+
else
2073+
IO.warn("Cannot create .elixir_ls/.gitignore, cause: #{Atom.to_string(err)}")
2074+
end
20202075
end
20212076
end
20222077

@@ -2062,8 +2117,12 @@ defmodule ElixirLS.LanguageServer.Server do
20622117
message
20632118
)
20642119

2065-
Process.sleep(2000)
2066-
System.halt(1)
2120+
unless :persistent_term.get(:language_server_test_mode, false) do
2121+
Process.sleep(2000)
2122+
System.halt(1)
2123+
else
2124+
IO.warn(message)
2125+
end
20672126
end
20682127

20692128
case File.cwd() do
@@ -2092,8 +2151,12 @@ defmodule ElixirLS.LanguageServer.Server do
20922151
message
20932152
)
20942153

2095-
Process.sleep(2000)
2096-
System.halt(1)
2154+
unless :persistent_term.get(:language_server_test_mode, false) do
2155+
Process.sleep(2000)
2156+
System.halt(1)
2157+
else
2158+
IO.warn(message)
2159+
end
20972160
end
20982161
else
20992162
message =
@@ -2106,8 +2169,12 @@ defmodule ElixirLS.LanguageServer.Server do
21062169
message
21072170
)
21082171

2109-
Process.sleep(2000)
2110-
System.halt(1)
2172+
unless :persistent_term.get(:language_server_test_mode, false) do
2173+
Process.sleep(2000)
2174+
System.halt(1)
2175+
else
2176+
IO.warn(message)
2177+
end
21112178
end
21122179

21132180
{:error, reason} ->
@@ -2119,8 +2186,12 @@ defmodule ElixirLS.LanguageServer.Server do
21192186
message
21202187
)
21212188

2122-
Process.sleep(2000)
2123-
System.halt(1)
2189+
unless :persistent_term.get(:language_server_test_mode, false) do
2190+
Process.sleep(2000)
2191+
System.halt(1)
2192+
else
2193+
IO.warn(message)
2194+
end
21242195
end
21252196
end
21262197
end
@@ -2255,25 +2326,25 @@ defmodule ElixirLS.LanguageServer.Server do
22552326

22562327
defp do_sanity_check(_state) do
22572328
try do
2258-
unless function_exported?(ElixirSense, :module_info, 1) and
2259-
:persistent_term.get(:language_server_lib_dir) ==
2260-
ElixirLS.LanguageServer.module_info(:compile)[:source] do
2261-
raise "sanity check failed"
2262-
end
2329+
unless :persistent_term.get(:language_server_test_mode, false) do
2330+
unless function_exported?(ElixirSense, :module_info, 1) and
2331+
:persistent_term.get(:language_server_lib_dir) ==
2332+
ElixirLS.LanguageServer.module_info(:compile)[:source] do
2333+
raise "sanity check failed"
2334+
end
22632335

2264-
unless function_exported?(ElixirLS.LanguageServer, :module_info, 1) and
2265-
:persistent_term.get(:language_server_elixir_sense_lib_dir) ==
2266-
ElixirSense.module_info(:compile)[:source] do
2267-
raise "sanity check failed"
2336+
unless function_exported?(ElixirLS.LanguageServer, :module_info, 1) and
2337+
:persistent_term.get(:language_server_elixir_sense_lib_dir) ==
2338+
ElixirSense.module_info(:compile)[:source] do
2339+
raise "sanity check failed"
2340+
end
22682341
end
22692342
rescue
22702343
_ ->
22712344
Logger.error("Sanity check failed. ElixirLS needs to restart.")
22722345

2273-
unless Application.get_env(:language_server, :test_mode) do
2274-
Process.sleep(2000)
2275-
System.halt(1)
2276-
end
2346+
Process.sleep(2000)
2347+
System.halt(1)
22772348
end
22782349
end
22792350
end

apps/language_server/lib/language_server/tracer.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,11 @@ defmodule ElixirLS.LanguageServer.Tracer do
157157

158158
Logger.error("Terminating #{__MODULE__}: #{message}")
159159

160-
unless Application.get_env(:language_server, :test_mode) do
160+
unless :persistent_term.get(:language_server_test_mode, false) do
161161
Process.sleep(2000)
162162
System.halt(1)
163+
else
164+
IO.warn("Terminating #{__MODULE__}: #{message}")
163165
end
164166
end
165167
end
@@ -243,9 +245,11 @@ defmodule ElixirLS.LanguageServer.Tracer do
243245
%{}
244246
)
245247

246-
unless Application.get_env(:language_server, :test_mode) do
248+
unless :persistent_term.get(:language_server_test_mode, false) do
247249
Process.sleep(2000)
248250
System.halt(1)
251+
else
252+
IO.warn("Unable to init tracer table #{table} in directory #{project_dir}: #{error_msg}")
249253
end
250254
end
251255

0 commit comments

Comments
 (0)