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