| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- # Exceptions. See /LICENSE for license information.
- # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- """Rules for building file tests.
- file_test uses the tests_as_input_file rule to transform test dependencies into
- a file which can be accessed as a list. This avoids long argument parsing.
- """
- load("@rules_cc//cc:defs.bzl", "cc_test")
- DataFilesInfo = provider(
- "Data files for this target.",
- fields = {
- "data_files": "Data files for this target",
- },
- )
- def _tests_as_input_file_rule_impl(ctx):
- data_files = []
- for tests in ctx.attr.data:
- data_files.extend(
- [f.path for f in tests[DefaultInfo].data_runfiles.files.to_list()],
- )
- data_files.extend(
- [f.path for f in tests[DefaultInfo].files.to_list()],
- )
- ctx.actions.write(ctx.outputs.data_files, "\n".join(data_files) + "\n")
- _tests_as_input_file_rule = rule(
- attrs = {
- "data": attr.label_list(allow_files = True),
- },
- outputs = {
- "data_files": "%{name}.txt",
- },
- implementation = _tests_as_input_file_rule_impl,
- )
- def file_test(name, tests, data = [], args = [], **kwargs):
- """Generates tests using the file_test base.
- There will be one main test using `name` that can be sharded, and includes
- all files. Additionally, per-file tests will be generated as
- `name.file_path`; these per-file tests will be manual.
- Args:
- name: The base name of the tests.
- tests: The list of test files to use as data, typically a glob.
- data: Passed to cc_test.
- args: Passed to cc_test.
- **kwargs: Passed to cc_test.
- """
- # Ensure tests are always a filegroup for tests_as_input_file_rule.
- tests_file = "{0}.tests".format(name)
- _tests_as_input_file_rule(
- name = tests_file,
- data = tests,
- testonly = 1,
- )
- cc_test(
- name = name,
- data = [tests_file] + tests + data,
- args = ["--test_targets_file=$(rootpath :{0})".format(tests_file)] + args,
- **kwargs
- )
|