diff options
Diffstat (limited to 'src/test/java/com/google')
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 {}; } |