test_run — Launch tests
N = test_run() N = test_run(module[,test_name[,options]])
a vector of string. It can be the name of a module or the absolute path of a toolbox.
a vector of string
a vector of string
no_check_ref : does not check if the .dia and .dia.ref are equal
no_check_error_output
create_ref : create the .dia.ref file and does not check if the .dia and .dia.ref are equal
list : does not perform the tests but displays a list of available tests
help : display some examples about how to use this command
mode_nw : add the "-nw" option to the launch
mode_nwni : add the "-nwni" option to the launch
nonreg_test : runs only the non-regression tests, skipping unit tests
unit_test : runs only the unit tests, skipping non-regression tests
skip_tests
enable_lt : Enable long-time execution tests
Search for .tst files in the unit test and non-regression test library execute them, and display a report about success of failures. The .tst files are searched in directories SCI+"/modules/*/tests/unit_tests" and SCI+"/modules/*/tests/nonreg_tests". Whenever a test is executed, a .dia file is generated which contains the full list of commands executed along with message which appears in the console. When the script is done, the .dia file is compared with the .dia.ref file which is expected to be in the same directory as the .tst file. If the two file are different, the test fails.
Special tags may be inserted in the .tst file, which help to control the processing of the corresponding test. These tags are expected to be found in Scilab comments.
These are the available tags :
<-- INTERACTIVE TEST --> This test will be skipped because it is interactive.
<-- LONG TIME EXECUTION --> This test will be skipped because it needs long-time duration. To enable the test, call test_run with the following option: "enable_lt"
<-- NOT FIXED --> This test will be skipped because it is a known, but unfixed bug.
<-- TEST WITH GRAPHIC --> This test will not be executed if the option "mode_nwni" is used.
<-- NO TRY CATCH -->
<-- NO CHECK ERROR OUTPUT --> The error output file is not checked
<-- NO CHECK REF --> The .dia and the .dia.ref files are not compared.
<-- ENGLISH IMPOSED --> This test will be executed with the -l en_US option.
<-- FRENCH IMPOSED --> This test will be executed with the -l fr_FR option.
<-- JVM NOT MANDATORY --> This test will be executed with the nwni mode by default.
<-- WINDOWS ONLY --> If the operating system isn't Windows, the test is skipped.
<-- UNIX ONLY --> If the operating system isn't an unix OS, the test is skipped.
<-- LINUX ONLY --> If the operating system isn't Linux, the test is skipped.
<-- MACOSX ONLY --> If the operating system isn't MacOSX, the test is skipped.
Each test is executed in a separated process, created with the "host" command. That enables the current command to continue, even if the test as created an unstable environment. It also enables the tests to be independent from one another.
It may happen that the output of a test depends on the platform on which it is
executed. In this case, the .ref
file cannot be correct for
all platforms and unit tests may fail for some platform. In this case, we can
create a default .ref
and create additionnal .ref
file for each platform.
The various platform-specific .ref
files must have one of the following extensions.
.unix.dia.ref
for Unix platform,
.linux..diaref
for Linux platform,
.win.dia.ref
for Windows platform,
.macosx.dia.ref
for Mac OS X platform.
The algorithm is the following.
First, the .ref
is considered. If this file does not exist,
the platform-specific .ref
file is examined depending on the current platform.
on windows platforms: .win.dia.ref
,
on Max OS X platforms: .unix.dia.ref
, .macosx.dia.ref
,
on Linux platforms: .unix.dia.ref
, .linux.dia.ref
.
// Launch all tests // ============================================= test_run(); test_run([]); test_run([],[]); // Test one or several module // ============================================= // Test one module test_run('time'); // Test several modules test_run(['time','string']); // Test a submodule test_run(['optimization|neldermead']); // Refer to a module by its path test_run(SCI+'/modules/core'); // Launch a specific test // ============================================= // One specific test test_run('time','datenum'); // Several tests test_run('time',['datenum';'calendar']); // Skip some tests // ============================================= test_run('time',['datenum';'calendar'],'skip_tests'); // Options // ============================================= // does not check if the .dia and .dia.ref are equal test_run('time','datenum','no_check_ref'); // Create the .dia.ref file and does not check if the .dia and .dia.ref are equal test_run([],[],'create_ref'); // Does not perform the tests but displays a list of available tests test_run([],[],'list'); // Display some examples about how to use this command test_run([],[],'help'); // Runs only the non-regression tests, skipping unit tests test_run([],[],'nonreg_test'); // Runs only the unit tests, skipping non-regression tests test_run([],[],'unit_test'); // Do not check the error output (std err) test_run('boolean','bug_2799','no_check_error_output'); // Combine several options test_run([],[],['no_check_ref','mode_nw']);
The tests are performed in the temporary directory, not in the directory which originaly contain the tests files. The .tst file is copied into the temporary directory, the test is performed and the .dia.ref is copied back into the original location.
The .tst script is not run as is. Instead, a header and a footer are inserted at the beginning and at the end of the .tst at the time the script is copied into the temporary directory. The role of this modification is to redirect the output messages into the .dia file, so that the user can have a log file once the test is performed.