summaryrefslogtreecommitdiff
path: root/lib/common_test/doc/src/common_test_app.xml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common_test/doc/src/common_test_app.xml')
-rw-r--r--lib/common_test/doc/src/common_test_app.xml557
1 files changed, 0 insertions, 557 deletions
diff --git a/lib/common_test/doc/src/common_test_app.xml b/lib/common_test/doc/src/common_test_app.xml
index 3fcbda538a..07a2a3e2cd 100644
--- a/lib/common_test/doc/src/common_test_app.xml
+++ b/lib/common_test/doc/src/common_test_app.xml
@@ -52,564 +52,7 @@
<item>Step-by-step execution of test cases</item>
</list>
- <p>The following section describes the mandatory and optional test suite
- functions that <c>Common Test</c> calls during test execution.
- For more details, see section
- <seeguide marker="write_test_chapter">Writing Test Suites</seeguide>
- in the User's Guide.</p>
-
</description>
-
-
- <funcs>
- <fsdescription>
- <title>Test Case Callback Functions</title>
- <p>The following functions define the callback interface
- for a test suite.</p>
- </fsdescription>
- <func>
- <name since="">Module:all() -> Tests | {skip,Reason} </name>
- <fsummary>Returns the list of all test case groups and test cases
- in the module.</fsummary>
- <type>
- <v>Tests = [TestCase | {testcase,TestCase,TCRepeatProps} | {group,GroupName} | {group,GroupName,Properties} | {group,GroupName,Properties,SubGroups}]</v>
- <v>TestCase = atom()</v>
- <v>TCRepeatProps = [{repeat,N} | {repeat_until_ok,N} | {repeat_until_fail,N}]</v>
- <v>GroupName = atom()</v>
- <v>Properties = [parallel | sequence | Shuffle | {GroupRepeatType,N}] | default</v>
- <v>SubGroups = [{GroupName,Properties} | {GroupName,Properties,SubGroups}]</v>
- <v>Shuffle = shuffle | {shuffle,Seed}</v>
- <v>Seed = {integer(),integer(),integer()}</v>
- <v>GroupRepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | repeat_until_any_ok | repeat_until_any_fail</v>
- <v>N = integer() | forever</v>
- <v>Reason = term()</v>
- </type>
-
- <desc>
- <p>MANDATORY</p>
-
- <p>Returns the list of all test cases and test case groups in the
- test suite module to be executed. This list also specifies the
- order the cases and groups are executed by <c>Common Test</c>.
- A test case is represented by an atom,
- the name of the test case function, or a <c>testcase</c> tuple
- indicating that the test case shall be repeated. A test case group is
- represented by a <c>group</c> tuple, where <c>GroupName</c>,
- an atom, is the name of the group (defined in
- <seemfa marker="#Module:groups/0"><c>groups/0</c></seemfa>).
- Execution properties for groups can also be specified, both
- for a top-level group and for any of its subgroups.
- Group execution properties specified here override
- properties in the group definition (see
- <seemfa marker="#Module:groups/0"><c>groups/0</c></seemfa>).
- (With value <c>default</c>, the group definition properties
- are used).</p>
-
- <p>If <c>{skip,Reason}</c> is returned, all test cases
- in the module are skipped and <c>Reason</c>
- is printed on the HTML result page.</p>
-
- <p>For details on groups, see section
- <seeguide marker="write_test_chapter#test_case_groups">Test Case
- Groups</seeguide> in the User's Guide.</p>
-
- </desc>
- </func>
-
- <func>
- <name since="">Module:groups() -> GroupDefs</name>
- <fsummary>Returns a list of test case group definitions.</fsummary>
- <type>
- <v>GroupDefs = [Group]</v>
- <v>Group = {GroupName,Properties,GroupsAndTestCases}</v>
- <v>GroupName = atom()</v>
- <v>Properties = [parallel | sequence | Shuffle | {GroupRepeatType,N}]</v>
- <v>GroupsAndTestCases = [Group | {group,GroupName} | TestCase | {testcase,TestCase,TCRepeatProps}]</v>
- <v>TestCase = atom()</v>
- <v>TCRepeatProps = [{repeat,N} | {repeat_until_ok,N} | {repeat_until_fail,N}]</v>
- <v>Shuffle = shuffle | {shuffle,Seed}</v>
- <v>Seed = {integer(),integer(),integer()}</v>
- <v>GroupRepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | repeat_until_any_ok | repeat_until_any_fail</v>
- <v>N = integer() | forever</v>
- </type>
-
- <desc>
- <p>OPTIONAL</p>
-
- <p>Defines test case groups. For details, see section
- <seeguide marker="write_test_chapter#test_case_groups">Test Case
- Groups</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:suite() -> [Info] </name>
- <fsummary>Test suite info function (providing default data
- for the suite).</fsummary>
- <type>
- <v>Info = {timetrap,Time} | {require,Required} | {require,Name,Required} | {userdata,UserData} | {silent_connections,Conns} | {stylesheet,CSSFile} | {ct_hooks, CTHs}</v>
- <v>Time = TimeVal | TimeFunc</v>
- <v>TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} | {hours,integer()}</v>
- <v>TimeFunc = {Mod,Func,Args} | Fun</v>
- <v>MilliSec = integer()</v>
- <v>Mod = atom()</v>
- <v>Func = atom()</v>
- <v>Args = list()</v>
- <v>Fun = fun()</v>
- <v>Required = Key | {Key,SubKeys} | {Key,SubKey} | {Key,SubKey,SubKeys}</v>
- <v>Key = atom()</v>
- <v>SubKeys = SubKey | [SubKey]</v>
- <v>SubKey = atom()</v>
- <v>Name = atom()</v>
- <v>UserData = term()</v>
- <v>Conns = [atom()]</v>
- <v>CSSFile = string()</v>
- <v>CTHs = [CTHModule |</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs} |</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs, CTHPriority}]</v>
- <v>CTHModule = atom()</v>
- <v>CTHInitArgs = term()</v>
- </type>
- <desc>
-
- <p>OPTIONAL</p>
-
- <p>The test suite information function. Returns a list of tagged
- tuples specifying various properties related to the execution of
- this test suite (common for all test cases in the suite).</p>
-
- <p>Tag <c>timetrap</c> sets the maximum time that each
- test case is allowed to execute (including
- <seemfa marker="#Module:init_per_testcase/2"><c>init_per_testcase/2</c></seemfa>
- and
- <seemfa marker="#Module:end_per_testcase/2"><c>end_per_testcase/2</c></seemfa>).
- If the timetrap time is exceeded, the test case fails with reason
- <c>timetrap_timeout</c>. A <c>TimeFunc</c> function can be used to
- set a new timetrap by returning a <c>TimeVal</c>. It can also be
- used to trigger a timetrap time-out by, at some point, returning a
- value other than a <c>TimeVal</c>. For details, see section
- <seeguide marker="write_test_chapter#timetraps">Timetrap Time-Outs</seeguide>
- in the User's Guide.</p>
-
- <p>Tag <c>require</c> specifies configuration variables
- required by test cases (or configuration functions)
- in the suite. If the required configuration variables are not found
- in any of the configuration files, all test cases are skipped.
- For details about the <c>require</c> functionality, see funtion
- <seemfa marker="ct#require/1"><c>ct:require/1,2</c></seemfa>.</p>
-
- <p>With <c>userdata</c>, the user can
- specify any test suite-related information, which can be
- read by calling
- <seemfa marker="ct#userdata/2"><c>ct:userdata/2</c></seemfa>.</p>
-
- <p>Tag <c>ct_hooks</c> specifies the
- <seeguide marker="ct_hooks_chapter">Common Test Hooks</seeguide>
- to be run with this suite.</p>
-
- <p>Other tuples than the ones defined are ignored.</p>
-
- <p>For details about the test suite information function, see section
- <seeguide marker="write_test_chapter#suite">Test
- Suite Information Function</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:init_per_suite(Config) -> NewConfig | {skip,Reason} |
- {skip_and_save,Reason,SaveConfig}</name>
- <fsummary>Test suite initializations.</fsummary>
- <type>
- <v>Config = NewConfig = SaveConfig = [{Key,Value}]</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
-
- <p>OPTIONAL; if this function is defined, then <seemfa
- marker="#Module:end_per_suite/1"><c>end_per_suite/1</c></seemfa>
- must also be defined.</p>
-
- <p>This configuration function is called as the first function in the
- suite. It typically contains initializations that are common for
- all test cases in the suite, and that must only be done
- once. Parameter <c>Config</c> is the configuration data
- that can be modified. Whatever is returned from this
- function is specified as <c>Config</c> to all configuration functions
- and test cases in the suite.</p>
-
- <p>If <c>{skip,Reason}</c>
- is returned, all test cases in the suite are skipped
- and <c>Reason</c> is printed in the overview log for the suite.</p>
-
- <p>For information on <c>save_config</c> and <c>skip_and_save</c>,
- see section
- <seeguide marker="dependencies_chapter#save_config">Saving
- Configuration Data</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:end_per_suite(Config) -> term() |
- {save_config,SaveConfig}</name>
- <fsummary>Test suite finalization.</fsummary>
- <type>
- <v>Config = SaveConfig = [{Key,Value}]</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- </type>
-
- <desc>
- <p>OPTIONAL; if this function is defined, then <seemfa
- marker="#Module:init_per_suite/1"><c>init_per_suite/1</c></seemfa>
- must also be defined.</p>
-
- <p>This function is called as the last test case in the
- suite. It is meant to be used for cleaning up after
- <seemfa marker="#Module:init_per_suite/1"><c>init_per_suite/1</c></seemfa>.</p>
- <p>For information on <c>save_config</c>, see section
- <seeguide marker="dependencies_chapter#save_config">Saving
- Configuration Data</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="OTP R15B">Module:group(GroupName) -> [Info] </name>
- <fsummary>Test case group information function (providing default data
- for a test case group, that is, its test cases and
- subgroups).</fsummary>
- <type>
- <v>Info = {timetrap,Time} | {require,Required} | {require,Name,Required} | {userdata,UserData} | {silent_connections,Conns} | {stylesheet,CSSFile} | {ct_hooks, CTHs}</v>
- <v>Time = TimeVal | TimeFunc</v>
- <v>TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} | {hours,integer()}</v>
- <v>TimeFunc = {Mod,Func,Args} | Fun</v>
- <v>MilliSec = integer()</v>
- <v>Mod = atom()</v>
- <v>Func = atom()</v>
- <v>Args = list()</v>
- <v>Fun = fun()</v>
- <v>Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}</v>
- <v>Key = atom()</v>
- <v>SubKeys = SubKey | [SubKey]</v>
- <v>SubKey = atom()</v>
- <v>Name = atom()</v>
- <v>UserData = term()</v>
- <v>Conns = [atom()]</v>
- <v>CSSFile = string()</v>
- <v>CTHs = [CTHModule |</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs} |</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs, CTHPriority}]</v>
- <v>CTHModule = atom()</v>
- <v>CTHInitArgs = term()</v>
- </type>
- <desc>
-
- <p>OPTIONAL</p>
-
- <p>The test case group information function. It is supposed to
- return a list of tagged tuples that specify various properties
- related to the execution of a test case group (that is, its test
- cases and subgroups). Properties set by
- <seemfa marker="#Module:group/1"><c>group/1</c></seemfa> override
- properties with the same key that have been set previously by
- <seemfa marker="#Module:suite/0"><c>suite/0</c></seemfa>.</p>
-
- <p>Tag <c>timetrap</c> sets the maximum time that each
- test case is allowed to execute (including
- <seemfa marker="#Module:init_per_testcase/2"><c>init_per_testcase/2</c></seemfa>
- and
- <seemfa marker="#Module:end_per_testcase/2"><c>end_per_testcase/2</c></seemfa>).
- If the timetrap time is
- exceeded, the test case fails with reason
- <c>timetrap_timeout</c>. A <c>TimeFunc</c> function can be used to
- set a new timetrap by returning a <c>TimeVal</c>. It can also be
- used to trigger a timetrap time-out by, at some point, returning a
- value other than a <c>TimeVal</c>. For details, see section
- <seeguide marker="write_test_chapter#timetraps">Timetrap
- Time-Outs</seeguide> in the User's Guide.</p>
-
- <p>Tag <c>require</c> specifies configuration variables
- required by test cases (or configuration functions)
- in the suite. If the required configuration variables are not found
- in any of the configuration files, all test cases in this group are
- skipped. For details about the <c>require</c> functionality, see
- function
- <seemfa marker="ct#require/1"><c>ct:require/1,2</c></seemfa>.</p>
-
- <p>With <c>userdata</c>, the user can
- specify any test case group related information that can be
- read by calling
- <seemfa marker="ct#userdata/2"><c>ct:userdata/2</c></seemfa>.</p>
-
- <p>Tag <c>ct_hooks</c> specifies the
- <seeguide marker="ct_hooks_chapter">Common Test Hooks</seeguide>
- to be run with this suite.</p>
-
- <p>Other tuples than the ones defined are ignored.</p>
-
- <p>For details about the test case group information function,
- see section <seeguide marker="write_test_chapter#group_info">Group
- Information Function</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:init_per_group(GroupName, Config) -> NewConfig |
- {skip,Reason}</name>
- <fsummary>Test case group initializations.</fsummary>
- <type>
- <v>GroupName = atom()</v>
- <v>Config = NewConfig = [{Key,Value}]</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
-
- <p>OPTIONAL; if this function is defined, then <seemfa
- marker="#Module:end_per_group/2"><c>end_per_group/2</c></seemfa>
- must also be defined.</p>
-
- <p>This configuration function is called before execution of a
- test case group. It typically contains initializations that are
- common for all test cases and subgroups in the group, and that
- must only be performed once. <c>GroupName</c> is the name of the
- group, as specified in the group definition (see
- <seemfa marker="#Module:groups/0"><c>groups/0</c></seemfa>).
- Parameter <c>Config</c> is the configuration data that can be
- modified.
- The return value of this function is given as <c>Config</c>
- to all test cases and subgroups in the group.</p>
-
- <p>If <c>{skip,Reason}</c>
- is returned, all test cases in the group are skipped and
- <c>Reason</c> is printed in the overview log for the group.</p>
-
- <p>For information about test case groups, see section
- <seeguide marker="write_test_chapter#test_case_groups">Test Case
- Groups</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:end_per_group(GroupName, Config) -> term() |
- {return_group_result,Status}</name>
- <fsummary>Test case group finalization.</fsummary>
- <type>
- <v>GroupName = atom()</v>
- <v>Config = [{Key,Value}]</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Status = ok | skipped | failed</v>
- </type>
-
- <desc>
- <p>OPTIONAL; if this function is defined, then <seemfa
- marker="#Module:init_per_group/2"><c>init_per_group/2</c></seemfa>
- must also be defined.</p>
-
- <p>This function is called after the execution of a test case group
- is finished. It is meant to be used for cleaning up after
- <seemfa marker="#Module:init_per_group/2"><c>init_per_group/2</c></seemfa>.
- A status value for a nested subgroup can be returned with
- <c>{return_group_result,Status}</c>. The status can be retrieved in
- <seemfa marker="#Module:end_per_group/2"><c>end_per_group/2</c></seemfa>
- for the group on the level above. The status is also used by
- <c>Common Test</c> for deciding if execution of a group is to
- proceed if property <c>sequence</c> or <c>repeat_until_*</c>
- is set.</p>
-
- <p>For details about test case groups, see section
- <seeguide marker="write_test_chapter#test_case_groups">Test Case
- Groups</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:init_per_testcase(TestCase, Config) -> NewConfig | {fail,Reason} | {skip,Reason}</name>
- <fsummary>Test case initializations.</fsummary>
- <type>
- <v> TestCase = atom()</v>
- <v> Config = NewConfig = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
- <v> Reason = term()</v>
- </type>
- <desc>
-
- <p>OPTIONAL; if this function is defined,
- then <seemfa marker="#Module:end_per_testcase/2">
- <c>end_per_testcase/2</c></seemfa> must also be
- defined.</p>
-
- <p>This function is called before each test case. Argument
- <c>TestCase</c> is the test case name, and
- <c>Config</c> (list of key-value tuples) is the configuration
- data that can be modified. The <c>NewConfig</c> list returned
- from this function is given as <c>Config</c> to the test case.
- If <c>{fail,Reason}</c> is returned, the test case is
- marked as failed without being executed.</p>
-
- <p>If <c>{skip,Reason}</c> is returned, the test case is skipped
- and <c>Reason</c> is printed in the overview log for the suite.</p>
- </desc>
- </func>
-
- <func>
- <name since="">Module:end_per_testcase(TestCase, Config) -> term() | {fail,Reason} | {save_config,SaveConfig}</name>
- <fsummary>Test case finalization.</fsummary>
- <type>
- <v>TestCase = atom()</v>
- <v>Config = SaveConfig = [{Key,Value}]</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
- </type>
- <desc>
-
- <p>OPTIONAL; if this function is defined,
- then <seemfa marker="#Module:init_per_testcase/2">
- <c>init_per_testcase/2</c></seemfa> must also be
- defined.</p>
-
- <p>This function is called after each test case, and can be used
- to clean up after
- <seemfa marker="#Module:init_per_testcase/2"><c>init_per_testcase/2</c></seemfa>
- and the test case. Any return value (besides <c>{fail,Reason}</c>
- and <c>{save_config,SaveConfig}</c>) is ignored. By returning
- <c>{fail,Reason}</c>, <c>TestCase</c> is marked as faulty (even
- though it was successful in the sense that it returned
- a value instead of terminating).</p>
-
- <p>For information on <c>save_config</c>, see section
- <seeguide marker="dependencies_chapter#save_config">Saving
- Configuration Data</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="OTP R14B">Module:Testcase() -> [Info] </name>
- <fsummary>Test case information function.</fsummary>
- <type>
- <v>Info = {timetrap,Time} | {require,Required} | {require,Name,Required} | {userdata,UserData} | {silent_connections,Conns}</v>
- <v>Time = TimeVal | TimeFunc</v>
- <v>TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} | {hours,integer()}</v>
- <v>TimeFunc = {Mod,Func,Args} | Fun</v>
- <v>MilliSec = integer()</v>
- <v>Mod = atom()</v>
- <v>Func = atom()</v>
- <v>Args = list()</v>
- <v>Fun = fun()</v>
- <v>Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}</v>
- <v>Key = atom()</v>
- <v>SubKeys = SubKey | [SubKey]</v>
- <v>SubKey = atom()</v>
- <v>Name = atom()</v>
- <v>UserData = term()</v>
- <v>Conns = [atom()]</v>
- </type>
-
- <desc>
-
- <p>OPTIONAL</p>
-
- <p>The test case information function. It is supposed to
- return a list of tagged tuples that specify various properties
- related to the execution of this particular test case.
- Properties set by
- <seemfa marker="#Module:Testcase/0"><c>Testcase/0</c></seemfa>
- override properties set previously for the test case by
- <seemfa marker="#Module:group/1"><c>group/1</c></seemfa> or
- <seemfa marker="#Module:suite/0"><c>suite/0</c></seemfa>.</p>
-
- <p>Tag <c>timetrap</c> sets the maximum time that the
- test case is allowed to execute. If the timetrap time is
- exceeded, the test case fails with reason <c>timetrap_timeout</c>.
- <seemfa marker="#Module:init_per_testcase/2"><c>init_per_testcase/2</c></seemfa>
- and
- <seemfa marker="#Module:end_per_testcase/2"><c>end_per_testcase/2</c></seemfa>
- are included in the timetrap time.
- A <c>TimeFunc</c> function can be used to
- set a new timetrap by returning a <c>TimeVal</c>. It can also be
- used to trigger a timetrap time-out by, at some point, returning a
- value other than a <c>TimeVal</c>. For details, see section
- <seeguide marker="write_test_chapter#timetraps">Timetrap
- Time-Outs</seeguide> in the User's Guide.</p>
-
- <p>Tag <c>require</c> specifies configuration variables
- that are required by the test case (or <c>init_per_testcase/2</c>
- or <c>end_per_testcase/2</c>).
- If the required configuration variables are not found in any of the
- configuration files, the test case is skipped. For details about
- the <c>require</c> functionality, see function
- <seemfa marker="ct#require/1"><c>ct:require/1,2</c></seemfa>.</p>
-
- <p>If <c>timetrap</c> or <c>require</c> is not set, the
- default values specified by
- <seemfa marker="#Module:suite/0"><c>suite/0</c></seemfa> (or
- <seemfa marker="#Module:group/1"><c>group/1</c></seemfa>) are used.</p>
-
- <p>With <c>userdata</c>, the user can specify any test case-related
- information that can be read by calling
- <seemfa marker="ct#userdata/3"><c>ct:userdata/3</c></seemfa>.</p>
-
- <p>Other tuples than the ones defined are ignored.</p>
-
- <p>For details about the test case information function, see section
- <seeguide marker="write_test_chapter#info_function">Test
- Case Information Function</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- <func>
- <name since="OTP R14B">Module:Testcase(Config) -> term() | {skip,Reason} | {comment,Comment} | {save_config,SaveConfig} | {skip_and_save,Reason,SaveConfig} | exit() </name>
- <fsummary>A test case.</fsummary>
- <type>
- <v>Config = SaveConfig = [{Key,Value}]</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
- <v>Comment = string()</v>
- </type>
-
- <desc>
- <p>MANDATORY</p>
-
- <p>The implementation of a test case. Call the functions to test and
- check the result. If something fails, ensure the
- function causes a runtime error or call
- <seemfa marker="ct#fail/1"><c>ct:fail/1,2</c></seemfa>
- (which also causes the test case process to terminate).</p>
-
- <p>Elements from the <c>Config</c> list can, for example, be read
- with <c>proplists:get_value/2</c> in STDLIB
- (or the macro <c>?config</c> defined in <c>ct.hrl</c>).</p>
-
- <p>If you decide not to run the test case after all, return
- <c>{skip,Reason}</c>. <c>Reason</c> is then
- printed in field <c>Comment</c> on the HTML result page.</p>
-
- <p>To print some information in field <c>Comment</c> on the HTML
- result page, return <c>{comment,Comment}</c>.</p>
-
- <p>If the function returns anything else, the test case is
- considered successful. The return value always gets printed
- in the test case log file.</p>
-
- <p>For details about test case implementation, see section
- <seeguide marker="write_test_chapter#test_cases">Test Cases</seeguide>
- in the User's Guide.</p>
-
- <p>For information on <c>save_config</c> and <c>skip_and_save</c>,
- see section
- <seeguide marker="dependencies_chapter#save_config">Saving
- Configuration Data</seeguide> in the User's Guide.</p>
- </desc>
- </func>
-
- </funcs>
-
</erlref>