| # Copyright 2018 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 skydoc tests. Each target represents two targets: | |
| # 1. A sh_test target which verifies that skydoc, when run on an input file, | |
| # creates output matching the contents of a golden file. | |
| # 2. A genrule target which will generate a new golden file given an input file | |
| # and the current version of skydoc. This target should be used to regenerate | |
| # the golden file if changes are made to skydoc. | |
| """Convenience macro for skydoc tests.""" | |
| load("@bazel_skylib//:bzl_library.bzl", "bzl_library") | |
| load(":stardoc_for_testing.bzl", "stardoc") | |
| def skydoc_test( | |
| name, | |
| input_file, | |
| golden_file, | |
| deps = [], | |
| format = "html_tables", | |
| **kwargs): | |
| """Creates a test target and golden-file regeneration target for skydoc testing. | |
| The test target is named "{name}_e2e_test". | |
| The golden-file regeneration target is named "regenerate_{name}_golden". | |
| Args: | |
| name: A unique name to qualify the created targets. | |
| input_file: The label string of the skylark input file for which documentation is generated | |
| in this test. | |
| golden_file: The label string of the golden file containing the documentation when skydoc | |
| is run on the input file. | |
| deps: A list of label strings of skylark file dependencies of the input_file. | |
| format: The output format of stardoc to test. | |
| Valid values: "custom", "html_tables", "markdown_tables", or "proto". | |
| "html_tables" by default. | |
| **kwargs: Remaining arguments to passthrough to the underlying stardoc rule. | |
| """ | |
| actual_generated_doc = "%s_output.txt" % name | |
| # Skydoc requires an absolute input file label to both load the target file and | |
| # track what its target is for the purpose of resolving relative labels. | |
| abs_input_file_label = str(Label("//%s" % native.package_name()).relative(input_file)) | |
| native.sh_test( | |
| name = "%s_e2e_test" % name, | |
| srcs = ["diff_test_runner.sh"], | |
| args = [ | |
| "$(location %s)" % actual_generated_doc, | |
| "$(location %s)" % golden_file, | |
| ], | |
| data = [ | |
| actual_generated_doc, | |
| golden_file, | |
| ], | |
| ) | |
| bzl_library( | |
| name = "%s_lib" % name, | |
| srcs = [input_file], | |
| deps = deps, | |
| ) | |
| # For rendering templates, use the templates under testdata/ instead of those of | |
| # current Stardoc; these templates serve as 'staging' for changes to | |
| # Stardoc's default templates. | |
| if format == "html_tables": | |
| kwargs["aspect_template"] = "test_templates/html_tables/aspect.vm" | |
| kwargs["func_template"] = "test_templates/html_tables/func.vm" | |
| kwargs["header_template"] = "test_templates/html_tables/header.vm" | |
| kwargs["provider_template"] = "test_templates/html_tables/provider.vm" | |
| kwargs["rule_template"] = "test_templates/html_tables/rule.vm" | |
| format = "custom" | |
| elif format == "markdown_tables": | |
| kwargs["aspect_template"] = "test_templates/markdown_tables/aspect.vm" | |
| kwargs["func_template"] = "test_templates/markdown_tables/func.vm" | |
| kwargs["header_template"] = "test_templates/markdown_tables/header.vm" | |
| kwargs["provider_template"] = "test_templates/markdown_tables/provider.vm" | |
| kwargs["rule_template"] = "test_templates/markdown_tables/rule.vm" | |
| format = "custom" | |
| stardoc( | |
| name = "regenerate_%s_golden" % name, | |
| out = actual_generated_doc, | |
| input = input_file, | |
| deps = ["%s_lib" % name], | |
| renderer = Label("//src/main/java/com/google/devtools/build/skydoc/renderer:renderer"), | |
| stardoc = Label("//src/main/java/com/google/devtools/build/skydoc:skydoc"), | |
| format = format, | |
| **kwargs | |
| ) |