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