Add fake build API implementations for config, platform, repository, and test packages.

RELNOTES: None.
PiperOrigin-RevId: 202642995
diff --git a/src/main/java/com/google/devtools/build/skydoc/BUILD b/src/main/java/com/google/devtools/build/skydoc/BUILD
index b80bfab..ebe5f89 100644
--- a/src/main/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/main/java/com/google/devtools/build/skydoc/BUILD
@@ -17,6 +17,10 @@
     srcs = glob(["**"]) + [
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi:srcs",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple:srcs",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config:srcs",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform:srcs",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository:srcs",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test:srcs",
         "//src/main/java/com/google/devtools/build/skydoc/rendering:srcs",
     ],
 )
@@ -37,9 +41,17 @@
         "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
         "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
         "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/apple",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test",
         "//src/main/java/com/google/devtools/build/skydoc/rendering",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index 8466f20..a6d4584 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -20,6 +20,10 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.skylarkbuildapi.TopLevelBootstrap;
 import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.platform.PlatformBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.repository.RepositoryBootstrap;
+import com.google.devtools.build.lib.skylarkbuildapi.test.TestingBootstrap;
 import com.google.devtools.build.lib.syntax.BaseFunction;
 import com.google.devtools.build.lib.syntax.BuildFileAST;
 import com.google.devtools.build.lib.syntax.Environment;
@@ -41,6 +45,10 @@
 import com.google.devtools.build.skydoc.fakebuildapi.FakeSkylarkRuleFunctionsApi;
 import com.google.devtools.build.skydoc.fakebuildapi.FakeStructApi.FakeStructProviderApi;
 import com.google.devtools.build.skydoc.fakebuildapi.apple.FakeAppleCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.config.FakeConfigSkylarkCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.platform.FakePlatformCommon;
+import com.google.devtools.build.skydoc.fakebuildapi.repository.FakeRepositoryModule;
+import com.google.devtools.build.skydoc.fakebuildapi.test.FakeTestingModule;
 import com.google.devtools.build.skydoc.rendering.RuleInfo;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -228,6 +236,10 @@
             new FakeActionsInfoProvider(),
             new FakeDefaultInfoProvider());
     AppleBootstrap appleBootstrap = new AppleBootstrap(new FakeAppleCommon());
+    ConfigBootstrap configBootstrap = new ConfigBootstrap(new FakeConfigSkylarkCommon());
+    PlatformBootstrap platformBootstrap = new PlatformBootstrap(new FakePlatformCommon());
+    RepositoryBootstrap repositoryBootstrap = new RepositoryBootstrap(new FakeRepositoryModule());
+    TestingBootstrap testingBootstrap = new TestingBootstrap(new FakeTestingModule());
 
     ImmutableMap.Builder<String, Object> envBuilder = ImmutableMap.builder();
 
@@ -235,6 +247,10 @@
     MethodLibrary.addBindingsToBuilder(envBuilder);
     topLevelBootstrap.addBindingsToBuilder(envBuilder);
     appleBootstrap.addBindingsToBuilder(envBuilder);
+    configBootstrap.addBindingsToBuilder(envBuilder);
+    platformBootstrap.addBindingsToBuilder(envBuilder);
+    repositoryBootstrap.addBindingsToBuilder(envBuilder);
+    testingBootstrap.addBindingsToBuilder(envBuilder);
 
     return GlobalFrame.createForBuiltins(envBuilder.build());
   }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
