Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates > by-pkgid > 675c8c8167236dfcf8d66da674f931e8 > files > 238

erlang-doc-R15B-03.3.fc17.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css">
<title>Erlang -- Common Test Hooks</title>
</head>
<body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container">
<script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript">
            <!--
              function getWinHeight() {
                var myHeight = 0;
                if( typeof( window.innerHeight ) == 'number' ) {
                  //Non-IE
                  myHeight = window.innerHeight;
                } else if( document.documentElement && ( document.documentElement.clientWidth ||
                                                         document.documentElement.clientHeight ) ) {
                  //IE 6+ in 'standards compliant mode'
                  myHeight = document.documentElement.clientHeight;
                } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
                  //IE 4 compatible
                  myHeight = document.body.clientHeight;
                }
                return myHeight;
              }

              function setscrollpos() {
                var objf=document.getElementById('loadscrollpos');
                 document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2;
              }

              function addEvent(obj, evType, fn){
                if (obj.addEventListener){
                obj.addEventListener(evType, fn, true);
                return true;
              } else if (obj.attachEvent){
                var r = obj.attachEvent("on"+evType, fn);
                return r;
              } else {
                return false;
              }
             }

             addEvent(window, 'load', setscrollpos);

             //--></script><div id="leftnav"><div class="innertube">
<img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="users_guide.html">User's Guide</a><br><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/common_test-1.6.3.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>Common Test</strong><br><strong>Reference Manual</strong><br><small>Version 1.6.3</small></p>
<br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Table of Contents</strong></small></p>
<ul class="flipMenu">
<li id="no" title="common_test " expanded="false">common_test<ul>
<li><a href="common_test.html">
                  Top of manual page
                </a></li>
<li title="Module:all-0"><a href="common_test.html#Module:all-0">Module:all/0</a></li>
<li title="Module:groups-0"><a href="common_test.html#Module:groups-0">Module:groups/0</a></li>
<li title="Module:suite-0"><a href="common_test.html#Module:suite-0">Module:suite/0</a></li>
<li title="Module:init_per_suite-1"><a href="common_test.html#Module:init_per_suite-1">Module:init_per_suite/1</a></li>
<li title="Module:end_per_suite-1"><a href="common_test.html#Module:end_per_suite-1">Module:end_per_suite/1</a></li>
<li title="Module:group-1"><a href="common_test.html#Module:group-1">Module:group/1</a></li>
<li title="Module:init_per_group-2"><a href="common_test.html#Module:init_per_group-2">Module:init_per_group/2</a></li>
<li title="Module:end_per_group-2"><a href="common_test.html#Module:end_per_group-2">Module:end_per_group/2</a></li>
<li title="Module:init_per_testcase-2"><a href="common_test.html#Module:init_per_testcase-2">Module:init_per_testcase/2</a></li>
<li title="Module:end_per_testcase-2"><a href="common_test.html#Module:end_per_testcase-2">Module:end_per_testcase/2</a></li>
<li title="Module:Testcase-0"><a href="common_test.html#Module:Testcase-0">Module:Testcase/0</a></li>
<li title="Module:Testcase-1"><a href="common_test.html#Module:Testcase-1">Module:Testcase/1</a></li>
</ul>
</li>
<li title="ct_run"><a href="ct_run.html">ct_run</a></li>
<li id="no" title="ct " expanded="false">ct<ul>
<li><a href="ct.html">
                  Top of manual page
                </a></li>
