1-module(cth_readable_nosasl).
2
3%% Callbacks
4-export([id/1]).
5-export([init/2]).
6
7-export([pre_init_per_suite/3]).
8-export([post_init_per_suite/4]).
9-export([pre_end_per_suite/3]).
10-export([post_end_per_suite/4]).
11
12-export([pre_init_per_group/3]).
13-export([post_init_per_group/4]).
14-export([pre_end_per_group/3]).
15-export([post_end_per_group/4]).
16
17-export([pre_init_per_testcase/3]).
18-export([post_end_per_testcase/4]).
19
20-export([on_tc_fail/3]).
21-export([on_tc_skip/3, on_tc_skip/4]).
22
23-export([terminate/1]).
24
25%% @doc Return a unique id for this CTH.
26id(_Opts) ->
27    {?MODULE, make_ref()}.
28
29%% @doc Always called before any other callback function. Use this to initiate
30%% any common state.
31init(_Id, _Opts) ->
32    application:load(sasl), % TODO do this optionally?
33    Res = application:get_env(sasl, sasl_error_logger),
34    application:set_env(sasl, sasl_error_logger, false),
35    {ok, Res}.
36
37%% @doc Called before init_per_suite is called.
38pre_init_per_suite(_Suite,Config,State) ->
39    {Config, State}.
40
41%% @doc Called after init_per_suite.
42post_init_per_suite(_Suite,_Config,Return,State) ->
43    {Return, State}.
44
45%% @doc Called before end_per_suite.
46pre_end_per_suite(_Suite,Config,State) ->
47    {Config, State}.
48
49%% @doc Called after end_per_suite.
50post_end_per_suite(_Suite,_Config,Return,State) ->
51    {Return, State}.
52
53%% @doc Called before each init_per_group.
54pre_init_per_group(_Group,Config,State) ->
55    {Config, State}.
56
57%% @doc Called after each init_per_group.
58post_init_per_group(_Group,_Config,Return,State) ->
59    {Return, State}.
60
61%% @doc Called after each end_per_group.
62pre_end_per_group(_Group,Config,State) ->
63    {Config, State}.
64
65%% @doc Called after each end_per_group.
66post_end_per_group(_Group,_Config,Return,State) ->
67    {Return, State}.
68
69%% @doc Called before each test case.
70pre_init_per_testcase(_TC,Config,State) ->
71    {Config, State}.
72
73%% @doc Called after each test case.
74post_end_per_testcase(_TC,_Config,Error,State) ->
75    {Error, State}.
76
77%% @doc Called after post_init_per_suite, post_end_per_suite, post_init_per_group,
78%% post_end_per_group and post_end_per_testcase if the suite, group or test case failed.
79on_tc_fail(_TC, _Reason, State) ->
80    State.
81
82%% @doc Called when a test case is skipped by either user action
83%% or due to an init function failing. (>= 19.3)
84on_tc_skip(_Suite, _TC, _Reason, State) ->
85    State.
86%% @doc Called when a test case is skipped by either user action
87%% or due to an init function failing. (Pre-19.3)
88on_tc_skip(_TC, _Reason, State) ->
89    State.
90
91%% @doc Called when the scope of the CTH is done
92terminate(Env) ->
93    case Env of
94        {ok, Val} ->
95            application:set_env(sasl, sasl_error_logger, Val);
96        undefined ->
97            application:unset_env(sasl, sasl_error_logger)
98    end,
99    application:unload(sasl), % silently fails if running
100    ok.
101