Skip to content

Commit eda5621

Browse files
author
Bernard Pietraga
committed
Add exercise 3 from chapter 14
1 parent a6bfe66 commit eda5621

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
defmodule Linker do
2+
import :timer, only: [sleep: 1]
3+
4+
def notify(sender) do
5+
send sender, "Hello Kermit!"
6+
exit(:boom)
7+
end
8+
9+
def read_message do
10+
receive do
11+
msg ->
12+
IO.puts "MESSAGE RECIEVED #{inspect msg}"
13+
read_message()
14+
after 0 ->
15+
IO.puts "No more messages in mailbox"
16+
end
17+
end
18+
19+
def run do
20+
Process.flag(:trap_exit, true)
21+
spawn_link(Linker, :notify, [self()])
22+
:timer.sleep(500)
23+
read_message()
24+
end
25+
end
26+
27+
28+
ExUnit.start
29+
30+
defmodule LinkerTest do
31+
use ExUnit.Case
32+
import ExUnit.CaptureIO
33+
34+
test "run returns proper messages" do
35+
messages_string = """
36+
MESSAGE RECIEVED \"Hello Kermit!\"
37+
MESSAGE RECIEVED {:EXIT, #PID<0.95.0>, :boom}
38+
No more messages in mailbox
39+
"""
40+
41+
expected = capture_io fn ->
42+
Linker.run
43+
end
44+
45+
assert expected == messages_string
46+
end
47+
end

0 commit comments

Comments
 (0)