xref: /aosp_15_r20/external/stardoc/test/stardoc_test.bzl (revision b2fa42943c124aa9c7163734493fc7a7559681cf)
1*b2fa4294SXin Li# Copyright 2019 The Bazel Authors. All rights reserved.
2*b2fa4294SXin Li#
3*b2fa4294SXin Li# Licensed under the Apache License, Version 2.0 (the "License");
4*b2fa4294SXin Li# you may not use this file except in compliance with the License.
5*b2fa4294SXin Li# You may obtain a copy of the License at
6*b2fa4294SXin Li#
7*b2fa4294SXin Li#    http://www.apache.org/licenses/LICENSE-2.0
8*b2fa4294SXin Li#
9*b2fa4294SXin Li# Unless required by applicable law or agreed to in writing, software
10*b2fa4294SXin Li# distributed under the License is distributed on an "AS IS" BASIS,
11*b2fa4294SXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*b2fa4294SXin Li# See the License for the specific language governing permissions and
13*b2fa4294SXin Li# limitations under the License.
14*b2fa4294SXin Li"""Convenience macro for stardoc e2e tests."""
15*b2fa4294SXin Li
16*b2fa4294SXin Liload("@bazel_skylib//:bzl_library.bzl", "bzl_library")
17*b2fa4294SXin Liload("//stardoc:html_tables_stardoc.bzl", "html_tables_stardoc")
18*b2fa4294SXin Liload("//stardoc:stardoc.bzl", "stardoc")
19*b2fa4294SXin Li
20*b2fa4294SXin Lidef stardoc_test(
21*b2fa4294SXin Li        name,
22*b2fa4294SXin Li        input_file,
23*b2fa4294SXin Li        golden_file,
24*b2fa4294SXin Li        deps = [],
25*b2fa4294SXin Li        test = "default",
26*b2fa4294SXin Li        **kwargs):
27*b2fa4294SXin Li    """Convenience macro for stardoc e2e test suites.
28*b2fa4294SXin Li
29*b2fa4294SXin Li    Each invocation creates four targets:
30*b2fa4294SXin Li
31*b2fa4294SXin Li    1. A sh_test target which verifies that stardoc-built-from-source, when run on an input file,
32*b2fa4294SXin Li       creates output matching the contents of a golden file, named "{name}_e2e_test".
33*b2fa4294SXin Li    2. A `stardoc` target which will generate a new golden file given an input file
34*b2fa4294SXin Li       with stardoc-built-from-source. This target should be used to regenerate
35*b2fa4294SXin Li       the golden file when updating stardoc, named "regenerate_{name}_golden".
36*b2fa4294SXin Li    3 & 4. Targets identical to (1) and (2) except they use the prebuilt-stardoc jar, and
37*b2fa4294SXin Li       are named "{name}_e2e_jar_test" and "regenerate_with_jar_{name}_golden".
38*b2fa4294SXin Li    5. A bzl_library target for convenient wrapping of input bzl files, named "{name}_lib".
39*b2fa4294SXin Li
40*b2fa4294SXin Li    Args:
41*b2fa4294SXin Li      name: A unique name to qualify the created targets.
42*b2fa4294SXin Li      input_file: The label string of the Starlark input file for which documentation is generated
43*b2fa4294SXin Li          in this test.
44*b2fa4294SXin Li      golden_file: The label string of the golden file containing the documentation when stardoc
45*b2fa4294SXin Li          is run on the input file.
46*b2fa4294SXin Li      deps: A list of label strings of starlark file dependencies of the input_file.
47*b2fa4294SXin Li      test: The type of test (default or html_tables).
48*b2fa4294SXin Li      **kwargs: A dictionary of input template names mapped to template file path for which documentation is generated.
49*b2fa4294SXin Li      """
50*b2fa4294SXin Li
51*b2fa4294SXin Li    bzl_library(
52*b2fa4294SXin Li        name = "%s_lib" % name,
53*b2fa4294SXin Li        srcs = [input_file],
54*b2fa4294SXin Li        deps = deps,
55*b2fa4294SXin Li    )
56*b2fa4294SXin Li    _create_test_targets(
57*b2fa4294SXin Li        test_name = "%s_e2e_test" % name,
58*b2fa4294SXin Li        genrule_name = "regenerate_%s_golden" % name,
59*b2fa4294SXin Li        lib_name = "%s_lib" % name,
60*b2fa4294SXin Li        input_file = input_file,
61*b2fa4294SXin Li        golden_file = golden_file,
62*b2fa4294SXin Li        stardoc_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc",
63*b2fa4294SXin Li        renderer_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc/renderer",
64*b2fa4294SXin Li        test = test,
65*b2fa4294SXin Li        **kwargs
66*b2fa4294SXin Li    )
67*b2fa4294SXin Li    _create_test_targets(
68*b2fa4294SXin Li        test_name = "%s_e2e_jar_test" % name,
69*b2fa4294SXin Li        genrule_name = "regenerate_with_jar_%s_golden" % name,
70*b2fa4294SXin Li        lib_name = "%s_lib" % name,
71*b2fa4294SXin Li        input_file = input_file,
72*b2fa4294SXin Li        golden_file = golden_file,
73*b2fa4294SXin Li        stardoc_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc",
74*b2fa4294SXin Li        renderer_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc/renderer",
75*b2fa4294SXin Li        test = test,
76*b2fa4294SXin Li        **kwargs
77*b2fa4294SXin Li    )
78*b2fa4294SXin Li
79*b2fa4294SXin Lidef _create_test_targets(
80*b2fa4294SXin Li        test_name,
81*b2fa4294SXin Li        genrule_name,
82*b2fa4294SXin Li        lib_name,
83*b2fa4294SXin Li        input_file,
84*b2fa4294SXin Li        golden_file,
85*b2fa4294SXin Li        stardoc_bin,
86*b2fa4294SXin Li        renderer_bin,
87*b2fa4294SXin Li        test,
88*b2fa4294SXin Li        **kwargs):
89*b2fa4294SXin Li    actual_generated_doc = "%s.out" % genrule_name
90*b2fa4294SXin Li
91*b2fa4294SXin Li    native.sh_test(
92*b2fa4294SXin Li        name = test_name,
93*b2fa4294SXin Li        srcs = ["diff_test_runner.sh"],
94*b2fa4294SXin Li        args = [
95*b2fa4294SXin Li            "$(location %s)" % actual_generated_doc,
96*b2fa4294SXin Li            "$(location %s)" % golden_file,
97*b2fa4294SXin Li        ],
98*b2fa4294SXin Li        data = [
99*b2fa4294SXin Li            actual_generated_doc,
100*b2fa4294SXin Li            golden_file,
101*b2fa4294SXin Li        ],
102*b2fa4294SXin Li    )
103*b2fa4294SXin Li
104*b2fa4294SXin Li    if test == "default":
105*b2fa4294SXin Li        stardoc(
106*b2fa4294SXin Li            name = genrule_name,
107*b2fa4294SXin Li            out = actual_generated_doc,
108*b2fa4294SXin Li            input = input_file,
109*b2fa4294SXin Li            deps = [lib_name],
110*b2fa4294SXin Li            renderer = renderer_bin,
111*b2fa4294SXin Li            stardoc = stardoc_bin,
112*b2fa4294SXin Li            **kwargs
113*b2fa4294SXin Li        )
114*b2fa4294SXin Li    elif test == "html_tables":
115*b2fa4294SXin Li        html_tables_stardoc(
116*b2fa4294SXin Li            name = genrule_name,
117*b2fa4294SXin Li            out = actual_generated_doc,
118*b2fa4294SXin Li            input = input_file,
119*b2fa4294SXin Li            deps = [lib_name],
120*b2fa4294SXin Li            renderer = renderer_bin,
121*b2fa4294SXin Li            stardoc = stardoc_bin,
122*b2fa4294SXin Li            **kwargs
123*b2fa4294SXin Li        )
124*b2fa4294SXin Li    else:
125*b2fa4294SXin Li        fail("parameter 'test' must either be 'default' or 'html_tables', but was " + test)
126