diff options
author | 2017-07-11 16:50:27 +0200 | |
---|---|---|
committer | 2017-07-11 18:26:15 +0200 | |
commit | 64a6c153fe3650d1c28b5f5b44dd41032f0c28cc (patch) | |
tree | 087f04461e1770e91e20125f89604b3afbd86e03 /src/test/java/com/google/devtools/build/lib | |
parent | 2d05de2185920e9270edcfcc66e2e8b92668864d (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.java | 26 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/ExternalPackageUtilTest.java | 73 |
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; + } + } } |