blob: 94064173a76f357d3dda146dc692fa060598ef4c [file] [view]
# Test Runner Documentation
The scripts in this folder comprise a cross-platform unit test runner. The
components of this runner are as follows:
## Components
### 1.) test_runner.py
This script is used to run unit test binaries on multiple platforms.To see a
full list of parameters that can be supplied to the script, run
"python test_runner.py --help".
#### Running Tests:
To run all tests for a given platform, execute the "test_runner.py" script and
provide at minimum the "--platform" and "--config" arguments. Example:
python test_runner.py --platform=android-x86 --config=devel
Running this command will run all unit tests for the "devel" build of
the "android-x86" platform. To specify a device to run the tests
on, provide the "--device_id" argument, as shown below:
python test_runner.py --platform=android-x86 --config=devel \
--device_id=emulator-4
#### Running a Single Test:
If you would like to run a single unit test binary and view its output,
you can do so by using the "--target_name" parameter and providing a
test binary name, as shown below:
python test_runner.py --platform=android-x86 --config=devel \
--device_id=emulator-4 --target_name=audio_test
#### Building Tests:
You can also use this script to build your unit test binaries before running
them. To do this, provide the "-b" command line flag. If you would like to
build the tests and then run them, provide the flags "-br".
### 2.) Master list of test binaries
In your application's "starboard_configuration.py" file, define a variable
called TEST_TARGETS. It should be a list containing the names of all of
the test binaries that you want the test runner to run. An example is shown
below:
TEST_TARGETS =[
"audio_test",
"bindings_test"
]
If your "starboard_configuration.py" file contained this list, then
every platform you support in Starboard would try to run these test
binaries unless they were filtered out as described below.
## Filtering Tests
To filter out tests that you do not want to run for a specific platform,
implement a method within the platform's GYP PlatformConfig class called
"GetTestFilters()". The PlatformConfig class lives in a
gyp_configuration.py file. See
[this Linux implementation](../../../linux/x64x11/shared/gyp_configuration.py)
for an example.
The "GetTestFilters()" function should return a list of TestFilter objects,
which can be constructed by importing "./test_filter.py". To make a
test_filter object, provide the constructor with the test target name, the name
of the actual unit test that the target runs, and optionally, the build
configuration from which the test should be excluded. An example is shown below:
test_filter.TestFilter('math_test', 'Vector3dTest.IsZero', 'debug')
If a configuration is not provided, then the test will be exluded from all
configurations.
To filter out all tests for a particular target, provide
"test_filter.FILTER_ALL" as the test name.
To disable unit testing for all targets and all configurations, return a list
containing "test_filter.DISABLE_TESTING".
## Environment Variables
If a platform requires extra environment variables in order to run tests
properly, implement a method called "GetTestEnvVariables()" in the same
PlatformConfig mentioned above. There is an example of this method in
the provided Linux implementation. The method should return a dictionary that
maps test binary names to dictionaries of environment variables that they need.
Example:
def GetTestEnvVariables(self):
return {
'base_unittests': {'ASAN_OPTIONS': 'detect_leaks=0'},
'crypto_unittests': {'ASAN_OPTIONS': 'detect_leaks=0'},
'net_unittests': {'ASAN_OPTIONS': 'detect_leaks=0'}
}