| """# Test suite |
| |
| Aggregates multiple Starlark tests in a single test_suite. |
| """ |
| |
| load("//lib/private:util.bzl", "get_test_name_from_function") |
| load("//lib:unit_test.bzl", "unit_test") |
| |
| def test_suite(name, *, tests = [], basic_tests = [], test_kwargs = {}): |
| """Instantiates given test macros/implementations and gathers their main targets into a `test_suite`. |
| |
| Use this function to wrap all tests into a single target. |
| |
| ``` |
| def simple_test_suite(name): |
| test_suite( |
| name = name, |
| tests = [ |
| your_test, |
| your_other_test, |
| ] |
| ) |
| ``` |
| |
| Then, in your `BUILD` file, simply load the macro and invoke it to have all |
| of the targets created: |
| |
| ``` |
| load("//path/to/your/package:tests.bzl", "simple_test_suite") |
| simple_test_suite(name = "simple_test_suite") |
| ``` |
| |
| Args: |
| name: (str) The name of the suite |
| tests: (list of callables) Test macros functions that |
| define a test. The signature is `def setup(name, **test_kwargs)`, |
| where (positional) `name` is name of the test target that must be |
| created, and `**test_kwargs` are the additional arguments from the |
| test suite's `test_kwargs` arg. The name of the function will |
| become the name of the test. |
| basic_tests: (list of callables) Test implementation functions |
| (functions that implement a test's asserts). Each callable takes a |
| single positional arg, `env`, which is information about the test |
| environment (see analysis_test docs). The name of the function will |
| become the name of the test. |
| test_kwargs: (dict) Additional kwargs to pass onto each test (both |
| regular and basic test callables). |
| """ |
| test_targets = [] |
| |
| for setup_func in tests: |
| test_name = get_test_name_from_function(setup_func) |
| setup_func(name = test_name, **test_kwargs) |
| test_targets.append(test_name) |
| |
| for impl in basic_tests: |
| test_name = get_test_name_from_function(impl) |
| unit_test(name = test_name, impl = impl, **test_kwargs) |
| test_targets.append(test_name) |
| |
| native.test_suite( |
| name = name, |
| tests = test_targets, |
| ) |