diff options
author | Chris Parsons <cparsons@google.com> | 2016-04-19 22:13:59 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-04-20 11:17:13 +0000 |
commit | 2e62c0d5ac01a2cb4a3534f73519a5ad92cef60c (patch) | |
tree | ccb56a57e7f3602c3acf9f89379062b46ad1a27e /src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java | |
parent | 66cf13874a3c8f866aeace2d59231e30ca4a5032 (diff) |
Introduce SplitTransitionProvider, to determine the split transition on an attribute based on the Rule itself (the transition may thus be determined based on the values of other attributes of the rule)
--
MOS_MIGRATED_REVID=120275649
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java index b8a6f49534..07d5a28c3b 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.packages; import static com.google.common.truth.Truth.assertThat; import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST; +import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.SPLIT; import static com.google.devtools.build.lib.packages.Attribute.attr; import static com.google.devtools.build.lib.packages.BuildType.LABEL; import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; @@ -27,8 +28,12 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.packages.Attribute.SplitTransition; +import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; @@ -258,4 +263,49 @@ public class AttributeTest { assertFalse(attr("foo_nonconfigurable", BuildType.LABEL_LIST).legacyAllowAnyFileType() .nonconfigurable("test").build().isConfigurable()); } + + @Test + public void testSplitTransition() throws Exception { + TestSplitTransition splitTransition = new TestSplitTransition(); + Attribute attr = attr("foo", LABEL).cfg(splitTransition).allowedFileTypes().build(); + assertThat(attr.getConfigurationTransition()).isEqualTo(SPLIT); + assertTrue(attr.hasSplitConfigurationTransition()); + assertThat(attr.getSplitTransition(null)).isEqualTo(splitTransition); + } + + @Test + public void testSplitTransitionProvider() throws Exception { + TestSplitTransitionProvider splitTransitionProvider = new TestSplitTransitionProvider(); + Attribute attr = + attr("foo", LABEL).cfg(splitTransitionProvider).allowedFileTypes().build(); + assertThat(attr.getConfigurationTransition()).isEqualTo(SPLIT); + assertTrue(attr.hasSplitConfigurationTransition()); + assertTrue(attr.getSplitTransition(null) instanceof TestSplitTransition); + } + + @Test + public void testHostTransition() throws Exception { + Attribute attr = attr("foo", LABEL).cfg(HOST).allowedFileTypes().build(); + assertThat(attr.getConfigurationTransition()).isEqualTo(HOST); + assertFalse(attr.hasSplitConfigurationTransition()); + } + + private static class TestSplitTransition implements SplitTransition<BuildOptions> { + @Override + public boolean defaultsToSelf() { + return true; + } + + @Override + public List<BuildOptions> split(BuildOptions buildOptions) { + return ImmutableList.of(buildOptions.clone(), buildOptions.clone()); + } + } + + private static class TestSplitTransitionProvider implements SplitTransitionProvider { + @Override + public SplitTransition<?> apply(Rule fromRule) { + return new TestSplitTransition(); + } + } } |