xref: /aosp_15_r20/external/skia/tools/testrunners/unit/unit_tests.bzl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker"""This module contains macros to generate C++ unit test targets."""
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Workerload("@skia_user_config//:copts.bzl", "DEFAULT_COPTS")
4*c8dee2aaSAndroid Build Coastguard Workerload("@skia_user_config//:linkopts.bzl", "DEFAULT_LINKOPTS")
5*c8dee2aaSAndroid Build Coastguard Worker
6*c8dee2aaSAndroid Build Coastguard Workerdef unit_tests(
7*c8dee2aaSAndroid Build Coastguard Worker        name,
8*c8dee2aaSAndroid Build Coastguard Worker        tests,
9*c8dee2aaSAndroid Build Coastguard Worker        deps,
10*c8dee2aaSAndroid Build Coastguard Worker        resources = [],
11*c8dee2aaSAndroid Build Coastguard Worker        extra_srcs = [],
12*c8dee2aaSAndroid Build Coastguard Worker        tags = None):
13*c8dee2aaSAndroid Build Coastguard Worker    """This macro will create one cc_test rule for each file in tests.
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker    These tests are configured to use the BazelUnitTestRunner and run all tests
16*c8dee2aaSAndroid Build Coastguard Worker    (e.g. those defined with DEF_TEST) in the file.
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker    Args:
19*c8dee2aaSAndroid Build Coastguard Worker        name: The name of the test_suite that groups these tests together.
20*c8dee2aaSAndroid Build Coastguard Worker        tests: A list of strings, corresponding to C++ files with one or more DEF_TEST (see Test.h).
21*c8dee2aaSAndroid Build Coastguard Worker        deps: A list of labels corresponding to cc_library targets which this test needs to work.
22*c8dee2aaSAndroid Build Coastguard Worker            This typically includes some Skia modules and maybe some test utils.
23*c8dee2aaSAndroid Build Coastguard Worker        resources: A label corresponding to a file_group target that has any skia resource files
24*c8dee2aaSAndroid Build Coastguard Worker            (e.g. images, fonts) needed to run these tests. Resources change infrequently, so
25*c8dee2aaSAndroid Build Coastguard Worker            it's not super important that this be a precise list.
26*c8dee2aaSAndroid Build Coastguard Worker        extra_srcs: Any extra files (e.g. headers) that are needed to build these tests. This is
27*c8dee2aaSAndroid Build Coastguard Worker            a more convenient way to include a few extra files without needing to create a
28*c8dee2aaSAndroid Build Coastguard Worker            distinct test cc_library.
29*c8dee2aaSAndroid Build Coastguard Worker        tags: Added to all the generated test targets
30*c8dee2aaSAndroid Build Coastguard Worker    """
31*c8dee2aaSAndroid Build Coastguard Worker    test_targets = []
32*c8dee2aaSAndroid Build Coastguard Worker    if not tags:
33*c8dee2aaSAndroid Build Coastguard Worker        tags = []
34*c8dee2aaSAndroid Build Coastguard Worker    for filename in tests:
35*c8dee2aaSAndroid Build Coastguard Worker        new_target = name + "_" + filename[:-4]  # trim .cpp
36*c8dee2aaSAndroid Build Coastguard Worker        test_targets.append(new_target)
37*c8dee2aaSAndroid Build Coastguard Worker        native.cc_test(
38*c8dee2aaSAndroid Build Coastguard Worker            name = new_target,
39*c8dee2aaSAndroid Build Coastguard Worker            copts = DEFAULT_COPTS,
40*c8dee2aaSAndroid Build Coastguard Worker            linkopts = DEFAULT_LINKOPTS,
41*c8dee2aaSAndroid Build Coastguard Worker            size = "small",
42*c8dee2aaSAndroid Build Coastguard Worker            srcs = [filename] + extra_srcs,
43*c8dee2aaSAndroid Build Coastguard Worker            deps = deps + ["//tools/testrunners/unit:testrunner"],
44*c8dee2aaSAndroid Build Coastguard Worker            data = resources,
45*c8dee2aaSAndroid Build Coastguard Worker            tags = tags,
46*c8dee2aaSAndroid Build Coastguard Worker        )
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Worker    # https://bazel.build/reference/be/general#test_suite
49*c8dee2aaSAndroid Build Coastguard Worker    native.test_suite(
50*c8dee2aaSAndroid Build Coastguard Worker        name = name,
51*c8dee2aaSAndroid Build Coastguard Worker        tests = test_targets,
52*c8dee2aaSAndroid Build Coastguard Worker    )
53