aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/testutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/testutil')
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/BlazeTestSuiteBuilder.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/Suite.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/TestSpec.java8
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 {};
}