aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2015-09-08 17:09:27 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-09-08 17:26:48 +0000
commita86c9a2392fe209b05925fcd5b245cd37ff2d7f2 (patch)
tree6b56f55304ecc6a0b66ce378150a3fa8f2602c1c /src
parentfcf34fd17b16b42ed1180b6961b8531f26f82cf2 (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')
-rw-r--r--src/test/java/com/google/devtools/build/lib/AllTests.java17
-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
4 files changed, 43 insertions, 4 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/AllTests.java b/src/test/java/com/google/devtools/build/lib/AllTests.java
index 6aa19f1a57..f267cf3eb1 100644
--- a/src/test/java/com/google/devtools/build/lib/AllTests.java
+++ b/src/test/java/com/google/devtools/build/lib/AllTests.java
@@ -13,13 +13,22 @@
// limitations under the License.
package com.google.devtools.build.lib;
-import com.google.devtools.build.lib.testutil.ClasspathSuite;
+import com.google.devtools.build.lib.testutil.BlazeTestSuiteBuilder;
+import com.google.devtools.build.lib.testutil.CustomSuite;
import org.junit.runner.RunWith;
+import java.util.Set;
+
/**
- * Test suite for options parsing framework.
+ * General test suite with defaults suitable for most of our tests.
*/
-@RunWith(ClasspathSuite.class)
-public class AllTests {
+@RunWith(CustomSuite.class)
+public class AllTests extends BlazeTestSuiteBuilder {
+ public static Set<Class<?>> suite() {
+ return new AllTests()
+ .getBuilder()
+ .matchClasses(BlazeTestSuiteBuilder.TEST_SUPPORTS_CURRENT_OS)
+ .create();
+ }
}
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 {};
}