<li title="abort_current_testcase-1"><a href="ct.html#abort_current_testcase-1">abort_current_testcase/1</a></li>
<li title="add_config-2"><a href="ct.html#add_config-2">add_config/2</a></li>
<li title="break-1"><a href="ct.html#break-1">break/1</a></li>
<li title="break-2"><a href="ct.html#break-2">break/2</a></li>
<li title="capture_get-0"><a href="ct.html#capture_get-0">capture_get/0</a></li>
<li title="capture_get-1"><a href="ct.html#capture_get-1">capture_get/1</a></li>
<li title="capture_start-0"><a href="ct.html#capture_start-0">capture_start/0</a></li>
<li title="capture_stop-0"><a href="ct.html#capture_stop-0">capture_stop/0</a></li>
<li title="comment-1"><a href="ct.html#comment-1">comment/1</a></li>
<li title="comment-2"><a href="ct.html#comment-2">comment/2</a></li>
<li title="continue-0"><a href="ct.html#continue-0">continue/0</a></li>
<li title="continue-1"><a href="ct.html#continue-1">continue/1</a></li>
<li title="decrypt_config_file-2"><a href="ct.html#decrypt_config_file-2">decrypt_config_file/2</a></li>
<li title="decrypt_config_file-3"><a href="ct.html#decrypt_config_file-3">decrypt_config_file/3</a></li>
<li title="encrypt_config_file-2"><a href="ct.html#encrypt_config_file-2">encrypt_config_file/2</a></li>
<li title="encrypt_config_file-3"><a href="ct.html#encrypt_config_file-3">encrypt_config_file/3</a></li>
<li title="fail-1"><a href="ct.html#fail-1">fail/1</a></li>
<li title="fail-2"><a href="ct.html#fail-2">fail/2</a></li>
<li title="get_config-1"><a href="ct.html#get_config-1">get_config/1</a></li>
<li title="get_config-2"><a href="ct.html#get_config-2">get_config/2</a></li>
<li title="get_config-3"><a href="ct.html#get_config-3">get_config/3</a></li>
<li title="get_status-0"><a href="ct.html#get_status-0">get_status/0</a></li>
<li title="get_target_name-1"><a href="ct.html#get_target_name-1">get_target_name/1</a></li>
<li title="get_timetrap_info-0"><a href="ct.html#get_timetrap_info-0">get_timetrap_info/0</a></li>
<li title="install-1"><a href="ct.html#install-1">install/1</a></li>
<li title="listenv-1"><a href="ct.html#listenv-1">listenv/1</a></li>
<li title="log-1"><a href="ct.html#log-1">log/1</a></li>
<li title="log-2"><a href="ct.html#log-2">log/2</a></li>
<li title="log-3"><a href="ct.html#log-3">log/3</a></li>
<li title="log-4"><a href="ct.html#log-4">log/4</a></li>
<li title="make_priv_dir-0"><a href="ct.html#make_priv_dir-0">make_priv_dir/0</a></li>
<li title="notify-2"><a href="ct.html#notify-2">notify/2</a></li>
<li title="pal-1"><a href="ct.html#pal-1">pal/1</a></li>
<li title="pal-2"><a href="ct.html#pal-2">pal/2</a></li>
<li title="pal-3"><a href="ct.html#pal-3">pal/3</a></li>
<li title="pal-4"><a href="ct.html#pal-4">pal/4</a></li>
<li title="parse_table-1"><a href="ct.html#parse_table-1">parse_table/1</a></li>
<li title="print-1"><a href="ct.html#print-1">print/1</a></li>
<li title="print-2"><a href="ct.html#print-2">print/2</a></li>
<li title="print-3"><a href="ct.html#print-3">print/3</a></li>
<li title="print-4"><a href="ct.html#print-4">print/4</a></li>
<li title="reload_config-1"><a href="ct.html#reload_config-1">reload_config/1</a></li>
<li title="remove_config-2"><a href="ct.html#remove_config-2">remove_config/2</a></li>
<li title="require-1"><a href="ct.html#require-1">require/1</a></li>
<li title="require-2"><a href="ct.html#require-2">require/2</a></li>
<li title="run-1"><a href="ct.html#run-1">run/1</a></li>
<li title="run-2"><a href="ct.html#run-2">run/2</a></li>
<li title="run-3"><a href="ct.html#run-3">run/3</a></li>
<li title="run_test-1"><a href="ct.html#run_test-1">run_test/1</a></li>
<li title="run_testspec-1"><a href="ct.html#run_testspec-1">run_testspec/1</a></li>
<li title="sleep-1"><a href="ct.html#sleep-1">sleep/1</a></li>
<li title="start_interactive-0"><a href="ct.html#start_interactive-0">start_interactive/0</a></li>
<li title="step-3"><a href="ct.html#step-3">step/3</a></li>
<li title="step-4"><a href="ct.html#step-4">step/4</a></li>
<li title="stop_interactive-0"><a href="ct.html#stop_interactive-0">stop_interactive/0</a></li>
<li title="sync_notify-2"><a href="ct.html#sync_notify-2">sync_notify/2</a></li>
<li title="testcases-2"><a href="ct.html#testcases-2">testcases/2</a></li>
<li title="timetrap-1"><a href="ct.html#timetrap-1">timetrap/1</a></li>
<li title="userdata-2"><a href="ct.html#userdata-2">userdata/2</a></li>
<li title="userdata-3"><a href="ct.html#userdata-3">userdata/3</a></li>
</ul>
</li>
<li id="no" title="ct_master " expanded="false">ct_master<ul>
<li><a href="ct_master.html">
                  Top of manual page
                </a></li>
<li title="abort-0"><a href="ct_master.html#abort-0">abort/0</a></li>
<li title="abort-1"><a href="ct_master.html#abort-1">abort/1</a></li>
<li title="basic_html-1"><a href="ct_master.html#basic_html-1">basic_html/1</a></li>
<li title="progress-0"><a href="ct_master.html#progress-0">progress/0</a></li>
<li title="run-1"><a href="ct_master.html#run-1">run/1</a></li>
<li title="run-3"><a href="ct_master.html#run-3">run/3</a></li>
<li title="run-4"><a href="ct_master.html#run-4">run/4</a></li>
<li title="run_on_node-2"><a href="ct_master.html#run_on_node-2">run_on_node/2</a></li>
<li title="run_on_node-3"><a href="ct_master.html#run_on_node-3">run_on_node/3</a></li>
<li title="run_test-2"><a href="ct_master.html#run_test-2">run_test/2</a></li>
</ul>
</li>
<li id="no" title="ct_cover " expanded="false">ct_cover<ul>
<li><a href="ct_cover.html">
                  Top of manual page
                </a></li>
<li title="add_nodes-1"><a href="ct_cover.html#add_nodes-1">add_nodes/1</a></li>
<li title="remove_nodes-1"><a href="ct_cover.html#remove_nodes-1">remove_nodes/1</a></li>
</ul>
</li>
<li id="no" title="ct_ftp " expanded="false">ct_ftp<ul>
<li><a href="ct_ftp.html">
                  Top of manual page
                </a></li>
<li title="cd-2"><a href="ct_ftp.html#cd-2">cd/2</a></li>
<li title="close-1"><a href="ct_ftp.html#close-1">close/1</a></li>
<li title="delete-2"><a href="ct_ftp.html#delete-2">delete/2</a></li>
<li title="get-3"><a href="ct_ftp.html#get-3">get/3</a></li>
<li title="ls-2"><a href="ct_ftp.html#ls-2">ls/2</a></li>
<li title="open-1"><a href="ct_ftp.html#open-1">open/1</a></li>
<li title="put-3"><a href="ct_ftp.html#put-3">put/3</a></li>
<li title="recv-2"><a href="ct_ftp.html#recv-2">recv/2</a></li>
<li title="recv-3"><a href="ct_ftp.html#recv-3">recv/3</a></li>
<li title="send-2"><a href="ct_ftp.html#send-2">send/2</a></li>
<li title="send-3"><a href="ct_ftp.html#send-3">send/3</a></li>
<li title="type-2"><a href="ct_ftp.html#type-2">type/2</a></li>
</ul>
</li>
<li id="no" title="ct_ssh " expanded="false">ct_ssh<ul>
<li><a href="ct_ssh.html">
                  Top of manual page
                </a></li>
