| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # 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_shell//shell:sh_test.bzl", "sh_test")
- load("//bazel/cc_rules:defs.bzl", "cc_test")
- load("//bazel/manifest:defs.bzl", "manifest", "manifest_as_cpp")
- def file_test(
- name,
- tests,
- srcs = [],
- deps = [],
- data = [],
- args = [],
- prebuilt_binary = None,
- **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.
- srcs: Passed to cc_test.
- deps: Passed to cc_test.
- data: Passed to cc_test.
- args: Passed to cc_test.
- prebuilt_binary: If set, specifies a prebuilt test binary to use instead
- of building a new one.
- **kwargs: Passed to cc_test.
- """
- # Ensure tests are always a filegroup for tests_as_input_file_rule.
- if prebuilt_binary:
- # TODO: The prebuilt_binary support is only used by explorer. We should
- # remove this once explorer is removed, and think about better factoring
- # approaches if we need it later for toolchain.
- tests_file = "{0}.tests".format(name)
- manifest(
- name = tests_file,
- srcs = tests,
- testonly = 1,
- )
- args = ["--explorer_test_targets_file=$(rootpath :{0})".format(tests_file)] + args
- sh_test(
- name = name,
- srcs = srcs + [prebuilt_binary],
- deps = deps,
- data = [":" + tests_file] + tests + data,
- args = args,
- **kwargs
- )
- else:
- manifest_cpp = "{0}_autogen_manifest.cpp".format(name)
- manifest_as_cpp(
- name = manifest_cpp,
- var_name = "CarbonFileTestManifest",
- srcs = tests,
- testonly = 1,
- )
- cc_test(
- name = name,
- srcs = srcs + [":" + manifest_cpp],
- deps = deps + ["//testing/file_test:manifest_impl"],
- data = tests + data,
- args = args,
- **kwargs
- )
|