%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1997-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%
-module(nested_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2,
case_in_case/1, case_in_after/1, catch_in_catch/1, bif_in_bif/1]).
-include_lib("test_server/include/test_server.hrl").
suite() -> [{suite_callbacks,[ts_install_scb]}].
all() ->
[case_in_case, case_in_after, catch_in_catch,
bif_in_bif].
groups() ->
[].
init_per_suite(Config) ->
Config.
end_per_suite(_Config) ->
ok.
init_per_group(_GroupName, Config) ->
Config.
end_per_group(_GroupName, Config) ->
Config.
case_in_case(suite) -> [];
case_in_case(Config) when is_list(Config) ->
?line done = search_any([a], [{a, 1}]),
?line done = search_any([x], [{a, 1}]),
ok.
search_any([Key|Rest], List) ->
?line case case lists:keysearch(Key, 1, List) of
{value, _} ->
true;
_ ->
false
end of
true ->
ok;
false ->
error;
Other ->
test_server:fail({other_result, Other})
end,
?line search_any(Rest, List);
search_any([], _) ->
done.
case_in_after(suite) -> [];
case_in_after(Config) when is_list(Config) ->
receive
after case {x, y, z} of
{x, y, z} -> 0
end ->
ok
end,
ok.
catch_in_catch(doc) -> "Test a catch within a catch in the same function.";
catch_in_catch(suite) -> [];
catch_in_catch(Config) when is_list(Config) ->
?line {outer, inner_exit} = catcher(),
ok.
catcher() ->
case (catch
case (catch ?MODULE:non_existing()) of % bogus function
{'EXIT', _} ->
inner_exit;
Res1 ->
{inner, Res1}
end) of
{'EXIT', _} ->
outer_exit;
Res2 ->
{outer, Res2}
end.
bif_in_bif(doc) -> "Test a BIF call within a BIF call.";
bif_in_bif(suite) -> [];
bif_in_bif(Config) when is_list(Config) ->
Self = self(),
put(pid, Self),
Self = register_me(),
ok.
register_me() ->
register(?MODULE, Pid = get(pid)),
Pid.