aboutsummaryrefslogtreecommitdiff
path: root/learn-you-some-erlang/reminder/src/tests/dev_event_tests.erl
diff options
context:
space:
mode:
Diffstat (limited to 'learn-you-some-erlang/reminder/src/tests/dev_event_tests.erl')
-rw-r--r--learn-you-some-erlang/reminder/src/tests/dev_event_tests.erl41
1 files changed, 41 insertions, 0 deletions
diff --git a/learn-you-some-erlang/reminder/src/tests/dev_event_tests.erl b/learn-you-some-erlang/reminder/src/tests/dev_event_tests.erl
new file mode 100644
index 0000000..5de18d1
--- /dev/null
+++ b/learn-you-some-erlang/reminder/src/tests/dev_event_tests.erl
@@ -0,0 +1,41 @@
+-module(dev_event_tests).
+-include_lib("eunit/include/eunit.hrl").
+%%% Very minimal tests, only verifying that the two implementations of
+%%% timeouts work the same in their final and primitive versions
+%%% as in the final module. The rest is rather cruft to emulate the normal
+%%% event.erl module. Little is tested, because little needs to be tested.
+
+
+-record(state, {server,
+ name="",
+ to_go=[0]}).
+
+timeout_test_() ->
+ {inorder,
+ [fun() -> timeout(loop1, 2) end,
+ fun() -> timeout(loop2, [2]) end]}.
+
+timeout(AtomFun, T) ->
+ S = self(),
+ spawn_link(dev_event, AtomFun, [#state{server=S, name="test", to_go=T}]),
+ timer:sleep(1000),
+ M1 = receive A -> A after 0 -> timeout end,
+ timer:sleep(1500),
+ M2 = receive B -> B after 0 -> timeout end,
+ M3 = receive C -> C after 0 -> timeout end,
+ ?assertEqual(timeout, M1),
+ ?assertEqual({done, "test"}, M2),
+ ?assertEqual(timeout, M3).
+
+cancel_msg_test_() ->
+ {inorder,
+ [fun() -> cancel_msg(loop1, 2) end,
+ fun() -> cancel_msg(loop2, [2]) end]}.
+
+cancel_msg(AtomFun, T) ->
+ S = self(),
+ R = make_ref(),
+ Pid = spawn_link(dev_event, AtomFun, [#state{server=S, name="test", to_go=T}]),
+ Pid ! {S, R, cancel},
+ M = receive A -> A after 500 -> timeout end,
+ ?assertEqual({R, ok}, M).