diff options
Diffstat (limited to 'erts/emulator/test/nested_SUITE.erl')
-rw-r--r-- | erts/emulator/test/nested_SUITE.erl | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/erts/emulator/test/nested_SUITE.erl b/erts/emulator/test/nested_SUITE.erl new file mode 100644 index 0000000000..310892424e --- /dev/null +++ b/erts/emulator/test/nested_SUITE.erl @@ -0,0 +1,92 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1997-2009. 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/1, case_in_case/1, case_in_after/1, catch_in_catch/1, bif_in_bif/1]). + +-include("test_server.hrl"). + +all(suite) -> [case_in_case, case_in_after, catch_in_catch, bif_in_bif]. + +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. |