Create a skydoc_test macro for ease of golden-file testing of skydoc

RELNOTES: None.
PiperOrigin-RevId: 202339577
diff --git a/src/test/java/com/google/devtools/build/skydoc/BUILD b/src/test/java/com/google/devtools/build/skydoc/BUILD
index 2416d5a..d6daaa3 100644
--- a/src/test/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/test/java/com/google/devtools/build/skydoc/BUILD
@@ -1,3 +1,5 @@
+load(":skydoc_test.bzl", "skydoc_test")
+
 package(
     default_testonly = 1,
     default_visibility = ["//src:__subpackages__"],
@@ -29,55 +31,16 @@
     ],
 )
 
-# TODO(cparsons): Make test cases and golden-genrules into a macro.
-sh_test(
-    name = "simple_skydoc_e2e_test",
-    srcs = ["skydoc_e2e_test_runner.sh"],
-    args = [
-        "$(location //src/main/java/com/google/devtools/build/skydoc:skydoc)",
-        "$(location simple_test/input.txt)",
-        "$(location simple_test/golden.txt)",
-    ],
-    data = [
-        "simple_test/golden.txt",
-        "simple_test/input.txt",
-        "//src/main/java/com/google/devtools/build/skydoc",
-    ],
+skydoc_test(
+    name = "simple_test",
+    golden_file = "simple_test/golden.txt",
+    input_file = "simple_test/input.txt",
+    skydoc = "//src/main/java/com/google/devtools/build/skydoc",
 )
 
-genrule(
-    name = "regenerate_simple_golden",
-    srcs = [
-        "simple_test/input.txt",
-    ],
-    outs = ["simple_output.txt"],
-    cmd = "$(location //src/main/java/com/google/devtools/build/skydoc:skydoc) " +
-          "$(location simple_test/input.txt) $(location simple_output.txt)",
-    tools = ["//src/main/java/com/google/devtools/build/skydoc"],
-)
-
-sh_test(
-    name = "unknown_name_skydoc_e2e_test",
-    srcs = ["skydoc_e2e_test_runner.sh"],
-    args = [
-        "$(location //src/main/java/com/google/devtools/build/skydoc:skydoc)",
-        "$(location unknown_name_test/input.txt)",
-        "$(location unknown_name_test/golden.txt)",
-    ],
-    data = [
-        "unknown_name_test/golden.txt",
-        "unknown_name_test/input.txt",
-        "//src/main/java/com/google/devtools/build/skydoc",
-    ],
-)
-
-genrule(
-    name = "regenerate_unknown_name_golden",
-    srcs = [
-        "unknown_name_test/input.txt",
-    ],
-    outs = ["unknown_name_output.txt"],
-    cmd = "$(location //src/main/java/com/google/devtools/build/skydoc:skydoc) " +
-          "$(location unknown_name_test/input.txt) $(location unknown_name_output.txt)",
-    tools = ["//src/main/java/com/google/devtools/build/skydoc"],
+skydoc_test(
+    name = "unknown_name",
+    golden_file = "unknown_name_test/golden.txt",
+    input_file = "unknown_name_test/input.txt",
+    skydoc = "//src/main/java/com/google/devtools/build/skydoc",
 )
diff --git a/src/test/java/com/google/devtools/build/skydoc/skydoc_test.bzl b/src/test/java/com/google/devtools/build/skydoc/skydoc_test.bzl
new file mode 100644
index 0000000..f36e877
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/skydoc/skydoc_test.bzl
@@ -0,0 +1,59 @@
+# 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:
+# a shell test verifying the contents of the golden file, and a genrule
+# which will regenerate the golden file.
+"""Convenience macro for skydoc tests."""
+
+def skydoc_test(name, input_file, golden_file, skydoc):
+    """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.
+      skydoc: The label string of the skydoc binary.
+    """
+    output_golden_file = "%s_output.txt" % name
+    native.sh_test(
+        name = "%s_e2e_test" % name,
+        srcs = ["skydoc_e2e_test_runner.sh"],
+        args = [
+            "$(location %s)" % skydoc,
+            "$(location %s)" % input_file,
+            "$(location %s)" % golden_file,
+        ],
+        data = [
+            input_file,
+            golden_file,
+            skydoc,
+        ],
+    )
+
+    native.genrule(
+        name = "regenerate_%s_golden" % name,
+        srcs = [
+            input_file,
+        ],
+        outs = [output_golden_file],
+        cmd = "$(location %s) " % skydoc +
+              "$(location %s) $(location %s)" % (input_file, output_golden_file),
+        tools = [skydoc],
+    )