diff options
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 {}; } |