122 lines
4.6 KiB
Python
122 lines
4.6 KiB
Python
# Copyright 2019 The Bazel Authors. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""Convenience macro for stardoc e2e tests."""
|
|
|
|
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
|
|
load("//stardoc:html_tables_stardoc.bzl", "html_tables_stardoc")
|
|
load("//stardoc:stardoc.bzl", "stardoc")
|
|
|
|
def stardoc_test(
|
|
name,
|
|
input_file,
|
|
golden_file,
|
|
deps = [],
|
|
test = "default",
|
|
**kwargs):
|
|
"""Convenience macro for stardoc e2e test suites.
|
|
|
|
Each invocation creates four targets:
|
|
|
|
1. A sh_test target which verifies that stardoc-built-from-source, when run on an input file,
|
|
creates output matching the contents of a golden file, named "{name}_e2e_test".
|
|
2. A `stardoc` target which will generate a new golden file given an input file
|
|
with stardoc-built-from-source. This target should be used to regenerate
|
|
the golden file when updating stardoc, named "regenerate_{name}_golden".
|
|
3 & 4. Targets identical to (1) and (2) except they use the prebuilt-stardoc jar, and
|
|
are named "{name}_e2e_jar_test" and "regenerate_with_jar_{name}_golden".
|
|
5. A bzl_library target for convenient wrapping of input bzl files, named "{name}_lib".
|
|
|
|
Args:
|
|
name: A unique name to qualify the created targets.
|
|
input_file: The label string of the Starlark input file for which documentation is generated
|
|
in this test.
|
|
golden_file: The label string of the golden file containing the documentation when stardoc
|
|
is run on the input file.
|
|
deps: A list of label strings of starlark file dependencies of the input_file.
|
|
test: The type of test (default or html_tables).
|
|
**kwargs: A dictionary of input template names mapped to template file path for which documentation is generated.
|
|
"""
|
|
|
|
bzl_library(
|
|
name = "%s_lib" % name,
|
|
srcs = [input_file],
|
|
deps = deps,
|
|
)
|
|
_create_test_targets(test_name = "%s_e2e_test" % name,
|
|
genrule_name = "regenerate_%s_golden" % name,
|
|
lib_name = "%s_lib" % name,
|
|
input_file = input_file,
|
|
golden_file = golden_file,
|
|
stardoc_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc",
|
|
renderer_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc/renderer",
|
|
test = test,
|
|
**kwargs)
|
|
_create_test_targets(test_name = "%s_e2e_jar_test" % name,
|
|
genrule_name = "regenerate_with_jar_%s_golden" % name,
|
|
lib_name = "%s_lib" % name,
|
|
input_file = input_file,
|
|
golden_file = golden_file,
|
|
stardoc_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc",
|
|
renderer_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc/renderer",
|
|
test = test,
|
|
**kwargs)
|
|
|
|
def _create_test_targets(test_name,
|
|
genrule_name,
|
|
lib_name,
|
|
input_file,
|
|
golden_file,
|
|
stardoc_bin,
|
|
renderer_bin,
|
|
test,
|
|
**kwargs):
|
|
actual_generated_doc = "%s.out" % genrule_name
|
|
|
|
native.sh_test(
|
|
name = test_name,
|
|
srcs = ["diff_test_runner.sh"],
|
|
args = [
|
|
"$(location %s)" % actual_generated_doc,
|
|
"$(location %s)" % golden_file,
|
|
],
|
|
data = [
|
|
actual_generated_doc,
|
|
golden_file,
|
|
],
|
|
)
|
|
|
|
if test == "default":
|
|
stardoc(
|
|
name = genrule_name,
|
|
out = actual_generated_doc,
|
|
input = input_file,
|
|
deps = [lib_name],
|
|
renderer = renderer_bin,
|
|
stardoc = stardoc_bin,
|
|
**kwargs
|
|
)
|
|
elif test == "html_tables":
|
|
html_tables_stardoc(
|
|
name = genrule_name,
|
|
out = actual_generated_doc,
|
|
input = input_file,
|
|
deps = [lib_name],
|
|
renderer = renderer_bin,
|
|
stardoc = stardoc_bin,
|
|
**kwargs
|
|
)
|
|
else:
|
|
fail("parameter 'test' must either be 'default' or 'html_tables', but was " + test)
|
|
|