-module(crash_statem). %% we're only going to compile this on OTP 19+ -ifdef(test_statem). -behaviour(gen_statem). -export([ start/0, crash/0, stop/1, timeout/0, handle_event/4 ]). -export([terminate/3,code_change/4,init/1,callback_mode/0]). start() -> gen_statem:start({local,?MODULE}, ?MODULE, [], []). crash() -> gen_statem:call(?MODULE, boom). stop(Reason) -> gen_statem:call(?MODULE, {stop, Reason}). timeout() -> gen_statem:call(?MODULE, timeout). %% Mandatory callback functions terminate(_Reason, _State, _Data) -> ok. code_change(_Vsn, State, Data, _Extra) -> {ok,State,Data}. init([]) -> %% insert rant here about breaking changes in minor versions... case erlang:system_info(version) of "8.0" -> {callback_mode(),state1,undefined}; _ -> {ok, state1, undefined} end. callback_mode() -> handle_event_function. %%% state callback(s) handle_event(state_timeout, timeout, state1, _) -> {stop, timeout}; handle_event({call, _From}, timeout, _Arg, _Data) -> {keep_state_and_data, [{state_timeout, 0, timeout}]}; handle_event({call, _From}, {stop, Reason}, state1, _Data) -> {stop, Reason}. -else. -export([start/0, crash/0]). start() -> ok. crash() -> ok. -endif.