diff --git a/python/testSrc/com/jetbrains/TestEnv.java b/python/testSrc/com/jetbrains/TestEnv.java index b78a9497dcbf..aca5884e28e3 100644 --- a/python/testSrc/com/jetbrains/TestEnv.java +++ b/python/testSrc/com/jetbrains/TestEnv.java @@ -15,9 +15,26 @@ */ package com.jetbrains; +import com.intellij.openapi.util.SystemInfo; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Supplier; + /** * @author traff */ public enum TestEnv { - WINDOWS, LINUX, MAC + + WINDOWS(() -> SystemInfo.isWindows), LINUX(() -> SystemInfo.isLinux), MAC(() -> SystemInfo.isMac); + + @NotNull + private final Supplier myThisOs; + + TestEnv(@NotNull final Supplier isThisOs) { + myThisOs = isThisOs; + } + + public boolean isThisOs() { + return myThisOs.get(); + } } diff --git a/python/testSrc/com/jetbrains/env/EnvTestTagsRequired.java b/python/testSrc/com/jetbrains/env/EnvTestTagsRequired.java index 3da400d8d4df..68cbd5c5d1b0 100644 --- a/python/testSrc/com/jetbrains/env/EnvTestTagsRequired.java +++ b/python/testSrc/com/jetbrains/env/EnvTestTagsRequired.java @@ -15,6 +15,8 @@ */ package com.jetbrains.env; +import com.jetbrains.TestEnv; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -32,4 +34,5 @@ public @interface EnvTestTagsRequired { * @return tags should exist on interpreter for this test not to be skipped */ String[] tags(); + TestEnv[] skipOnOSes() default {}; } diff --git a/python/testSrc/com/jetbrains/env/PyEnvTestCase.java b/python/testSrc/com/jetbrains/env/PyEnvTestCase.java index 17efec416d75..cd0f7c6a7988 100644 --- a/python/testSrc/com/jetbrains/env/PyEnvTestCase.java +++ b/python/testSrc/com/jetbrains/env/PyEnvTestCase.java @@ -9,7 +9,6 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.TestDialog; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.testFramework.LoggedErrorProcessor; import com.intellij.testFramework.UsefulTestCase; @@ -105,9 +104,7 @@ public abstract class PyEnvTestCase { } else { for (StagingOn so : description.getTestClass().getMethod(description.getMethodName()).getAnnotationsByType(StagingOn.class)) { - if (so.os() == TestEnv.WINDOWS && SystemInfo.isWindows || - so.os() == TestEnv.LINUX && SystemInfo.isLinux || - so.os() == TestEnv.MAC && SystemInfo.isMac) { + if (so.os().isThisOs()) { return true; } } @@ -251,6 +248,8 @@ public abstract class PyEnvTestCase { catch (final NoSuchMethodException e) { throw new AssertionError("No such method", e); } + Assume.assumeFalse("Test skipped on this os", Arrays.stream(classAnnotation.skipOnOSes()).anyMatch(TestEnv::isThisOs)); + final String[] classTags = getTags(classAnnotation); final String[] methodTags = getTags(methodAnnotation); diff --git a/python/testSrc/com/jetbrains/env/python/dotNet/PyIronPythonTest.java b/python/testSrc/com/jetbrains/env/python/dotNet/PyIronPythonTest.java index 2046ecf91e14..0cb8c2f3554f 100644 --- a/python/testSrc/com/jetbrains/env/python/dotNet/PyIronPythonTest.java +++ b/python/testSrc/com/jetbrains/env/python/dotNet/PyIronPythonTest.java @@ -2,6 +2,8 @@ package com.jetbrains.env.python.dotNet; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.projectRoots.Sdk; +import com.jetbrains.TestEnv; +import com.jetbrains.env.EnvTestTagsRequired; import com.jetbrains.env.PyEnvTestCase; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.sdk.InvalidSdkException; @@ -17,6 +19,7 @@ import java.io.IOException; * * @author Ilya.Kazakevich */ +@EnvTestTagsRequired(tags = "iron", skipOnOSes = {TestEnv.LINUX, TestEnv.MAC}) public final class PyIronPythonTest extends PyEnvTestCase { /**