new file mode 100644
index 0000000..337cb58
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/BUILD
@@ -0,0 +1,23 @@
+package(
+    default_visibility = ["//src:__subpackages__"],
+)
+
+licenses(["notice"])  # Apache 2.0
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+)
+
+java_library(
+    name = "config",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/config",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+        "//third_party:guava",
+        "//third_party:jsr305",
+    ],
+)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigSkylarkCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigSkylarkCommon.java
new file mode 100644
index 0000000..f40b698
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/config/FakeConfigSkylarkCommon.java
@@ -0,0 +1,30 @@
+// 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.fakebuildapi.config;
+
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.config.ConfigSkylarkCommonApi;
+import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+
+/**
+ * Fake implementation of {@link ConfigSkylarkCommonApi}.
+ */
+public class FakeConfigSkylarkCommon implements ConfigSkylarkCommonApi {
+
+  @Override
+  public ProviderApi getConfigFeatureFlagProviderConstructor() {
+    return new FakeProviderApi();
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform/BUILD
new file mode 100644
index 0000000..91a9969
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform/BUILD
@@ -0,0 +1,23 @@
+package(
+    default_visibility = ["//src:__subpackages__"],
+)
+
+licenses(["notice"])  # Apache 2.0
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+)
+
+java_library(
+    name = "platform",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/platform",
+        "//src/main/java/com/google/devtools/build/skydoc/fakebuildapi",
+        "//third_party:guava",
+        "//third_party:jsr305",
+    ],
+)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform/FakePlatformCommon.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform/FakePlatformCommon.java
new file mode 100644
index 0000000..2126581
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/platform/FakePlatformCommon.java
@@ -0,0 +1,35 @@
+// 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.fakebuildapi.platform;
+
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.platform.PlatformCommonApi;
+import com.google.devtools.build.skydoc.fakebuildapi.FakeProviderApi;
+
+/**
+ * Fake implementation of {@link PlatformCommonApi}.
+ */
+public class FakePlatformCommon implements PlatformCommonApi {
+
+  @Override
+  public ProviderApi getMakeVariableProvider() {
+    return new FakeProviderApi();
+  }
+
+  @Override
+  public ProviderApi getToolchainInfoConstructor() {
+    return new FakeProviderApi();
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
new file mode 100644
index 0000000..a86c797
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/BUILD
@@ -0,0 +1,22 @@
+package(
+    default_visibility = ["//src:__subpackages__"],
+)
+
+licenses(["notice"])  # Apache 2.0
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+)
+
+java_library(
+    name = "repository",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/repository",
+        "//third_party:guava",
+        "//third_party:jsr305",
+    ],
+)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
new file mode 100644
index 0000000..8f22cb7
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
@@ -0,0 +1,33 @@
+// 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.fakebuildapi.repository;
+
+import com.google.devtools.build.lib.skylarkbuildapi.repository.RepositoryModuleApi;
+import com.google.devtools.build.lib.syntax.BaseFunction;
+import com.google.devtools.build.lib.syntax.Environment;
+import com.google.devtools.build.lib.syntax.FuncallExpression;
+import com.google.devtools.build.lib.syntax.SkylarkList;
+
+/**
+ * Fake implementation of {@link RepositoryModuleApi}.
+ */
+public class FakeRepositoryModule implements RepositoryModuleApi {
+
+  @Override
+  public BaseFunction repositoryRule(BaseFunction implementation, Object attrs, Boolean local,
+      SkylarkList<String> environ, FuncallExpression ast, Environment env) {
+    return implementation;
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
new file mode 100644
index 0000000..0eb841b
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/BUILD
@@ -0,0 +1,23 @@
+package(
+    default_visibility = ["//src:__subpackages__"],
+)
+
+licenses(["notice"])  # Apache 2.0
+
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+)
+
+java_library(
+    name = "test",
+    srcs = glob(["*.java"]),
+    deps = [
+        "//src/main/java/com/google/devtools/build/lib:events",
+        "//src/main/java/com/google/devtools/build/lib:skylarkinterface",
+        "//src/main/java/com/google/devtools/build/lib:syntax",
+        "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/test",
+        "//third_party:guava",
+        "//third_party:jsr305",
+    ],
+)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
new file mode 100644
index 0000000..fc55450
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeExecutionInfo.java
@@ -0,0 +1,45 @@
+// 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.fakebuildapi.test;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skylarkbuildapi.test.ExecutionInfoApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.EvalException;
+
+/**
+ * Fake implementation of {@link ExecutionInfoApi}.
+ */
+public class FakeExecutionInfo implements ExecutionInfoApi {
+
+  @Override
+  public ImmutableMap<String, String> getExecutionInfo() {
+    return ImmutableMap.of();
+  }
+
+  @Override
+  public String toProto(Location loc) throws EvalException {
+    return "";
+  }
+
+  @Override
+  public String toJson(Location loc) throws EvalException {
+    return "";
+  }
+
+  @Override
+  public void repr(SkylarkPrinter printer) {}
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
new file mode 100644
index 0000000..2605715
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingEnvironmentInfo.java
@@ -0,0 +1,46 @@
+// 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.fakebuildapi.test;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.events.Location;
+import com.google.devtools.build.lib.skylarkbuildapi.test.TestEnvironmentInfoApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.EvalException;
+import java.util.Map;
+
+/**
+ * Fake implementation of {@link TestEnvironmentInfoApi}.
+ */
+public class FakeTestingEnvironmentInfo implements TestEnvironmentInfoApi {
+
+  @Override
+  public Map<String, String> getEnvironment() {
+    return ImmutableMap.of();
+  }
+
+  @Override
+  public String toProto(Location loc) throws EvalException {
+    return "";
+  }
+
+  @Override
+  public String toJson(Location loc) throws EvalException {
+    return "";
+  }
+
+  @Override
+  public void repr(SkylarkPrinter printer) {}
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
new file mode 100644
index 0000000..ccd2bba
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/test/FakeTestingModule.java
@@ -0,0 +1,36 @@
+// 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.fakebuildapi.test;
+
+import com.google.devtools.build.lib.skylarkbuildapi.test.ExecutionInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.test.TestEnvironmentInfoApi;
+import com.google.devtools.build.lib.skylarkbuildapi.test.TestingModuleApi;
+import com.google.devtools.build.lib.syntax.SkylarkDict;
+
+/**
+ * Fake implementation of {@link TestingModuleApi}.
+ */
+public class FakeTestingModule implements TestingModuleApi {
+
+  @Override
+  public ExecutionInfoApi executionInfo(SkylarkDict<String, String> requirements) {
+    return new FakeExecutionInfo();
+  }
+
+  @Override
+  public TestEnvironmentInfoApi testEnvironment(SkylarkDict<String, String> environment) {
+    return new FakeTestingEnvironmentInfo();
+  }
+}
diff --git a/src/test/java/com/google/devtools/build/skydoc/BUILD b/src/test/java/com/google/devtools/build/skydoc/BUILD
index af9f141..6a2ab76 100644
--- a/src/test/java/com/google/devtools/build/skydoc/BUILD
+++ b/src/test/java/com/google/devtools/build/skydoc/BUILD
@@ -69,3 +69,10 @@
         "testdata/multiple_files_test/inner_dep.bzl",
     ],
 )
+
+skydoc_test(
+    name = "misc_apis_test",
+    golden_file = "testdata/misc_apis_test/golden.txt",
+    input_file = "testdata/misc_apis_test/input.bzl",
+    skydoc = "//src/main/java/com/google/devtools/build/skydoc",
+)
diff --git a/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt
new file mode 100644
index 0000000..5880c8c
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt
@@ -0,0 +1,4 @@
+my_rule
+This rule exercises some of the build API.
+first,second,third,fourth
+
diff --git a/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl
new file mode 100644
index 0000000..39ca085
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl
@@ -0,0 +1,21 @@
+def my_rule_impl(ctx):
+    return struct()
+
+def exercise_the_api():
+    var1 = config_common.FeatureFlagInfo
+    var2 = platform_common.TemplateVariableInfo
+    var3 = repository_rule(implementation = my_rule_impl)
+    var4 = testing.ExecutionInfo({})
+
+exercise_the_api()
+
+my_rule = rule(
+    implementation = my_rule_impl,
+    doc = "This rule exercises some of the build API.",
+    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),
+    },
+)