| // Copyright 2022 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.lib.starlark; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| |
| import com.google.common.io.Files; |
| import com.google.devtools.build.lib.actions.Action; |
| import com.google.devtools.build.lib.actions.Artifact; |
| import com.google.devtools.build.lib.actions.util.ActionsTestUtil; |
| import com.google.devtools.build.lib.analysis.ConfiguredTarget; |
| import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; |
| import com.google.devtools.build.lib.testutil.Scratch; |
| import com.google.devtools.build.lib.testutil.TestConstants; |
| import com.google.devtools.build.lib.vfs.Path; |
| import com.google.devtools.build.runfiles.Runfiles; |
| import java.io.File; |
| import java.io.IOException; |
| import java.nio.charset.Charset; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| /** Tests for using bind() with Starlark rules. */ |
| @RunWith(JUnit4.class) |
| public class BindTest extends BuildViewTestCase { |
| |
| @Before |
| public final void createFiles() throws Exception { |
| Runfiles runfiles = Runfiles.preload().withSourceRepository(""); |
| analysisMock.javaSupport().setupRulesJava(mockToolsConfig, runfiles::rlocation); |
| setupStarlarkRules(scratch); |
| scratch.file( |
| "test/BUILD", |
| """ |
| load("//rules:java_rules_skylark.bzl", "java_library") |
| |
| java_library( |
| name = "giraffe", |
| srcs = ["Giraffe.java"], |
| ) |
| |
| java_library( |
| name = "safari", |
| srcs = ["Safari.java"], |
| deps = ["//external:long-horse"], |
| ) |
| """); |
| |
| // We need to overwrite the Jdk BUILD file because the Starlark rules also depend on having a |
| // jar target here, which the built-in rules don't need, and which therefore isn't part of the |
| // mock Java setup. |
| scratch.overwriteFile( |
| TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/jdk/BUILD", |
| "load('@rules_java//java:defs.bzl', 'java_runtime')", |
| "load(':java_toolchain_alias.bzl', 'java_runtime_alias')", |
| "package(default_visibility = ['//visibility:public'])", |
| "java_runtime_alias(name = 'current_java_runtime')", |
| "toolchain_type(name = 'runtime_toolchain_type')", |
| "toolchain(", |
| " name = 'java_runtime_toolchain',", |
| " toolchain_type = ':runtime_toolchain_type',", |
| " toolchain = ':jdk',", |
| ")", |
| "filegroup(name = 'java', srcs = ['bin/java'])", |
| "filegroup(name = 'jar', srcs = ['bin/jar'])", |
| "filegroup(name = 'javac', srcs = ['bin/javac'])", |
| "alias(name='host_jdk', actual=':jdk')", |
| "java_runtime(name = 'jdk', srcs = ['k8/empty', 'k8/empty2'], java_home = 'k8')", |
| "filegroup(name='toolchain', srcs=[])"); |
| |
| scratch.appendFile( |
| "WORKSPACE", |
| "register_toolchains('" + TestConstants.TOOLS_REPOSITORY + "//tools/jdk:all')", |
| "bind(", |
| " name = 'long-horse',", |
| " actual = '//test:giraffe',", |
| ")"); |
| } |
| |
| @Test |
| public void testFilesToBuild() throws Exception { |
| setBuildLanguageOptions("--enable_workspace"); |
| invalidatePackages(); |
| ConfiguredTarget giraffeTarget = getConfiguredTarget("//test:giraffe"); |
| Artifact giraffeArtifact = |
| ActionsTestUtil.getFirstArtifactEndingWith(getFilesToBuild(giraffeTarget), "giraffe.jar"); |
| ConfiguredTarget safariTarget = getConfiguredTarget("//test:safari"); |
| Action safariAction = |
| getGeneratingAction( |
| ActionsTestUtil.getFirstArtifactEndingWith( |
| getFilesToBuild(safariTarget), "safari.jar")); |
| assertThat(safariAction.getInputs().toList()).contains(giraffeArtifact); |
| } |
| |
| private static void setupStarlarkRules(Scratch scratch) throws IOException { |
| Runfiles runfiles = Runfiles.create(); |
| scratch.file("rules/BUILD"); |
| String rulesSourcePath = |
| runfiles.rlocation(TestConstants.BUILD_RULES_DATA_PATH + "java_rules_skylark.bzl"); |
| Path rulesDestinationPath = scratch.resolve("rules/java_rules_skylark.bzl"); |
| scratch.file( |
| rulesDestinationPath.getPathString(), |
| Files.asCharSource(new File(rulesSourcePath), Charset.defaultCharset()).read()); |
| } |
| } |