diff options
author | 2015-09-08 17:09:27 +0000 | |
---|---|---|
committer | 2015-09-08 17:26:48 +0000 | |
commit | a86c9a2392fe209b05925fcd5b245cd37ff2d7f2 (patch) | |
tree | 6b56f55304ecc6a0b66ce378150a3fa8f2602c1c /src/test/java/com/google/devtools/build/lib/testutil | |
parent | fcf34fd17b16b42ed1180b6961b8531f26f82cf2 (diff) |
Add a supportedOs attribute to TestSpec to make it possible to split off tests that can only run under certain operating systems (e.g. Linux sandboxing tests can only run under Linux) into separate suites.
--
MOS_MIGRATED_REVID=102566414
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/testutil')
3 files changed, 30 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/BlazeTestSuiteBuilder.java b/src/test/java/com/google/devtools/build/lib/testutil/BlazeTestSuiteBuilder.java index d311c89821..edb3b17baa 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/BlazeTestSuiteBuilder.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/BlazeTestSuiteBuilder.java @@ -14,6 +14,8 @@ package com.google.devtools.build.lib.testutil; import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; +import com.google.devtools.build.lib.util.OS; import java.util.Arrays; import java.util.HashSet; @@ -62,6 +64,17 @@ public class BlazeTestSuiteBuilder { } }; + /** A predicate that succeeds only if the test supports the current operating system. */ + public static final Predicate<Class<?>> TEST_SUPPORTS_CURRENT_OS = + new Predicate<Class<?>>() { + @Override + public boolean apply(Class<?> testClass) { + ImmutableSet<OS> supportedOs = ImmutableSet.copyOf(Suite.getSupportedOs(testClass)); + return supportedOs.isEmpty() || supportedOs.contains(OS.getCurrent()); + } + }; + + private static Predicate<Class<?>> hasSize(final Suite size) { return new Predicate<Class<?>>() { @Override diff --git a/src/test/java/com/google/devtools/build/lib/testutil/Suite.java b/src/test/java/com/google/devtools/build/lib/testutil/Suite.java index 8c936b64bd..af69bab815 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/Suite.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/Suite.java @@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.testutil; +import com.google.devtools.build.lib.util.OS; + import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -76,6 +78,13 @@ public enum Suite { } /** + * Given a class, determine the list of operating systems its tests can run under. + */ + public static OS[] getSupportedOs(Class<?> clazz) { + return getAnnotationElementOrDefault(clazz, "supportedOs"); + } + + /** * Returns the value of the given element in the {@link TestSpec} annotation of the given class, * or the default value of that element if the class doesn't have a {@link TestSpec} annotation. */ diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestSpec.java b/src/test/java/com/google/devtools/build/lib/testutil/TestSpec.java index 71479048da..9931d61af6 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/TestSpec.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/TestSpec.java @@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.testutil; +import com.google.devtools.build.lib.util.OS; + import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; @@ -51,4 +53,10 @@ public @interface TestSpec { * machine. */ boolean localOnly() default false; + + /** + * An array of operating systems that the test can run under. If not specified, the test can + * run under all operating systems. + */ + OS[] supportedOs() default {}; } |