diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/BUILD | 1 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java | 174 |
2 files changed, 175 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD index d2366813e9..4b622f3860 100644 --- a/src/test/java/com/google/devtools/build/lib/BUILD +++ b/src/test/java/com/google/devtools/build/lib/BUILD @@ -574,6 +574,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib:build-base", "//src/main/java/com/google/devtools/build/lib:events", "//src/main/java/com/google/devtools/build/lib:packages", + "//src/main/java/com/google/devtools/build/lib:skylarkinterface", "//src/main/java/com/google/devtools/build/lib:util", "//src/main/java/com/google/devtools/build/lib:vfs", "//src/main/java/com/google/devtools/build/skyframe", diff --git a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java new file mode 100644 index 0000000000..a3ea359781 --- /dev/null +++ b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java @@ -0,0 +1,174 @@ +// 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.packages; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.common.collect.ImmutableSet; +import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; +import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Tests for the ConfigurationFragmentPolicy builder and methods. + */ +@RunWith(JUnit4.class) +public final class ConfigurationFragmentPolicyTest { + + @SkylarkModule(name = "test_fragment", doc = "first fragment") + private static final class TestFragment {} + + @SkylarkModule(name = "other_fragment", doc = "second fragment") + private static final class OtherFragment {} + + @SkylarkModule(name = "unknown_fragment", doc = "useless waste of permgen") + private static final class UnknownFragment {} + + @Test + public void testMissingFragmentPolicy() throws Exception { + ConfigurationFragmentPolicy policy = + new ConfigurationFragmentPolicy.Builder() + .setMissingFragmentPolicy(MissingFragmentPolicy.IGNORE) + .build(); + + assertThat(policy.getMissingFragmentPolicy()).isEqualTo(MissingFragmentPolicy.IGNORE); + + ConfigurationFragmentPolicy otherPolicy = + new ConfigurationFragmentPolicy.Builder() + .setMissingFragmentPolicy(MissingFragmentPolicy.CREATE_FAIL_ACTIONS) + .build(); + + assertThat(otherPolicy.getMissingFragmentPolicy()) + .isEqualTo(MissingFragmentPolicy.CREATE_FAIL_ACTIONS); + } + + @Test + public void testRequiresConfigurationFragments_AddsToRequiredSet() throws Exception { + // Although these aren't configuration fragments, there are no requirements as to what the class + // has to be, so... + ConfigurationFragmentPolicy policy = + new ConfigurationFragmentPolicy.Builder() + .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(Integer.class, String.class)) + .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(String.class, Long.class)) + .build(); + + assertThat(policy.getRequiredConfigurationFragments()) + .containsExactly(Integer.class, String.class, Long.class); + } + + @Test + public void testRequiresConfigurationFragments_RequiredAndLegalForSpecifiedConfiguration() + throws Exception { + ConfigurationFragmentPolicy policy = + new ConfigurationFragmentPolicy.Builder() + .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(Integer.class)) + .requiresHostConfigurationFragments(ImmutableSet.<Class<?>>of(Long.class)) + .build(); + + assertThat(policy.getRequiredConfigurationFragments()).containsAllOf(Integer.class, Long.class); + + assertThat(policy.isLegalConfigurationFragment(Integer.class)).isTrue(); + assertThat(policy.isLegalConfigurationFragment(Integer.class, ConfigurationTransition.NONE)) + .isTrue(); + // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was + // specified for + assertThat(policy.isLegalConfigurationFragment(Integer.class, ConfigurationTransition.HOST)) + .isTrue(); + + assertThat(policy.isLegalConfigurationFragment(Long.class)).isTrue(); + // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was + // specified for + assertThat(policy.isLegalConfigurationFragment(Long.class, ConfigurationTransition.NONE)) + .isTrue(); + assertThat(policy.isLegalConfigurationFragment(Long.class, ConfigurationTransition.HOST)) + .isTrue(); + + assertThat(policy.isLegalConfigurationFragment(String.class)).isFalse(); + assertThat(policy.isLegalConfigurationFragment(String.class, ConfigurationTransition.NONE)) + .isFalse(); + assertThat(policy.isLegalConfigurationFragment(String.class, ConfigurationTransition.HOST)) + .isFalse(); + } + + @Test + public void testRequiresConfigurationFragments_MapSetsLegalityBySkylarkModuleName_NoRequires() + throws Exception { + ConfigurationFragmentPolicy policy = + new ConfigurationFragmentPolicy.Builder() + .requiresConfigurationFragmentsBySkylarkModuleName(ImmutableSet.of("test_fragment")) + .requiresHostConfigurationFragmentsBySkylarkModuleName( + ImmutableSet.of("other_fragment")) + .build(); + + assertThat(policy.getRequiredConfigurationFragments()).isEmpty(); + + assertThat(policy.isLegalConfigurationFragment(TestFragment.class)).isTrue(); + assertThat( + policy.isLegalConfigurationFragment(TestFragment.class, ConfigurationTransition.NONE)) + .isTrue(); + assertThat( + policy.isLegalConfigurationFragment(TestFragment.class, ConfigurationTransition.HOST)) + .isFalse(); + + assertThat(policy.isLegalConfigurationFragment(OtherFragment.class)).isTrue(); + assertThat( + policy.isLegalConfigurationFragment(OtherFragment.class, ConfigurationTransition.NONE)) + .isFalse(); + assertThat( + policy.isLegalConfigurationFragment(OtherFragment.class, ConfigurationTransition.HOST)) + .isTrue(); + + assertThat(policy.isLegalConfigurationFragment(UnknownFragment.class)).isFalse(); + assertThat( + policy.isLegalConfigurationFragment( + UnknownFragment.class, ConfigurationTransition.NONE)) + .isFalse(); + assertThat( + policy.isLegalConfigurationFragment( + UnknownFragment.class, ConfigurationTransition.HOST)) + .isFalse(); + } + + @Test + public void testIncludeConfigurationFragmentsFrom_MergesWithExistingFragmentSet() + throws Exception { + ConfigurationFragmentPolicy basePolicy = + new ConfigurationFragmentPolicy.Builder() + .requiresConfigurationFragmentsBySkylarkModuleName(ImmutableSet.of("test_fragment")) + .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(Integer.class, Double.class)) + .build(); + ConfigurationFragmentPolicy addedPolicy = + new ConfigurationFragmentPolicy.Builder() + .requiresConfigurationFragmentsBySkylarkModuleName(ImmutableSet.of("other_fragment")) + .requiresHostConfigurationFragmentsBySkylarkModuleName( + ImmutableSet.of("other_fragment")) + .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(Boolean.class)) + .requiresHostConfigurationFragments(ImmutableSet.<Class<?>>of(Character.class)) + .build(); + ConfigurationFragmentPolicy combinedPolicy = + new ConfigurationFragmentPolicy.Builder() + .includeConfigurationFragmentsFrom(basePolicy) + .includeConfigurationFragmentsFrom(addedPolicy) + .build(); + + assertThat(combinedPolicy.getRequiredConfigurationFragments()) + .containsExactly(Integer.class, Double.class, Boolean.class, Character.class); + assertThat(combinedPolicy.isLegalConfigurationFragment(TestFragment.class)).isTrue(); + assertThat(combinedPolicy.isLegalConfigurationFragment(OtherFragment.class)).isTrue(); + } +} |