xref: /aosp_15_r20/external/bazelbuild-rules_testing/lib/private/util.bzl (revision d605057434dcabba796c020773aab68d9790ff9f)
1*d6050574SRomain Jobredeaux"""Shared private utilities."""
2*d6050574SRomain Jobredeaux
3*d6050574SRomain Jobredeauxdef _do_nothing_impl(ctx):
4*d6050574SRomain Jobredeaux    _ = ctx  # @unused
5*d6050574SRomain Jobredeaux    return []
6*d6050574SRomain Jobredeaux
7*d6050574SRomain Jobredeauxdo_nothing = rule(implementation = _do_nothing_impl)
8*d6050574SRomain Jobredeaux
9*d6050574SRomain Jobredeauxdef get_test_name_from_function(func):
10*d6050574SRomain Jobredeaux    """Derives a suitable test name from a function.
11*d6050574SRomain Jobredeaux
12*d6050574SRomain Jobredeaux    This can be used for better test feedback.
13*d6050574SRomain Jobredeaux
14*d6050574SRomain Jobredeaux    Args:
15*d6050574SRomain Jobredeaux      func: (callable) A test implementation or setup function.
16*d6050574SRomain Jobredeaux
17*d6050574SRomain Jobredeaux    Returns:
18*d6050574SRomain Jobredeaux      (str) The name of the given function, suitable as a test name.
19*d6050574SRomain Jobredeaux    """
20*d6050574SRomain Jobredeaux
21*d6050574SRomain Jobredeaux    # Starlark currently stringifies a function as "<function NAME>", so we use
22*d6050574SRomain Jobredeaux    # that knowledge to parse the "NAME" portion out. If this behavior ever
23*d6050574SRomain Jobredeaux    # changes, we'll need to update this.
24*d6050574SRomain Jobredeaux    # TODO(bazel-team): Expose a ._name field on functions to avoid this.
25*d6050574SRomain Jobredeaux    func_name = str(func)
26*d6050574SRomain Jobredeaux    func_name = func_name.partition("<function ")[-1]
27*d6050574SRomain Jobredeaux    func_name = func_name.rpartition(">")[0]
28*d6050574SRomain Jobredeaux    func_name = func_name.partition(" ")[0]
29*d6050574SRomain Jobredeaux
30*d6050574SRomain Jobredeaux    # Strip leading/trailing underscores so that test functions can
31*d6050574SRomain Jobredeaux    # have private names. This better allows unused tests to be flagged by
32*d6050574SRomain Jobredeaux    # buildifier (indicating a bug or code to delete)
33*d6050574SRomain Jobredeaux    return func_name.strip("_")
34*d6050574SRomain Jobredeaux
35*d6050574SRomain Jobredeauxget_function_name = get_test_name_from_function
36