aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2016-11-22 16:18:48 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-11-22 18:15:08 +0000
commit8bb7b8fa364639c09dc4a50b5c960e1867b8e283 (patch)
tree9b1bb1f83f3a7cf4612195554e4dd449247ef8cd /src/test/java/com
parent0edd35414dbe916457c5e98d7c08e1b4cfcf8d57 (diff)
Initial checkin of the toolchain_lookup() rule for expressing explicit dependencies on Make variables and toolchains.
I'm not particularly happy with the fact that it needs to depend on every configuration fragment that defines Make variables, but this seemed more reasonable than having a rule class for every fragment, just to have a lonely single rule of that class. -- MOS_MIGRATED_REVID=139910229
Diffstat (limited to 'src/test/java/com')
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/ToolchainLookupTest.java33
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java49
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java1
5 files changed, 85 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
index 521d56a927..47708aac83 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
@@ -77,6 +77,7 @@ public final class BazelMockCcSupport extends MockCcSupport {
config.create(
"/bazel_tools_workspace/tools/cpp/BUILD",
"package(default_visibility=['//visibility:public'])",
+ "toolchain_lookup(name = 'lookup')",
"cc_library(name = 'stl')",
"cc_library(name = 'malloc')",
"cc_toolchain_suite(",
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index 5901aced64..b24bd9fc30 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -498,6 +498,7 @@ public abstract class MockCcSupport {
config.create(
"tools/cpp/BUILD",
"package(default_visibility = ['//visibility:public'])",
+ "toolchain_lookup(name = 'lookup')",
"cc_library(name = 'stl')",
"alias(name='toolchain', actual='//third_party/crosstool')",
"cc_library(name = 'malloc')",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/ToolchainLookupTest.java b/src/test/java/com/google/devtools/build/lib/rules/ToolchainLookupTest.java
new file mode 100644
index 0000000000..54a8d584e7
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/rules/ToolchainLookupTest.java
@@ -0,0 +1,33 @@
+// Copyright 2016 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.rules;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import org.junit.Test;
+
+/**
+ * Unit tests for the {@code toolchain_lookup} rule.
+ */
+public class ToolchainLookupTest extends BuildViewTestCase {
+ @Test
+ public void testSmoke() throws Exception {
+ ConfiguredTarget cc = getConfiguredTarget(getRuleClassProvider().getToolsRepository()
+ + "//tools/cpp:lookup");
+ assertThat(cc.getProvider(ToolchainProvider.class).getMakeVariables())
+ .containsKey("TARGET_CPU");
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
index cf29915a7d..7900089899 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java
@@ -21,23 +21,32 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
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.AnalysisUtils;
+import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.OutputGroupProvider;
+import com.google.devtools.build.lib.analysis.RuleDefinition;
+import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.ConfigurationFactory;
import com.google.devtools.build.lib.analysis.mock.BazelAnalysisMock;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider;
+import com.google.devtools.build.lib.bazel.rules.BazelToolchainLookup;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.flags.InvocationPolicyEnforcer;
+import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.rules.ToolchainLookup;
import com.google.devtools.build.lib.testutil.MoreAsserts;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.OsUtils;
@@ -813,6 +822,45 @@ public class CcCommonTest extends BuildViewTestCase {
RepositoryName.MAIN).getExecPath().getPathString()));
}
+ /**
+ * A {@code toolchain_lookup} rule for testing that only supports C++.
+ */
+ public static class OnlyCppToolchainLookup extends ToolchainLookup {
+ public OnlyCppToolchainLookup() {
+ super(
+ ImmutableMap.<Label, Class<? extends BuildConfiguration.Fragment>>of(),
+ ImmutableMap.<Label, ImmutableMap<String, String>>of());
+ }
+ }
+
+ /**
+ * A {@code toolchain_lookup} rule for testing that only supports C++.
+ */
+ public static class OnlyCppToolchainLookupRule implements RuleDefinition {
+ @Override
+ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
+ return builder
+ // This means that *every* toolchain_lookup rule depends on every configuration fragment
+ // that contributes Make variables, regardless of which one it is.
+ .requiresConfigurationFragments(CppConfiguration.class)
+ .removeAttribute("licenses")
+ .removeAttribute("distribs")
+ .build();
+ }
+
+ @Override
+ public Metadata getMetadata() {
+ return Metadata.builder()
+ .name("toolchain_lookup")
+ .factoryClass(BazelToolchainLookup.class)
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .build();
+ }
+ }
+
+ /**
+ * Tests for the case where there are only C++ rules defined.
+ */
@RunWith(JUnit4.class)
public static class OnlyCppRules extends CcCommonTest {
@Override
@@ -835,6 +883,7 @@ public class CcCommonTest extends BuildViewTestCase {
BazelRuleClassProvider.CORE_WORKSPACE_RULES.init(builder);
BazelRuleClassProvider.BASIC_RULES.init(builder);
BazelRuleClassProvider.CPP_RULES.init(builder);
+ builder.addRuleDefinition(new OnlyCppToolchainLookupRule());
return builder.build();
}
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
index 15277ff181..b60dacea9a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
@@ -565,6 +565,7 @@ public class SkylarkRuleContextTest extends SkylarkTestCase {
"srcs",
"stamp",
"tags",
+ "toolchains",
"tools",
"visibility")),
result);