<li title="apread-4"><a href="ct_ssh.html#apread-4">apread/4</a></li>
<li title="apread-5"><a href="ct_ssh.html#apread-5">apread/5</a></li>
<li title="apwrite-4"><a href="ct_ssh.html#apwrite-4">apwrite/4</a></li>
<li title="apwrite-5"><a href="ct_ssh.html#apwrite-5">apwrite/5</a></li>
<li title="aread-3"><a href="ct_ssh.html#aread-3">aread/3</a></li>
<li title="aread-4"><a href="ct_ssh.html#aread-4">aread/4</a></li>
<li title="awrite-3"><a href="ct_ssh.html#awrite-3">awrite/3</a></li>
<li title="awrite-4"><a href="ct_ssh.html#awrite-4">awrite/4</a></li>
<li title="close-2"><a href="ct_ssh.html#close-2">close/2</a></li>
<li title="close-3"><a href="ct_ssh.html#close-3">close/3</a></li>
<li title="connect-1"><a href="ct_ssh.html#connect-1">connect/1</a></li>
<li title="connect-2"><a href="ct_ssh.html#connect-2">connect/2</a></li>
<li title="connect-3"><a href="ct_ssh.html#connect-3">connect/3</a></li>
<li title="del_dir-2"><a href="ct_ssh.html#del_dir-2">del_dir/2</a></li>
<li title="del_dir-3"><a href="ct_ssh.html#del_dir-3">del_dir/3</a></li>
<li title="delete-2"><a href="ct_ssh.html#delete-2">delete/2</a></li>
<li title="delete-3"><a href="ct_ssh.html#delete-3">delete/3</a></li>
<li title="disconnect-1"><a href="ct_ssh.html#disconnect-1">disconnect/1</a></li>
<li title="exec-2"><a href="ct_ssh.html#exec-2">exec/2</a></li>
<li title="exec-3"><a href="ct_ssh.html#exec-3">exec/3</a></li>
<li title="exec-4"><a href="ct_ssh.html#exec-4">exec/4</a></li>
<li title="get_file_info-2"><a href="ct_ssh.html#get_file_info-2">get_file_info/2</a></li>
<li title="get_file_info-3"><a href="ct_ssh.html#get_file_info-3">get_file_info/3</a></li>
<li title="list_dir-2"><a href="ct_ssh.html#list_dir-2">list_dir/2</a></li>
<li title="list_dir-3"><a href="ct_ssh.html#list_dir-3">list_dir/3</a></li>
<li title="make_dir-2"><a href="ct_ssh.html#make_dir-2">make_dir/2</a></li>
<li title="make_dir-3"><a href="ct_ssh.html#make_dir-3">make_dir/3</a></li>
<li title="make_symlink-3"><a href="ct_ssh.html#make_symlink-3">make_symlink/3</a></li>
<li title="make_symlink-4"><a href="ct_ssh.html#make_symlink-4">make_symlink/4</a></li>
<li title="open-3"><a href="ct_ssh.html#open-3">open/3</a></li>
<li title="open-4"><a href="ct_ssh.html#open-4">open/4</a></li>
<li title="opendir-2"><a href="ct_ssh.html#opendir-2">opendir/2</a></li>
<li title="opendir-3"><a href="ct_ssh.html#opendir-3">opendir/3</a></li>
<li title="position-3"><a href="ct_ssh.html#position-3">position/3</a></li>
<li title="position-4"><a href="ct_ssh.html#position-4">position/4</a></li>
<li title="pread-4"><a href="ct_ssh.html#pread-4">pread/4</a></li>
<li title="pread-5"><a href="ct_ssh.html#pread-5">pread/5</a></li>
<li title="pwrite-4"><a href="ct_ssh.html#pwrite-4">pwrite/4</a></li>
<li title="pwrite-5"><a href="ct_ssh.html#pwrite-5">pwrite/5</a></li>
<li title="read-3"><a href="ct_ssh.html#read-3">read/3</a></li>
<li title="read-4"><a href="ct_ssh.html#read-4">read/4</a></li>
<li title="read_file-2"><a href="ct_ssh.html#read_file-2">read_file/2</a></li>
<li title="read_file-3"><a href="ct_ssh.html#read_file-3">read_file/3</a></li>
<li title="read_file_info-2"><a href="ct_ssh.html#read_file_info-2">read_file_info/2</a></li>
<li title="read_file_info-3"><a href="ct_ssh.html#read_file_info-3">read_file_info/3</a></li>
<li title="read_link-2"><a href="ct_ssh.html#read_link-2">read_link/2</a></li>
<li title="read_link-3"><a href="ct_ssh.html#read_link-3">read_link/3</a></li>
<li title="read_link_info-2"><a href="ct_ssh.html#read_link_info-2">read_link_info/2</a></li>
<li title="read_link_info-3"><a href="ct_ssh.html#read_link_info-3">read_link_info/3</a></li>
<li title="receive_response-2"><a href="ct_ssh.html#receive_response-2">receive_response/2</a></li>
<li title="receive_response-3"><a href="ct_ssh.html#receive_response-3">receive_response/3</a></li>
<li title="receive_response-4"><a href="ct_ssh.html#receive_response-4">receive_response/4</a></li>
<li title="rename-3"><a href="ct_ssh.html#rename-3">rename/3</a></li>
<li title="rename-4"><a href="ct_ssh.html#rename-4">rename/4</a></li>
<li title="send-3"><a href="ct_ssh.html#send-3">send/3</a></li>
<li title="send-4"><a href="ct_ssh.html#send-4">send/4</a></li>
<li title="send-5"><a href="ct_ssh.html#send-5">send/5</a></li>
<li title="send_and_receive-3"><a href="ct_ssh.html#send_and_receive-3">send_and_receive/3</a></li>
<li title="send_and_receive-4"><a href="ct_ssh.html#send_and_receive-4">send_and_receive/4</a></li>
<li title="send_and_receive-5"><a href="ct_ssh.html#send_and_receive-5">send_and_receive/5</a></li>
<li title="send_and_receive-6"><a href="ct_ssh.html#send_and_receive-6">send_and_receive/6</a></li>
<li title="session_close-2"><a href="ct_ssh.html#session_close-2">session_close/2</a></li>
<li title="session_open-1"><a href="ct_ssh.html#session_open-1">session_open/1</a></li>
<li title="session_open-2"><a href="ct_ssh.html#session_open-2">session_open/2</a></li>
<li title="sftp_connect-1"><a href="ct_ssh.html#sftp_connect-1">sftp_connect/1</a></li>
<li title="subsystem-3"><a href="ct_ssh.html#subsystem-3">subsystem/3</a></li>
<li title="subsystem-4"><a href="ct_ssh.html#subsystem-4">subsystem/4</a></li>
<li title="write-3"><a href="ct_ssh.html#write-3">write/3</a></li>
<li title="write-4"><a href="ct_ssh.html#write-4">write/4</a></li>
<li title="write_file-3"><a href="ct_ssh.html#write_file-3">write_file/3</a></li>
<li title="write_file-4"><a href="ct_ssh.html#write_file-4">write_file/4</a></li>
<li title="write_file_info-3"><a href="ct_ssh.html#write_file_info-3">write_file_info/3</a></li>
<li title="write_file_info-4"><a href="ct_ssh.html#write_file_info-4">write_file_info/4</a></li>
</ul>
</li>
<li id="no" title="ct_netconfc " expanded="false">ct_netconfc<ul>
<li><a href="ct_netconfc.html">
                  Top of manual page
                </a></li>
