From 9f4d45da9bfa3b1f5d3d345e48447ad89088afc9 Mon Sep 17 00:00:00 2001 From: Lukas Larsson Date: Mon, 20 Sep 2010 15:40:27 +0200 Subject: Update framework callbacks to use end_tc/4 if available. end_tc/4 can return anything which init_tc/3 can, and also modify the COnfig variable when called from init_per_suite and init_per_group --- lib/common_test/src/ct_suite_callback.erl | 92 +++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 lib/common_test/src/ct_suite_callback.erl (limited to 'lib/common_test') diff --git a/lib/common_test/src/ct_suite_callback.erl b/lib/common_test/src/ct_suite_callback.erl new file mode 100644 index 0000000000..db4ac9a4ec --- /dev/null +++ b/lib/common_test/src/ct_suite_callback.erl @@ -0,0 +1,92 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2004-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% +%% + +%%% @doc Common Test Framework test execution control module. +%%% +%%%

This module is a proxy for calling and handling suite callbacks.

+ +-module(ct_suite_callback). + +%% API Exports +-export([init/1]). +-export([init_tc/3]). +-export([end_tc/4]). +-export([terminate/2]). + +-type proplist() :: [{atom(),term()}]. + +-define(config_name, suite_callbacks). + +%% API Functions + +%% @doc Called before any suites are started +-spec init(State :: term()) -> ok | + {error, Reason :: term()}. +init(Opts) -> + add_new_callbacks(Opts), + ok. + +%% @doc Called after all suites are done. +-spec terminate(Config :: proplist(),State :: term()) -> + ok. +terminate(Config, State) -> + ok. + +%% @doc Called as each test case is started. This includes all configuration +%% tests. +-spec init_tc(Mod :: atom(), Func :: atom(), Config :: proplist()) -> + {ok, NewConfig :: proplist()} | + {skip, Reason :: term()} | + {auto_skip, Reason :: term()} | + {error, Reason :: term()}. +init_tc(Mod, init_per_suite, Config) -> + add_new_callbacks(Config), + {ok, Config}; +init_tc(Mod, Func, Config) -> + {ok, Config}. + +%% @doc Called as each test case is completed. This includes all configuration +%% tests. +-spec end_tc(Mod :: atom(), + Func :: atom(), + Config :: proplist(), + Result :: term()) -> + {ok, NewConfig :: proplist()} | + {skip, Reason :: term()} | + {auto_skip, Reason :: term()} | + {error, Reason :: term()} | + ok. +end_tc(Mod, Func, Config, Result) -> + {ok, Config}. + + +%% Iternal Functions +add_new_callbacks(Config) -> + NewCBConfs = lists:flatmap(fun({?config_name, CallbackConfigs}) -> + CallbackConfigs; + (_) -> + [] + end, Config), + CBStates = lists:map(fun call_init/1,NewCBConfs), + ct_util:save_suite_data_async(?config_name, CBStates). + +call_init({Mod, Config}) -> + {Mod, Mod:init(Config)}. + + -- cgit v1.2.3