From a86c9a2392fe209b05925fcd5b245cd37ff2d7f2 Mon Sep 17 00:00:00 2001 From: Philipp Wollermann Date: Tue, 8 Sep 2015 17:09:27 +0000 Subject: 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 --- .../devtools/build/lib/testutil/BlazeTestSuiteBuilder.java | 13 +++++++++++++ .../java/com/google/devtools/build/lib/testutil/Suite.java | 9 +++++++++ .../com/google/devtools/build/lib/testutil/TestSpec.java | 8 ++++++++ 3 files changed, 30 insertions(+) (limited to 'src/test/java/com/google/devtools/build/lib/testutil') 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> TEST_SUPPORTS_CURRENT_OS = + new Predicate>() { + @Override + public boolean apply(Class testClass) { + ImmutableSet supportedOs = ImmutableSet.copyOf(Suite.getSupportedOs(testClass)); + return supportedOs.isEmpty() || supportedOs.contains(OS.getCurrent()); + } + }; + + private static Predicate> hasSize(final Suite size) { return new Predicate>() { @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; @@ -75,6 +77,13 @@ public enum Suite { return getAnnotationElementOrDefault(clazz, "localOnly"); } + /** + * 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 {}; } -- cgit v1.2.3