<li title="action-2"><a href="ct_netconfc.html#action-2">action/2</a></li>
<li title="action-3"><a href="ct_netconfc.html#action-3">action/3</a></li>
<li title="close_session-1"><a href="ct_netconfc.html#close_session-1">close_session/1</a></li>
<li title="close_session-2"><a href="ct_netconfc.html#close_session-2">close_session/2</a></li>
<li title="copy_config-3"><a href="ct_netconfc.html#copy_config-3">copy_config/3</a></li>
<li title="copy_config-4"><a href="ct_netconfc.html#copy_config-4">copy_config/4</a></li>
<li title="create_subscription-1"><a href="ct_netconfc.html#create_subscription-1">create_subscription/1</a></li>
<li title="create_subscription-2"><a href="ct_netconfc.html#create_subscription-2">create_subscription/2</a></li>
<li title="create_subscription-3"><a href="ct_netconfc.html#create_subscription-3">create_subscription/3</a></li>
<li title="create_subscription-4"><a href="ct_netconfc.html#create_subscription-4">create_subscription/4</a></li>
<li title="create_subscription-5"><a href="ct_netconfc.html#create_subscription-5">create_subscription/5</a></li>
<li title="create_subscription-6"><a href="ct_netconfc.html#create_subscription-6">create_subscription/6</a></li>
<li title="delete_config-2"><a href="ct_netconfc.html#delete_config-2">delete_config/2</a></li>
<li title="delete_config-3"><a href="ct_netconfc.html#delete_config-3">delete_config/3</a></li>
<li title="edit_config-3"><a href="ct_netconfc.html#edit_config-3">edit_config/3</a></li>
<li title="edit_config-4"><a href="ct_netconfc.html#edit_config-4">edit_config/4</a></li>
<li title="format_data-2"><a href="ct_netconfc.html#format_data-2">format_data/2</a></li>
<li title="get-2"><a href="ct_netconfc.html#get-2">get/2</a></li>
<li title="get-3"><a href="ct_netconfc.html#get-3">get/3</a></li>
<li title="get_capabilities-1"><a href="ct_netconfc.html#get_capabilities-1">get_capabilities/1</a></li>
<li title="get_capabilities-2"><a href="ct_netconfc.html#get_capabilities-2">get_capabilities/2</a></li>
<li title="get_config-3"><a href="ct_netconfc.html#get_config-3">get_config/3</a></li>
<li title="get_config-4"><a href="ct_netconfc.html#get_config-4">get_config/4</a></li>
<li title="get_event_streams-2"><a href="ct_netconfc.html#get_event_streams-2">get_event_streams/2</a></li>
<li title="get_event_streams-3"><a href="ct_netconfc.html#get_event_streams-3">get_event_streams/3</a></li>
<li title="get_session_id-1"><a href="ct_netconfc.html#get_session_id-1">get_session_id/1</a></li>
<li title="get_session_id-2"><a href="ct_netconfc.html#get_session_id-2">get_session_id/2</a></li>
<li title="handle_msg-2"><a href="ct_netconfc.html#handle_msg-2">handle_msg/2</a></li>
<li title="hello-1"><a href="ct_netconfc.html#hello-1">hello/1</a></li>
<li title="hello-2"><a href="ct_netconfc.html#hello-2">hello/2</a></li>
<li title="kill_session-2"><a href="ct_netconfc.html#kill_session-2">kill_session/2</a></li>
<li title="kill_session-3"><a href="ct_netconfc.html#kill_session-3">kill_session/3</a></li>
<li title="lock-2"><a href="ct_netconfc.html#lock-2">lock/2</a></li>
<li title="lock-3"><a href="ct_netconfc.html#lock-3">lock/3</a></li>
<li title="only_open-1"><a href="ct_netconfc.html#only_open-1">only_open/1</a></li>
<li title="only_open-2"><a href="ct_netconfc.html#only_open-2">only_open/2</a></li>
<li title="open-1"><a href="ct_netconfc.html#open-1">open/1</a></li>
<li title="open-2"><a href="ct_netconfc.html#open-2">open/2</a></li>
<li title="unlock-2"><a href="ct_netconfc.html#unlock-2">unlock/2</a></li>
<li title="unlock-3"><a href="ct_netconfc.html#unlock-3">unlock/3</a></li>
</ul>
</li>
<li id="no" title="ct_rpc " expanded="false">ct_rpc<ul>
<li><a href="ct_rpc.html">
                  Top of manual page
                </a></li>
