diff options
author | Zandra Hird <[email protected]> | 2015-05-20 14:18:56 +0200 |
---|---|---|
committer | Zandra Hird <[email protected]> | 2015-05-20 14:18:56 +0200 |
commit | e7f6d047777f749f00820660430533aa724ae4a2 (patch) | |
tree | 4ee1a404b572a904917d72dd6bb5c8f926cea1bb | |
parent | fa4cb9250fb987528d650834dfeb7c96104979d0 (diff) | |
parent | e56cf8d9846e51ae88fa72c8b0992d81da6fd7d5 (diff) | |
download | otp-e7f6d047777f749f00820660430533aa724ae4a2.tar.gz otp-e7f6d047777f749f00820660430533aa724ae4a2.tar.bz2 otp-e7f6d047777f749f00820660430533aa724ae4a2.zip |
Merge branch 'saleyn/eunit'
* saleyn/eunit:
Add ?assertReceive(Guard, Timeout) macro to eunit
OTP-12753
-rw-r--r-- | lib/eunit/doc/overview.edoc | 15 | ||||
-rw-r--r-- | lib/eunit/include/eunit.hrl | 20 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/eunit/doc/overview.edoc b/lib/eunit/doc/overview.edoc index df716cdeea..eb60f673ef 100644 --- a/lib/eunit/doc/overview.edoc +++ b/lib/eunit/doc/overview.edoc @@ -572,6 +572,21 @@ Examples: <dt>`assertNotMatch(GuardedPattern, Expr)'</dt> <dd>The inverse case of assertMatch, for convenience. </dd> +<dt>`assertReceive(GuardedPattern, Timeout)'</dt> +<dd>Waits for up to the `Timeout' milliseconds for a message to arrive +in the mailbox of the current process that matches against the +`GuardedPattern' if testing is enabled. +If no message matching the `GuardedPattern' is received in the specified +`Timeout' interval, the assertion fails and an informative exception will +be generated; see the `assert' macro for further details. `GuardedPattern' +can be anything that you can write on the left hand side of the `->' +symbol in a case-clause, except that it cannot contain comma-separated +guard tests. + +Examples: +```?assertReceive(done, 1000)''' +```?assertReceive(Bin when byte_size(Bin) > 10, 1000)''' +</dd> <dt>`assertEqual(Expect, Expr)'</dt> <dd>Evaluates the expressions `Expect' and `Expr' and compares the results for equality, if testing is enabled. If the values are not diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl index 53d291430d..8a829396ec 100644 --- a/lib/eunit/include/eunit.hrl +++ b/lib/eunit/include/eunit.hrl @@ -166,6 +166,26 @@ %% This is mostly a convenience which gives more detailed reports. %% Note: Guard is a guarded pattern, and can not be used for value. -ifdef(NOASSERT). +-define(assertReceive(Guard, Timeout), ok). +-else. +-define(assertReceive(Guard, Timeout), + begin + ((fun () -> + receive (Guard) -> ok + after Timeout -> erlang:error({assertReceive_timedout, + [{module, ?MODULE}, + {line, ?LINE}, + {pattern, (??Guard)}, + {timeout, __V}]}) + end + end)()) + end). +-endif. +-define(_assertReceive(Guard, Timeout), ?_test(?assertReceive(Guard, Timeout))). + +%% This is mostly a convenience which gives more detailed reports. +%% Note: Guard is a guarded pattern, and can not be used for value. +-ifdef(NOASSERT). -define(assertMatch(Guard, Expr), ok). -else. -define(assertMatch(Guard, Expr), |