diff options
Diffstat (limited to 'src/test')
7 files changed, 218 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/skydoc/BUILD b/src/test/java/com/google/devtools/build/skydoc/BUILD new file mode 100644 index 0000000000..2416d5a339 --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/BUILD @@ -0,0 +1,83 @@ +package( + default_testonly = 1, + default_visibility = ["//src:__subpackages__"], +) + +filegroup( + name = "srcs", + testonly = 0, + srcs = glob(["**"]), + visibility = ["//src:__pkg__"], +) + +java_test( + name = "SkydocTest", + size = "medium", + srcs = ["SkydocTest.java"], + shard_count = 1, + visibility = ["//devtools/blaze/main:__pkg__"], + deps = [ + "//src/main/java/com/google/devtools/build/lib:syntax", + "//src/main/java/com/google/devtools/build/lib/vfs", + "//src/main/java/com/google/devtools/build/skydoc:skydoc_lib", + "//src/main/java/com/google/devtools/build/skydoc/rendering", + "//src/test/java/com/google/devtools/build/lib:testutil", + "//src/test/java/com/google/devtools/build/lib/skylark:testutil", + "//third_party:guava", + "//third_party:junit4", + "//third_party:truth", + ], +) + +# 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", + ], +) + +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"], +) diff --git a/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java b/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java new file mode 100644 index 0000000000..d80fe4ed35 --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java @@ -0,0 +1,67 @@ +// 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. + +package com.google.devtools.build.skydoc; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.skylark.util.SkylarkTestCase; +import com.google.devtools.build.lib.syntax.ParserInputSource; +import com.google.devtools.build.lib.vfs.FileSystemUtils; +import com.google.devtools.build.lib.vfs.Path; +import com.google.devtools.build.skydoc.rendering.RuleInfo; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Java tests for Skydoc. + */ +@RunWith(JUnit4.class) +public final class SkydocTest extends SkylarkTestCase { + + @Test + public void testRuleInfoAttrs() throws Exception { + Path file = + scratch.file( + "/test/test.bzl", + "def rule_impl(ctx):", + " return struct()", + "", + "my_rule = rule(", + " doc = 'This is my rule. It does stuff.',", + " implementation = rule_impl,", + " attrs = {", + " 'first': attr.label(mandatory=True, allow_files=True, single_file=True),", + " 'second': attr.string_dict(mandatory=True),", + " 'third': attr.output(mandatory=True),", + " 'fourth': attr.bool(default=False, mandatory=False),", + " },", + ")"); + byte[] bytes = FileSystemUtils.readWithKnownFileSize(file, file.getFileSize()); + + ParserInputSource parserInputSource = + ParserInputSource.create(bytes, file.asFragment()); + + List<RuleInfo> ruleInfos = new SkydocMain().eval(parserInputSource); + assertThat(ruleInfos).hasSize(1); + + RuleInfo ruleInfo = Iterables.getOnlyElement(ruleInfos); + assertThat(ruleInfo.getDocString()).isEqualTo("This is my rule. It does stuff."); + assertThat(ruleInfo.getAttrNames()).containsExactly( + "first", "second", "third", "fourth"); + } +} diff --git a/src/test/java/com/google/devtools/build/skydoc/simple_test/golden.txt b/src/test/java/com/google/devtools/build/skydoc/simple_test/golden.txt new file mode 100644 index 0000000000..0bf3a8c96a --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/simple_test/golden.txt @@ -0,0 +1,3 @@ +my_rule +This is my rule. It does stuff. +first,second,third,fourth diff --git a/src/test/java/com/google/devtools/build/skydoc/simple_test/input.txt b/src/test/java/com/google/devtools/build/skydoc/simple_test/input.txt new file mode 100644 index 0000000000..de1548b420 --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/simple_test/input.txt @@ -0,0 +1,13 @@ +def my_rule_impl(ctx): + return struct() + +my_rule = rule( + implementation = my_rule_impl, + doc = "This is my rule. It does stuff.", + attrs = { + "first": attr.label(mandatory = True, allow_files = True, single_file = True), + "second": attr.string_dict(mandatory = True), + "third": attr.output(mandatory = True), + "fourth": attr.bool(default = False, mandatory = False), + }, +) diff --git a/src/test/java/com/google/devtools/build/skydoc/skydoc_e2e_test_runner.sh b/src/test/java/com/google/devtools/build/skydoc/skydoc_e2e_test_runner.sh new file mode 100755 index 0000000000..c32973c17c --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/skydoc_e2e_test_runner.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# +# 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. +# +# Test skydoc output matches the expected golden file output. + +set -u + +skydoc_bin=$1 +input_file=$2 +golden_file=$3 + +actual_file="${TEST_TMPDIR}/actual" + +${skydoc_bin} ${input_file} ${actual_file} + +DIFF="$(diff ${actual_file} ${golden_file})" + +if [ "$DIFF" != "" ] +then + echo "Actual did not match golden." + echo "${DIFF}" + exit 1 +else + echo "Result matches golden file" +fi diff --git a/src/test/java/com/google/devtools/build/skydoc/unknown_name_test/golden.txt b/src/test/java/com/google/devtools/build/skydoc/unknown_name_test/golden.txt new file mode 100644 index 0000000000..9b49c77015 --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/unknown_name_test/golden.txt @@ -0,0 +1,2 @@ +<unknown name> +first,second,third,fourth diff --git a/src/test/java/com/google/devtools/build/skydoc/unknown_name_test/input.txt b/src/test/java/com/google/devtools/build/skydoc/unknown_name_test/input.txt new file mode 100644 index 0000000000..24c69d2905 --- /dev/null +++ b/src/test/java/com/google/devtools/build/skydoc/unknown_name_test/input.txt @@ -0,0 +1,12 @@ +def my_rule_impl(ctx): + return struct() + +rule( + implementation = my_rule_impl, + attrs = { + "first": attr.label(mandatory = True, allow_files = True, single_file = True), + "second": attr.string_dict(mandatory = True), + "third": attr.output(mandatory = True), + "fourth": attr.bool(default = False, mandatory = False), + }, +) |