<li title="app_node-2"><a href="ct_rpc.html#app_node-2">app_node/2</a></li>
<li title="app_node-3"><a href="ct_rpc.html#app_node-3">app_node/3</a></li>
<li title="app_node-4"><a href="ct_rpc.html#app_node-4">app_node/4</a></li>
<li title="call-4"><a href="ct_rpc.html#call-4">call/4</a></li>
<li title="call-5"><a href="ct_rpc.html#call-5">call/5</a></li>
<li title="call-6"><a href="ct_rpc.html#call-6">call/6</a></li>
<li title="cast-4"><a href="ct_rpc.html#cast-4">cast/4</a></li>
<li title="cast-5"><a href="ct_rpc.html#cast-5">cast/5</a></li>
</ul>
</li>
<li id="no" title="ct_snmp " expanded="false">ct_snmp<ul>
<li><a href="ct_snmp.html">
                  Top of manual page
                </a></li>
<li title="get_next_values-3"><a href="ct_snmp.html#get_next_values-3">get_next_values/3</a></li>
<li title="get_values-3"><a href="ct_snmp.html#get_values-3">get_values/3</a></li>
<li title="load_mibs-1"><a href="ct_snmp.html#load_mibs-1">load_mibs/1</a></li>
<li title="register_agents-2"><a href="ct_snmp.html#register_agents-2">register_agents/2</a></li>
<li title="register_users-2"><a href="ct_snmp.html#register_users-2">register_users/2</a></li>
<li title="register_usm_users-2"><a href="ct_snmp.html#register_usm_users-2">register_usm_users/2</a></li>
<li title="set_info-1"><a href="ct_snmp.html#set_info-1">set_info/1</a></li>
<li title="set_values-4"><a href="ct_snmp.html#set_values-4">set_values/4</a></li>
<li title="start-2"><a href="ct_snmp.html#start-2">start/2</a></li>
<li title="start-3"><a href="ct_snmp.html#start-3">start/3</a></li>
<li title="stop-1"><a href="ct_snmp.html#stop-1">stop/1</a></li>
<li title="unregister_agents-1"><a href="ct_snmp.html#unregister_agents-1">unregister_agents/1</a></li>
<li title="unregister_users-1"><a href="ct_snmp.html#unregister_users-1">unregister_users/1</a></li>
<li title="update_usm_users-2"><a href="ct_snmp.html#update_usm_users-2">update_usm_users/2</a></li>
</ul>
</li>
<li id="no" title="ct_telnet " expanded="false">ct_telnet<ul>
<li><a href="ct_telnet.html">
                  Top of manual page
                </a></li>
<li title="close-1"><a href="ct_telnet.html#close-1">close/1</a></li>
<li title="cmd-2"><a href="ct_telnet.html#cmd-2">cmd/2</a></li>
<li title="cmd-3"><a href="ct_telnet.html#cmd-3">cmd/3</a></li>
<li title="cmdf-3"><a href="ct_telnet.html#cmdf-3">cmdf/3</a></li>
<li title="cmdf-4"><a href="ct_telnet.html#cmdf-4">cmdf/4</a></li>
<li title="cont_log-2"><a href="ct_telnet.html#cont_log-2">cont_log/2</a></li>
<li title="end_log-0"><a href="ct_telnet.html#end_log-0">end_log/0</a></li>
<li title="expect-2"><a href="ct_telnet.html#expect-2">expect/2</a></li>
<li title="expect-3"><a href="ct_telnet.html#expect-3">expect/3</a></li>
<li title="get_data-1"><a href="ct_telnet.html#get_data-1">get_data/1</a></li>
<li title="open-1"><a href="ct_telnet.html#open-1">open/1</a></li>
<li title="open-2"><a href="ct_telnet.html#open-2">open/2</a></li>
<li title="open-3"><a href="ct_telnet.html#open-3">open/3</a></li>
<li title="open-4"><a href="ct_telnet.html#open-4">open/4</a></li>
<li title="send-2"><a href="ct_telnet.html#send-2">send/2</a></li>
<li title="sendf-3"><a href="ct_telnet.html#sendf-3">sendf/3</a></li>
</ul>
</li>
<li title="unix_telnet"><a href="unix_telnet.html">unix_telnet</a></li>
<li id="no" title="ct_slave " expanded="false">ct_slave<ul>
<li><a href="ct_slave.html">
                  Top of manual page
                </a></li>
<li title="start-1"><a href="ct_slave.html#start-1">start/1</a></li>
<li title="start-2"><a href="ct_slave.html#start-2">start/2</a></li>
<li title="start-3"><a href="ct_slave.html#start-3">start/3</a></li>
<li title="stop-1"><a href="ct_slave.html#stop-1">stop/1</a></li>
<li title="stop-2"><a href="ct_slave.html#stop-2">stop/2</a></li>
</ul>
</li>
<li id="loadscrollpos" title="ct_hooks " expanded="true">ct_hooks<ul>
<li><a href="ct_hooks.html">
                  Top of manual page
                </a></li>
