aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2017-07-11 16:50:27 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-07-11 18:26:15 +0200
commit64a6c153fe3650d1c28b5f5b44dd41032f0c28cc (patch)
tree087f04461e1770e91e20125f89604b3afbd86e03 /src/test/java/com/google/devtools/build/lib
parent2d05de2185920e9270edcfcc66e2e8b92668864d (diff)
Add register_toolchains function to the WORKSPACE for registering toolchains to use.
Part of #2219. Change-Id: Id6dfe6ec102f609bb19461242a098bf977be29ae PiperOrigin-RevId: 161527986
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java26
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/ExternalPackageUtilTest.java73
2 files changed, 95 insertions, 4 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java
index 4fe5b7159f..6a69e94745 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTest.java
@@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.Package.Builder;
@@ -83,6 +84,31 @@ public class WorkspaceFactoryTest {
"workspace() function should be used only at the top of the WORKSPACE file");
}
+ @Test
+ public void testRegisterToolchains() throws Exception {
+ WorkspaceFactoryHelper helper = parse("register_toolchains('//toolchain:tc1')");
+ assertThat(helper.getPackage().getRegisteredToolchainLabels())
+ .containsExactly(Label.parseAbsolute("//toolchain:tc1"));
+ }
+
+ @Test
+ public void testRegisterToolchains_multipleLabels() throws Exception {
+ WorkspaceFactoryHelper helper =
+ parse("register_toolchains(", " '//toolchain:tc1',", " '//toolchain:tc2')");
+ assertThat(helper.getPackage().getRegisteredToolchainLabels())
+ .containsExactly(
+ Label.parseAbsolute("//toolchain:tc1"), Label.parseAbsolute("//toolchain:tc2"));
+ }
+
+ @Test
+ public void testRegisterToolchains_multipleCalls() throws Exception {
+ WorkspaceFactoryHelper helper =
+ parse("register_toolchains('//toolchain:tc1')", "register_toolchains('//toolchain:tc2')");
+ assertThat(helper.getPackage().getRegisteredToolchainLabels())
+ .containsExactly(
+ Label.parseAbsolute("//toolchain:tc1"), Label.parseAbsolute("//toolchain:tc2"));
+ }
+
private WorkspaceFactoryHelper parse(String... args) {
return new WorkspaceFactoryHelper(args);
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/ExternalPackageUtilTest.java b/src/test/java/com/google/devtools/build/lib/rules/ExternalPackageUtilTest.java
index 59027883de..b6a0037169 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/ExternalPackageUtilTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/ExternalPackageUtilTest.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.util.AnalysisMock;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.packages.PackageFactory;
@@ -36,6 +37,7 @@ import com.google.devtools.build.lib.skyframe.ExternalPackageFunction;
import com.google.devtools.build.lib.skyframe.FileFunction;
import com.google.devtools.build.lib.skyframe.FileStateFunction;
import com.google.devtools.build.lib.skyframe.LocalRepositoryLookupFunction;
+import com.google.devtools.build.lib.skyframe.PackageFunction;
import com.google.devtools.build.lib.skyframe.PackageLookupFunction;
import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy;
import com.google.devtools.build.lib.skyframe.PackageLookupValue.BuildFileName;
@@ -115,12 +117,15 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
new PackageFactory.EmptyEnvironmentExtension()))
.build(ruleClassProvider, scratch.getFileSystem()),
directories));
+ skyFunctions.put(
+ SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null));
skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
// Helper Skyfunctions to call ExternalPackageUtil.
skyFunctions.put(GET_RULE_BY_NAME_FUNCTION, new GetRuleByNameFunction());
skyFunctions.put(GET_RULE_BY_RULE_CLASS_FUNCTION, new GetRuleByRuleClassFunction());
+ skyFunctions.put(GET_REGISTERED_TOOLCHAINS_FUNCTION, new GetRegisteredToolchainsFunction());
RecordingDifferencer differencer = new RecordingDifferencer();
MemoizingEvaluator evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer);
@@ -134,7 +139,6 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
return;
}
scratch.overwriteFile("WORKSPACE", "http_archive(name = 'foo', url = 'http://foo')");
- invalidatePackages(false);
SkyKey key = getRuleByNameKey("foo");
EvaluationResult<GetRuleByNameValue> result = getRuleByName(key);
@@ -152,7 +156,6 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
return;
}
scratch.overwriteFile("WORKSPACE", "http_archive(name = 'foo', url = 'http://foo')");
- invalidatePackages(false);
SkyKey key = getRuleByNameKey("bar");
EvaluationResult<GetRuleByNameValue> result = getRuleByName(key);
@@ -173,7 +176,6 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
"WORKSPACE",
"http_archive(name = 'foo', url = 'http://foo')",
"http_archive(name = 'bar', url = 'http://bar')");
- invalidatePackages(false);
SkyKey key = getRuleByRuleClassKey("http_archive");
EvaluationResult<GetRuleByRuleClassValue> result = getRuleByRuleClass(key);
@@ -201,7 +203,6 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
"WORKSPACE",
"http_archive(name = 'foo', url = 'http://foo')",
"http_archive(name = 'bar', url = 'http://bar')");
- invalidatePackages(false);
SkyKey key = getRuleByRuleClassKey("new_git_repository");
EvaluationResult<GetRuleByRuleClassValue> result = getRuleByRuleClass(key);
@@ -213,6 +214,21 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
assertThat(rules).isEmpty();
}
+ @Test
+ public void getRegisteredToolchains() throws Exception {
+ scratch.overwriteFile(
+ "WORKSPACE", "register_toolchains(", " '//toolchain:tc1',", " '//toolchain:tc2')");
+
+ SkyKey key = getRegisteredToolchainsKey();
+ EvaluationResult<GetRegisteredToolchainsValue> result = getRegisteredToolchains(key);
+
+ assertThatEvaluationResult(result).hasNoError();
+
+ assertThat(result.get(key).registeredToolchainLabels())
+ .containsExactly(makeLabel("//toolchain:tc1"), makeLabel("//toolchain:tc2"))
+ .inOrder();
+ }
+
// HELPER SKYFUNCTIONS
// GetRuleByName.
@@ -310,4 +326,53 @@ public class ExternalPackageUtilTest extends BuildViewTestCase {
return null;
}
}
+
+ // GetRegisteredToolchains.
+ SkyKey getRegisteredToolchainsKey() {
+ return LegacySkyKey.create(GET_REGISTERED_TOOLCHAINS_FUNCTION, "singleton");
+ }
+
+ EvaluationResult<GetRegisteredToolchainsValue> getRegisteredToolchains(SkyKey key)
+ throws InterruptedException {
+ return driver.<GetRegisteredToolchainsValue>evaluate(
+ ImmutableList.of(key),
+ false,
+ SkyframeExecutor.DEFAULT_THREAD_COUNT,
+ NullEventHandler.INSTANCE);
+ }
+
+ private static final SkyFunctionName GET_REGISTERED_TOOLCHAINS_FUNCTION =
+ SkyFunctionName.create("GET_REGISTERED_TOOLCHAINS");
+
+ @AutoValue
+ abstract static class GetRegisteredToolchainsValue implements SkyValue {
+ abstract ImmutableList<Label> registeredToolchainLabels();
+
+ static GetRegisteredToolchainsValue create(Iterable<Label> registeredToolchainLabels) {
+ return new AutoValue_ExternalPackageUtilTest_GetRegisteredToolchainsValue(
+ ImmutableList.copyOf(registeredToolchainLabels));
+ }
+ }
+
+ private static final class GetRegisteredToolchainsFunction implements SkyFunction {
+
+ @Nullable
+ @Override
+ public SkyValue compute(SkyKey skyKey, Environment env)
+ throws SkyFunctionException, InterruptedException {
+ String ruleName = (String) skyKey.argument();
+
+ List<Label> registeredToolchainLabels = ExternalPackageUtil.getRegisteredToolchainLabels(env);
+ if (registeredToolchainLabels == null) {
+ return null;
+ }
+ return GetRegisteredToolchainsValue.create(registeredToolchainLabels);
+ }
+
+ @Nullable
+ @Override
+ public String extractTag(SkyKey skyKey) {
+ return null;
+ }
+ }
}