Skip to content

Commit 45149aa

Browse files
committed
improve debugger test stability
1 parent d8642c7 commit 45149aa

File tree

1 file changed

+145
-113
lines changed

1 file changed

+145
-113
lines changed

apps/elixir_ls_debugger/test/debugger_test.exs

Lines changed: 145 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -29,64 +29,86 @@ defmodule ElixirLS.Debugger.ServerTest do
2929

3030
describe "initialize" do
3131
test "succeeds", %{server: server} do
32-
Server.receive_packet(server, initialize_req(1, %{"clientID" => "some_id"}))
33-
assert_receive(response(_, 1, "initialize", %{"supportsConfigurationDoneRequest" => true}))
34-
assert :sys.get_state(server).client_info == %{"clientID" => "some_id"}
32+
in_fixture(__DIR__, "mix_project", fn ->
33+
Server.receive_packet(server, initialize_req(1, %{"clientID" => "some_id"}))
34+
35+
assert_receive(
36+
response(_, 1, "initialize", %{"supportsConfigurationDoneRequest" => true})
37+
)
38+
39+
assert :sys.get_state(server).client_info == %{"clientID" => "some_id"}
40+
end)
3541
end
3642

3743
test "fails when already initialized", %{server: server} do
38-
Server.receive_packet(server, initialize_req(1, %{"clientID" => "some_id"}))
39-
assert_receive(response(_, 1, "initialize", %{"supportsConfigurationDoneRequest" => true}))
40-
Server.receive_packet(server, initialize_req(2, %{"clientID" => "some_id"}))
44+
in_fixture(__DIR__, "mix_project", fn ->
45+
Server.receive_packet(server, initialize_req(1, %{"clientID" => "some_id"}))
4146

42-
assert_receive(
43-
error_response(
44-
_,
45-
2,
46-
"initialize",
47-
"invalidRequest",
48-
"Debugger request {command} was not expected",
49-
%{"command" => "initialize"}
47+
assert_receive(
48+
response(_, 1, "initialize", %{"supportsConfigurationDoneRequest" => true})
5049
)
51-
)
50+
51+
Server.receive_packet(server, initialize_req(2, %{"clientID" => "some_id"}))
52+
53+
assert_receive(
54+
error_response(
55+
_,
56+
2,
57+
"initialize",
58+
"invalidRequest",
59+
"Debugger request {command} was not expected",
60+
%{"command" => "initialize"}
61+
)
62+
)
63+
end)
5264
end
5365

5466
test "rejects requests when not initialized", %{server: server} do
55-
Server.receive_packet(
56-
server,
57-
set_breakpoints_req(1, %{"path" => "lib/mix_project.ex"}, [%{"line" => 3}])
58-
)
67+
in_fixture(__DIR__, "mix_project", fn ->
68+
Server.receive_packet(
69+
server,
70+
set_breakpoints_req(1, %{"path" => "lib/mix_project.ex"}, [%{"line" => 3}])
71+
)
5972

60-
assert_receive(
61-
error_response(
62-
_,
63-
1,
64-
"setBreakpoints",
65-
"invalidRequest",
66-
"Debugger request {command} was not expected",
67-
%{"command" => "setBreakpoints"}
73+
assert_receive(
74+
error_response(
75+
_,
76+
1,
77+
"setBreakpoints",
78+
"invalidRequest",
79+
"Debugger request {command} was not expected",
80+
%{"command" => "setBreakpoints"}
81+
)
6882
)
69-
)
83+
end)
7084
end
7185
end
7286

7387
describe "disconnect" do
7488
test "succeeds when not initialized", %{server: server} do
75-
Process.flag(:trap_exit, true)
76-
Server.receive_packet(server, request(1, "disconnect"))
77-
assert_receive(response(_, 1, "disconnect", %{}))
78-
assert_receive({:EXIT, ^server, {:exit_code, 0}})
79-
Process.flag(:trap_exit, false)
89+
in_fixture(__DIR__, "mix_project", fn ->
90+
Process.flag(:trap_exit, true)
91+
Server.receive_packet(server, request(1, "disconnect"))
92+
assert_receive(response(_, 1, "disconnect", %{}))
93+
assert_receive({:EXIT, ^server, {:exit_code, 0}})
94+
Process.flag(:trap_exit, false)
95+
end)
8096
end
8197

8298
test "succeeds when initialized", %{server: server} do
83-
Process.flag(:trap_exit, true)
84-
Server.receive_packet(server, initialize_req(1, %{"clientID" => "some_id"}))
85-
assert_receive(response(_, 1, "initialize", %{"supportsConfigurationDoneRequest" => true}))
86-
Server.receive_packet(server, request(2, "disconnect"))
87-
assert_receive(response(_, 2, "disconnect", %{}))
88-
assert_receive({:EXIT, ^server, {:exit_code, 0}})
89-
Process.flag(:trap_exit, false)
99+
in_fixture(__DIR__, "mix_project", fn ->
100+
Process.flag(:trap_exit, true)
101+
Server.receive_packet(server, initialize_req(1, %{"clientID" => "some_id"}))
102+
103+
assert_receive(
104+
response(_, 1, "initialize", %{"supportsConfigurationDoneRequest" => true})
105+
)
106+
107+
Server.receive_packet(server, request(2, "disconnect"))
108+
assert_receive(response(_, 2, "disconnect", %{}))
109+
assert_receive({:EXIT, ^server, {:exit_code, 0}})
110+
Process.flag(:trap_exit, false)
111+
end)
90112
end
91113
end
92114

@@ -1459,119 +1481,129 @@ defmodule ElixirLS.Debugger.ServerTest do
14591481
end
14601482

14611483
test "Evaluate expression with OK result", %{server: server} do
1462-
Server.receive_packet(server, initialize_req(1, %{}))
1463-
assert_receive(response(_, 1, "initialize", _))
1484+
in_fixture(__DIR__, "mix_project", fn ->
1485+
Server.receive_packet(server, initialize_req(1, %{}))
1486+
assert_receive(response(_, 1, "initialize", _))
14641487

1465-
Server.receive_packet(
1466-
server,
1467-
gen_watch_expression_packet("1 + 2 + 3 + 4")
1468-
)
1488+
Server.receive_packet(
1489+
server,
1490+
gen_watch_expression_packet("1 + 2 + 3 + 4")
1491+
)
14691492

1470-
assert_receive(%{"body" => %{"result" => "10"}}, 1000)
1493+
assert_receive(%{"body" => %{"result" => "10"}}, 1000)
14711494

1472-
assert Process.alive?(server)
1495+
assert Process.alive?(server)
1496+
end)
14731497
end
14741498

14751499
@tag :capture_log
14761500
test "Evaluate expression with ERROR result", %{server: server} do
1477-
Server.receive_packet(server, initialize_req(1, %{}))
1478-
assert_receive(response(_, 1, "initialize", _))
1501+
in_fixture(__DIR__, "mix_project", fn ->
1502+
Server.receive_packet(server, initialize_req(1, %{}))
1503+
assert_receive(response(_, 1, "initialize", _))
14791504

1480-
Server.receive_packet(
1481-
server,
1482-
gen_watch_expression_packet("1 = 2")
1483-
)
1505+
Server.receive_packet(
1506+
server,
1507+
gen_watch_expression_packet("1 = 2")
1508+
)
14841509

1485-
assert_receive(%{"body" => %{"result" => result}}, 1000)
1510+
assert_receive(%{"body" => %{"result" => result}}, 1000)
14861511

1487-
assert result =~ ~r/badmatch/
1512+
assert result =~ ~r/badmatch/
14881513

1489-
assert Process.alive?(server)
1514+
assert Process.alive?(server)
1515+
end)
14901516
end
14911517

14921518
test "Evaluate expression with attempt to exit debugger process", %{server: server} do
1493-
Server.receive_packet(server, initialize_req(1, %{}))
1494-
assert_receive(response(_, 1, "initialize", _))
1519+
in_fixture(__DIR__, "mix_project", fn ->
1520+
Server.receive_packet(server, initialize_req(1, %{}))
1521+
assert_receive(response(_, 1, "initialize", _))
14951522

1496-
Server.receive_packet(
1497-
server,
1498-
gen_watch_expression_packet("Process.exit(self(), :normal)")
1499-
)
1523+
Server.receive_packet(
1524+
server,
1525+
gen_watch_expression_packet("Process.exit(self(), :normal)")
1526+
)
15001527

1501-
assert_receive(%{"body" => %{"result" => result}}, 1000)
1528+
assert_receive(%{"body" => %{"result" => result}}, 1000)
15021529

1503-
assert result =~ ~r/:exit/
1530+
assert result =~ ~r/:exit/
15041531

1505-
assert Process.alive?(server)
1532+
assert Process.alive?(server)
1533+
end)
15061534
end
15071535

15081536
test "Evaluate expression with attempt to throw debugger process", %{server: server} do
1509-
Server.receive_packet(server, initialize_req(1, %{}))
1510-
assert_receive(response(_, 1, "initialize", _))
1537+
in_fixture(__DIR__, "mix_project", fn ->
1538+
Server.receive_packet(server, initialize_req(1, %{}))
1539+
assert_receive(response(_, 1, "initialize", _))
15111540

1512-
Server.receive_packet(
1513-
server,
1514-
gen_watch_expression_packet("throw(:goodmorning_bug)")
1515-
)
1541+
Server.receive_packet(
1542+
server,
1543+
gen_watch_expression_packet("throw(:goodmorning_bug)")
1544+
)
15161545

1517-
assert_receive(%{"body" => %{"result" => result}}, 1000)
1546+
assert_receive(%{"body" => %{"result" => result}}, 1000)
15181547

1519-
assert result =~ ~r/:goodmorning_bug/
1548+
assert result =~ ~r/:goodmorning_bug/
15201549

1521-
assert Process.alive?(server)
1550+
assert Process.alive?(server)
1551+
end)
15221552
end
15231553

15241554
test "Evaluate expression which has long execution", %{server: server} do
1525-
Server.receive_packet(server, initialize_req(1, %{}))
1526-
assert_receive(response(_, 1, "initialize", _))
1555+
in_fixture(__DIR__, "mix_project", fn ->
1556+
Server.receive_packet(server, initialize_req(1, %{}))
1557+
assert_receive(response(_, 1, "initialize", _))
15271558

1528-
Server.receive_packet(
1529-
server,
1530-
launch_req(2, %{
1531-
"request" => "launch",
1532-
"type" => "mix_task",
1533-
"task" => "test",
1534-
"projectDir" => File.cwd!(),
1535-
"debugExpressionTimeoutMs" => 500
1536-
})
1537-
)
1559+
Server.receive_packet(
1560+
server,
1561+
launch_req(2, %{
1562+
"request" => "launch",
1563+
"type" => "mix_task",
1564+
"task" => "test",
1565+
"projectDir" => File.cwd!(),
1566+
"debugExpressionTimeoutMs" => 500
1567+
})
1568+
)
15381569

1539-
assert_receive(response(_, 2, "launch", %{}), 5000)
1570+
assert_receive(response(_, 2, "launch", %{}), 5000)
15401571

1541-
Server.receive_packet(
1542-
server,
1543-
gen_watch_expression_packet(":timer.sleep(10_000)")
1544-
)
1572+
Server.receive_packet(
1573+
server,
1574+
gen_watch_expression_packet(":timer.sleep(10_000)")
1575+
)
15451576

1546-
assert_receive(%{"body" => %{"result" => result}}, 1100)
1577+
assert_receive(%{"body" => %{"result" => result}}, 1100)
15471578

1548-
assert result =~ ~r/:elixir_ls_expression_timeout/
1579+
assert result =~ ~r/:elixir_ls_expression_timeout/
15491580

1550-
assert Process.alive?(server)
1581+
assert Process.alive?(server)
1582+
end)
15511583
end
15521584
end
15531585

15541586
test "Completions", %{server: server} do
1555-
Server.receive_packet(server, initialize_req(1, %{}))
1556-
assert_receive(response(_, 1, "initialize", _))
1557-
1558-
Server.receive_packet(
1559-
server,
1560-
%{
1561-
"arguments" => %{
1562-
"text" => "DateTi",
1563-
"column" => 7
1564-
},
1565-
"command" => "completions",
1566-
"seq" => 1,
1567-
"type" => "request"
1568-
}
1569-
)
1587+
in_fixture(__DIR__, "mix_project", fn ->
1588+
Server.receive_packet(server, initialize_req(1, %{}))
1589+
assert_receive(response(_, 1, "initialize", _))
15701590

1571-
assert_receive(%{"body" => %{"targets" => _targets}}, 10000)
1591+
Server.receive_packet(
1592+
server,
1593+
%{
1594+
"arguments" => %{
1595+
"text" => "DateTi",
1596+
"column" => 7
1597+
},
1598+
"command" => "completions",
1599+
"seq" => 1,
1600+
"type" => "request"
1601+
}
1602+
)
15721603

1573-
assert Process.alive?(server)
1604+
assert_receive(%{"body" => %{"targets" => _targets}}, 10000)
15741605

1575-
# assert [%{}]
1606+
assert Process.alive?(server)
1607+
end)
15761608
end
15771609
end

0 commit comments

Comments
 (0)