<li title="Module:init-2"><a href="ct_hooks.html#Module:init-2">Module:init/2</a></li>
<li title="Module:pre_init_per_suite-3"><a href="ct_hooks.html#Module:pre_init_per_suite-3">Module:pre_init_per_suite/3</a></li>
<li title="Module:post_init_per_suite-4"><a href="ct_hooks.html#Module:post_init_per_suite-4">Module:post_init_per_suite/4</a></li>
<li title="Module:pre_init_per_group-3"><a href="ct_hooks.html#Module:pre_init_per_group-3">Module:pre_init_per_group/3</a></li>
<li title="Module:post_init_per_group-4"><a href="ct_hooks.html#Module:post_init_per_group-4">Module:post_init_per_group/4</a></li>
<li title="Module:pre_init_per_testcase-3"><a href="ct_hooks.html#Module:pre_init_per_testcase-3">Module:pre_init_per_testcase/3</a></li>
<li title="Module:post_end_per_testcase-4"><a href="ct_hooks.html#Module:post_end_per_testcase-4">Module:post_end_per_testcase/4</a></li>
<li title="Module:pre_end_per_group-3"><a href="ct_hooks.html#Module:pre_end_per_group-3">Module:pre_end_per_group/3</a></li>
<li title="Module:post_end_per_group-4"><a href="ct_hooks.html#Module:post_end_per_group-4">Module:post_end_per_group/4</a></li>
<li title="Module:pre_end_per_suite-3"><a href="ct_hooks.html#Module:pre_end_per_suite-3">Module:pre_end_per_suite/3</a></li>
<li title="Module:post_end_per_suite-4"><a href="ct_hooks.html#Module:post_end_per_suite-4">Module:post_end_per_suite/4</a></li>
<li title="Module:on_tc_fail-3"><a href="ct_hooks.html#Module:on_tc_fail-3">Module:on_tc_fail/3</a></li>
<li title="Module:on_tc_skip-3"><a href="ct_hooks.html#Module:on_tc_skip-3">Module:on_tc_skip/3</a></li>
<li title="Module:terminate-1"><a href="ct_hooks.html#Module:terminate-1">Module:terminate/1</a></li>
<li title="Module:id-1"><a href="ct_hooks.html#Module:id-1">Module:id/1</a></li>
</ul>
</li>
</ul>
</div></div>
<div id="content">
<div class="innertube">
<!-- refpage --><center><h1>ct_hooks</h1></center>
  
  <h3>MODULE</h3>
<div class="REFBODY">ct_hooks</div> 
  <h3>MODULE SUMMARY</h3>
<div class="REFBODY">A callback interface on top of Common Test</div>

  <h3>DESCRIPTION</h3>
<div class="REFBODY"><p>

    <p>The <strong>Common Test Hook</strong> (henceforth called CTH) framework allows 
      extensions of the default behaviour of Common Test by means of callbacks 
      before and after all test suite calls. It is meant for advanced users of
      Common Test which want to abstract out behaviour which is common to
      multiple test suites. </p>

    <p>In brief, Common Test Hooks allows you to:</p>

    <ul>
      <li>Manipulate the runtime config before each suite 
      configuration call</li>
      <li>Manipulate the return of all suite configuration calls and in 
      extension the result of the test themselves.</li>
    </ul>
    
    <p>The following sections describe the mandatory and optional CTH
    functions Common Test will call during test execution. For more details
    see <span class="bold_code"><a href="ct_hooks_chapter.html">Common Test Hooks</a></span> in 
    the User's Guide.</p>

    <p>For information about how to add a CTH to your suite see 
    <span class="bold_code"><a href="ct_hooks_chapter.html#installing">Installing a CTH
    </a></span> in the User's Guide.</p>

    <div class="note">
<div class="label">Note</div>
<div class="content"><p><p>See the
	<span class="bold_code"><a href="ct_hooks_chapter.html#example">Example CTH</a></span>
	in the User's Guide for a minimal example of a CTH. </p></p></div>
</div>
    
  </p></div>

  <h3><a name="id103088">CALLBACK FUNCTIONS</a></h3>
