aboutsummaryrefslogtreecommitdiff
path: root/test/stardoc_test.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'test/stardoc_test.bzl')
-rw-r--r--test/stardoc_test.bzl123
1 files changed, 91 insertions, 32 deletions
diff --git a/test/stardoc_test.bzl b/test/stardoc_test.bzl
index 8a18b52..d782643 100644
--- a/test/stardoc_test.bzl
+++ b/test/stardoc_test.bzl
@@ -21,21 +21,27 @@ def stardoc_test(
name,
input_file,
golden_file,
+ legacy_golden_file = None,
+ test_legacy_extractor = True,
deps = [],
test = "default",
**kwargs):
"""Convenience macro for stardoc e2e test suites.
- Each invocation creates four targets:
+ Each invocation creates multiple 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".
+ creates output matching the contents of a golden file, named "{name}_e2e_legacy_test".
+ 2. A `stardoc` target which will generate a new golden file given an input file with the
+ legacy extractor built from Bazel source. This target should be used to regenerate the
+ legacy golden file when updating stardoc, named "regenerate_{name}_legacy_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".
+ are named "{name}_e2e_jar_legacy_test" and "regenerate_with_jar_{name}_legacy_golden".
+ 5 & 6. Only if the host Bazel supports the `native.starlark_doc_extract` rule: Targets
+ identical to (1) and (2) except they use starlark_doc_extract, and are named "{name}_e2e_test"
+ and "regenerate_{name}_golden". The latter target should be used to regenerate the golden
+ file when updating Stardoc.
+ 7. A bzl_library target for convenient wrapping of input bzl files, named "{name}_lib".
Args:
name: A unique name to qualify the created targets.
@@ -43,38 +49,60 @@ def stardoc_test(
in this test.
golden_file: The label string of the golden file containing the documentation when stardoc
is run on the input file.
+ legacy_golden_file: The label string of the golden file when using the legacy documentation
+ extractor. If `legacy_golden_file` is not set, `golden_file` will be used for both extractors.
+ test_legacy_extractor: Whether to create legacy extractor test targets.
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.
"""
+ if legacy_golden_file == None:
+ legacy_golden_file = golden_file
+
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
- )
+
+ if test_legacy_extractor:
+ _create_test_targets(
+ test_name = "%s_e2e_legacy_test" % name,
+ genrule_name = "regenerate_%s_legacy_golden" % name,
+ lib_name = "%s_lib" % name,
+ input_file = input_file,
+ golden_file = legacy_golden_file,
+ stardoc_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc:skydoc_deploy.jar",
+ test = test,
+ use_starlark_doc_extract = False,
+ **kwargs
+ )
+
+ _create_test_targets(
+ test_name = "%s_e2e_jar_legacy_test" % name,
+ genrule_name = "regenerate_with_jar_%s_legacy_golden" % name,
+ lib_name = "%s_lib" % name,
+ input_file = input_file,
+ golden_file = legacy_golden_file,
+ stardoc_bin = "@io_bazel//src/main/java/com/google/devtools/build/skydoc:skydoc_deploy.jar",
+ test = test,
+ use_starlark_doc_extract = False,
+ **kwargs
+ )
+
+ if hasattr(native, "starlark_doc_extract"):
+ _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 = None,
+ test = test,
+ use_starlark_doc_extract = True,
+ **kwargs
+ )
def _create_test_targets(
test_name,
@@ -83,7 +111,6 @@ def _create_test_targets(
input_file,
golden_file,
stardoc_bin,
- renderer_bin,
test,
**kwargs):
actual_generated_doc = "%s.out" % genrule_name
@@ -107,7 +134,6 @@ def _create_test_targets(
out = actual_generated_doc,
input = input_file,
deps = [lib_name],
- renderer = renderer_bin,
stardoc = stardoc_bin,
**kwargs
)
@@ -117,9 +143,42 @@ def _create_test_targets(
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)
+
+def self_gen_test(
+ name,
+ stardoc_doc,
+ golden_file,
+ require_starlark_doc_extract,
+ **kwargs):
+ """
+ A wrapper around `diff_test_runner.sh` for testing Stardoc's own generated documentation.
+
+ Args:
+ name: A unique name for the test target.
+ stardoc_doc: The Stardoc output being tested.
+ golden_file: Expected Stardoc output.
+ require_starlark_doc_extract: If true, and the native `starlark_doc_extract` rule is not available,
+ then no test target will not be created.
+ **kwargs: Additional arguments for the test.
+ """
+ if require_starlark_doc_extract and not hasattr(native, "starlark_doc_extract"):
+ return
+
+ native.sh_test(
+ name = name,
+ srcs = ["diff_test_runner.sh"],
+ args = [
+ "$(location %s)" % golden_file,
+ "$(location %s)" % stardoc_doc,
+ ],
+ data = [
+ golden_file,
+ stardoc_doc,
+ ],
+ **kwargs
+ )