<div class="REFBODY">
    
    <p>The following functions define the callback interface
      for a Common Test Hook.</p>
  </div>
  
  <h3>EXPORTS</h3>
    <p><a name="Module:init-2"><span class="bold_code">Module:init(Id, Opts) -&gt; {ok, State} | 
      {ok, State, Priority}</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">Id = reference() | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Opts = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">State = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Priority = integer()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> MANDATORY </p>

	<p>Always called before any other callback function. 
	  Use this to initiate any common state. 
	  It should return a state for this CTH.</p>

	<p><span class="code">Id</span> is the return value of 
	  <span class="bold_code"><a href="#Module:id-1">id/1</a></span>, or a <span class="code">reference</span>
	  (created using 
	  <span class="bold_code"><a href="javascript:erlhref('../../../../doc/../','erts','erlang.html#make_ref-0');">make_ref/0</a></span>)
	  if <span class="bold_code"><a href="#Module:id-1">id/1</a></span> is not implemented.
	</p>

	<p><span class="code">Priority</span> is the relative priority of this hook. Hooks with a
	lower priority will be executed first. If no priority is given, 
	it will be set to 0. </p>

	<p>For details about when init is called see
	  <span class="bold_code"><a href="ct_hooks_chapter.html#scope">scope</a></span>
	  in the User's Guide.</p>
	      
      </p></div>

    <p><a name="Module:pre_init_per_suite-3"><span class="bold_code">Module:pre_init_per_suite(SuiteName, InitData, CTHState) -&gt;
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">SuiteName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">InitData = Config | SkipOrFail</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = NewConfig = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {Return, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Return = NewConfig | SkipOrFail</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail, Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called before 
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">
	  init_per_suite</a></span> if it exists. 
	It typically contains initialization/logging which needs to be done 
	before init_per_suite is called. 
	If <span class="code">{skip,Reason}</span> or <span class="code">{fail,Reason}</span> is returned, 
	init_per_suite and all test cases of the suite will be skipped and
	Reason printed in the overview log of the suite.</p>
	
	<p><span class="code">SuiteName</span> is the name of the suite to be run.</p>

	<p><span class="code">InitData</span> is the original config list of the test suite, or
	a <span class="code">SkipOrFail</span> tuple if a previous CTH has returned this.</p>

	<p><span class="code">CTHState</span> is the current internal state of the CTH.</p>

	<p><span class="code">Return</span> is the result of the init_per_suite function.
	If it is <span class="code">{skip,Reason}</span> or <span class="code">{fail,Reason}</span> 
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">init_per_suite
	</a></span> will never be called, instead the initiation is considered 
	to be skipped/failed respectively. If a <span class="code">NewConfig</span> list
	is returned, <span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">
	init_per_suite</a></span> will be called with that <span class="code">NewConfig</span> list.
	See <span class="bold_code"><a href="ct_hooks_chapter.html#pre">
	Pre Hooks</a></span> in the User's Guide for more details.</p>
	
	
	<p>Note that this function is only called if the CTH has been added 
	before init_per_suite is run, see 
	<span class="bold_code"><a href="ct_hooks_chapter.html#scope">CTH Scoping</a></span> 
	in the User's Guide for details.</p>
      </p></div>
    
    <p><a name="Module:post_init_per_suite-4"><span class="bold_code">Module:post_init_per_suite(SuiteName, Config, Return, CTHState) -&gt; 
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">SuiteName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Return = NewReturn = Config | SkipOrFail | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail, Reason} | {skip, Reason} | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewReturn, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called after
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">
	  init_per_suite</a></span> if it exists. It typically contains extra 
	checks to make sure that all the correct dependencies have
	been started correctly.</p>
	
	<p><span class="code">Return</span> is what 
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">init_per_suite
	</a></span> returned, i.e. {fail,Reason}, {skip,Reason}, a <span class="code">Config</span>
	list or a term describing how 
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">init_per_suite
	</a></span> failed.</p>

	<p><span class="code">NewReturn</span> is the possibly modified return value of
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">init_per_suite
	</a></span>. It is here possible to recover from a failure in 
	<span class="bold_code"><a href="common_test.html#Module:init_per_suite-1">init_per_suite
	</a></span> by returning the <span class="code">ConfigList</span> with the <span class="code">tc_status</span>
	element removed. See <span class="bold_code"><a href="ct_hooks_chapter.html#post">
	Post Hooks</a></span> in the User's Guide for more details.</p>

	<p><span class="code">CTHState</span> is the current internal state of the CTH.</p>

	<p>Note that this function is only called if the CTH has been added 
	before or in init_per_suite, see 
	<span class="bold_code"><a href="ct_hooks_chapter.html#scope">CTH Scoping</a></span> 
	in the User's Guide for details.</p>
      </p></div>
    
    <p><a name="Module:pre_init_per_group-3"><span class="bold_code">Module:pre_init_per_group(GroupName, InitData, CTHState) -&gt;
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">GroupName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">InitData = Config | SkipOrFail</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = NewConfig = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewConfig | SkipOrFail, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>
	
	<p>This function is called before
	<span class="bold_code"><a href="common_test.html#Module:init_per_group-2">
	  init_per_group</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:pre_init_per_suite-3">
	pre_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:init_per_group-2">
	init_per_group</a></span> instead.</p>
      </p></div>
    
    <p><a name="Module:post_init_per_group-4"><span class="bold_code">Module:post_init_per_group(GroupName, Config, Return, CTHState) -&gt; 
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">GroupName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Return = NewReturn = Config | SkipOrFail | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewReturn, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called after
	<span class="bold_code"><a href="common_test.html#Module:init_per_group-2">
	  init_per_group</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:post_init_per_suite-4">
	post_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:init_per_group-2">
	init_per_group</a></span> instead.</p>
      </p></div>

    <p><a name="Module:pre_init_per_testcase-3"><span class="bold_code">Module:pre_init_per_testcase(TestcaseName, InitData, CTHState) -&gt;
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">TestcaseName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">InitData = Config | SkipOrFail</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = NewConfig = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewConfig | SkipOrFail, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called before
	<span class="bold_code"><a href="common_test.html#Module:init_per_testcase-2">
	  init_per_testcase</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:pre_init_per_suite-3">
	pre_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:init_per_testcase-2">
	init_per_testcase</a></span> function instead.</p>

	<p>Note that it is not possible to add CTH's here right now, 
	that feature might be added later, 
	but it would right now break backwards compatibility.</p>
      </p></div>

    <p><a name="Module:post_end_per_testcase-4"><span class="bold_code">Module:post_end_per_testcase(TestcaseName, Config, Return, CTHState)
               -&gt; Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">TestcaseName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Return = NewReturn = Config | SkipOrFail | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewReturn, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called after
	<span class="bold_code"><a href="common_test.html#Module:end_per_testcase-2">
	  end_per_testcase</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:post_init_per_suite-4">
	post_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:end_per_testcase-2">
	end_per_testcase</a></span> function instead.</p>
      </p></div>

    <p><a name="Module:pre_end_per_group-3"><span class="bold_code">Module:pre_end_per_group(GroupName, EndData, CTHState) -&gt;
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">GroupName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">EndData = Config | SkipOrFail</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = NewConfig = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewConfig | SkipOrFail, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>
	
	<p>This function is called before
	<span class="bold_code"><a href="common_test.html#Module:end_per_group-2">
	end_per_group</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:pre_init_per_suite-3">
	pre_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:end_per_group-2">
	end_per_group</a></span> function instead.</p>
      </p></div>

    <p><a name="Module:post_end_per_group-4"><span class="bold_code">Module:post_end_per_group(GroupName, Config, Return, CTHState) -&gt; 
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">GroupName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Return = NewReturn = Config | SkipOrFail | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewReturn, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called after
	<span class="bold_code"><a href="common_test.html#Module:end_per_group-2">
	  end_per_group</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:post_init_per_suite-4">
	post_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:end_per_group-2">
	end_per_group</a></span> function instead.</p>
      </p></div>

    <p><a name="Module:pre_end_per_suite-3"><span class="bold_code">Module:pre_end_per_suite(SuiteName, EndData, CTHState) -&gt;
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">SuiteName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">EndData = Config | SkipOrFail</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = NewConfig = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewConfig | SkipOrFail, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called before
	<span class="bold_code"><a href="common_test.html#Module:end_per_suite-1">
	  end_per_suite</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:pre_init_per_suite-3">
	pre_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:end_per_suite-1">
	end_per_suite</a></span> function instead.</p>
      </p></div>

    <p><a name="Module:post_end_per_suite-4"><span class="bold_code">Module:post_end_per_suite(SuiteName, Config, Return, CTHState) -&gt; 
              Result</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">SuiteName = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Config = [{Key,Value}]</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Return = NewReturn = Config | SkipOrFail | term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">SkipOrFail = {fail,Reason} | {skip, Reason}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Result = {NewReturn, NewCTHState}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Key = atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Value = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called after
	<span class="bold_code"><a href="common_test.html#Module:end_per_suite-1">
	  end_per_suite</a></span> if it exists. It behaves the same way as 
	<span class="bold_code"><a href="ct_hooks.html#Module:post_init_per_suite-4">
	post_init_per_suite</a></span>, but for the
	<span class="bold_code"><a href="common_test.html#Module:end_per_suite-1">
	end_per_suite</a></span> function instead.</p>
      </p></div>

    <p><a name="Module:on_tc_fail-3"><span class="bold_code">Module:on_tc_fail(TestcaseName, Reason, CTHState) -&gt; 
              NewCTHState</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">TestcaseName = init_per_suite | end_per_suite | 
	                  init_per_group | end_per_group | atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called whenever a testcase fails. 
	It is called after the post function has been called for 
	the testcase which failed. i.e. 
	if init_per_suite fails this function is called after 
	<span class="bold_code"><a href="#Module:post_init_per_suite-4">
	  post_init_per_suite</a></span>, and if a testcase fails it is called 
	  after <span class="bold_code"><a href="#Module:post_end_per_testcase-4">
	  post_end_per_testcase</a></span>.</p>

	<p>The data which comes with the Reason follows the same format as the
	<span class="bold_code"><a href="event_handler_chapter.html#failreason">FailReason
	</a></span> in the <span class="bold_code"><a href="event_handler_chapter.html#tc_done">tc_done</a></span> event.
	See <span class="bold_code"><a href="event_handler_chapter.html#events">Event Handling
	</a></span> in the User's Guide for details.</p>
      </p></div>

    <p><a name="Module:on_tc_skip-3"><span class="bold_code">Module:on_tc_skip(TestcaseName, Reason, CTHState) -&gt; 
              NewCTHState</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">TestcaseName = end_per_suite | init_per_group | 
                          end_per_group | atom()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Reason = {tc_auto_skip | tc_user_skip, term()}</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">CTHState = NewCTHState = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called whenever a testcase is skipped. 
	It is called after the post function has been called for the 
	testcase which was skipped. 
	i.e. if init_per_group is skipped this function is called after 
	<span class="bold_code"><a href="#Module:post_init_per_suite-4">post_init_per_group
	</a></span>, and if a testcase is skipped it is called after 
	<span class="bold_code"><a href="#Module:post_end_per_testcase-4">post_end_per_testcase
	</a></span>.</p>

	<p>The data which comes with the Reason follows the same format as 
	<span class="bold_code"><a href="event_handler_chapter.html#tc_auto_skip">tc_auto_skip
	</a></span> and <span class="bold_code"><a href="event_handler_chapter.html#tc_user_skip">
	tc_user_skip</a></span> events.
	See <span class="bold_code"><a href="event_handler_chapter.html#events">Event Handling
	</a></span> in the User's Guide for details.</p>
      </p></div>

    <p><a name="Module:terminate-1"><span class="bold_code">Module:terminate(CTHState)</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">CTHState = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>	
	<p> OPTIONAL </p>

	<p>This function is called at the end of a CTH's 
	<span class="bold_code"><a href="ct_hooks_chapter.html#scope">scope</a></span>. 
	</p>
      </p></div>

    <p><a name="Module:id-1"><span class="bold_code">Module:id(Opts) -&gt; Id</span></a><br></p>
<div class="REFBODY">
<p>Types:</p>
	<div class="REFTYPES">
<span class="bold_code">Opts = term()</span><br>
</div>
	<div class="REFTYPES">
<span class="bold_code">Id = term()</span><br>
</div>
      </div>
<div class="REFBODY"><p>
	<p> OPTIONAL </p>
	
	<p>The <span class="code">Id</span> is used to uniquely identify a CTH instance, 
	if two CTH's return the same <span class="code">Id</span> the second CTH is ignored
	and subsequent calls to the CTH will only be made to the first
	instance. For more information see 
	<span class="bold_code"><a href="ct_hooks_chapter.html#installing">Installing a CTH
	</a></span> in the User's Guide.
        </p>

	<p>This function should NOT have any side effects as it might 
	be called multiple times by Common Test.</p>
	
	<p>If not implemented the CTH will act as if this function returned a
	  call to <span class="code">make_ref/0</span>.</p>
      </p></div>

  

</div>
<div class="footer">
<hr>
<p>Copyright © 2003-2012 Ericsson AB. All Rights Reserved.</p>
</div>
</div>
</div></body>
</html>