Skip to content

Commit

Permalink
Certain test cases may only run if API version is high enough. Adding…
Browse files Browse the repository at this point in the history
… support for defining such cases
  • Loading branch information
alexejk committed Apr 10, 2016
1 parent fb153b6 commit 5661bc6
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 11 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -106,7 +106,7 @@ dependencies {
bnf files("$buildDir/tools/light-psi-all.jar")
jflex files("$buildDir/tools/JFlex.jar")

testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.mockito', name: 'mockito-core', version: '1.+'
}

Expand Down
@@ -0,0 +1,37 @@
package de.plushnikov;

import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.util.BuildNumber;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import com.intellij.util.ReflectionUtil;

/**
* Simple extension of {@link LightCodeInsightFixtureTestCase} that allows skipping test cases
* based on required Platform API version.
*
* @author Alexej Kubarev
*/
public abstract class ApiVersionAwareLightCodeInsightFixureTestCase extends LightCodeInsightFixtureTestCase {

private String getMinVersion() {
RequiredApiVersion requiredVersionAnnotation = getClass().getAnnotation(RequiredApiVersion.class);
if (requiredVersionAnnotation != null) {
return requiredVersionAnnotation.value();
}
return getCurrentVersion().asStringWithoutProductCodeAndSnapshot();
}

@Override
protected void runTest() throws Throwable {

// Minimal API Version for these tests to pass
BuildNumber required = BuildNumber.fromString(getMinVersion());
if (getCurrentVersion().compareTo(required) >= 0) {
super.runTest();
}
}

private BuildNumber getCurrentVersion() {
return ApplicationInfo.getInstance().getBuild();
}
}
22 changes: 22 additions & 0 deletions src/test/java/de/plushnikov/RequiredApiVersion.java
@@ -0,0 +1,22 @@
package de.plushnikov;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* Defines that a test class may only run if the current API version is at least the given value.
* Requires a test class to extend {@link ApiVersionAwareLightCodeInsightFixureTestCase}, as it contains conditional logic.
* Additional base classes may be added in the same way.
*
* @author Alexej Kubarev
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface RequiredApiVersion {

String value();
}
2 changes: 2 additions & 0 deletions src/test/java/de/plushnikov/TestUtil.java
@@ -1,6 +1,8 @@
package de.plushnikov;

import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.util.BuildNumber;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull;

Expand Down
@@ -1,6 +1,5 @@
package de.plushnikov.intellij.plugin.processor.modifier;

import com.intellij.JavaTestUtil;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLocalVariable;
Expand All @@ -9,20 +8,21 @@
import com.intellij.psi.augment.PsiAugmentProvider;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import de.plushnikov.ApiVersionAwareLightCodeInsightFixureTestCase;
import de.plushnikov.RequiredApiVersion;
import de.plushnikov.intellij.plugin.provider.LombokAugmentProvider;

/**
* @author Alexej Kubarev
*/
public class ValModifierTest extends LightCodeInsightFixtureTestCase {
@RequiredApiVersion("146.1154") // Modifier augmentation has been added in build 146.1154
public class ValModifierTest extends ApiVersionAwareLightCodeInsightFixureTestCase {

@Override
protected String getTestDataPath() {
return "testData/augment/modifier";
}


@Override
public void setUp() throws Exception {
super.setUp();
Expand Down
@@ -1,29 +1,27 @@
package de.plushnikov.intellij.plugin.processor.modifier;

import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLocalVariable;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiType;
import com.intellij.psi.augment.PsiAugmentProvider;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import de.plushnikov.ApiVersionAwareLightCodeInsightFixureTestCase;
import de.plushnikov.RequiredApiVersion;
import de.plushnikov.intellij.plugin.provider.LombokAugmentProvider;

/**
* @author Alexej Kubarev
*/
public class ValueModifierTest extends LightCodeInsightFixtureTestCase {
@RequiredApiVersion("146.1154") // Modifier augmentation has been added in build 146.1154
public class ValueModifierTest extends ApiVersionAwareLightCodeInsightFixureTestCase {

@Override
protected String getTestDataPath() {
return "testData/augment/modifier";
}


@Override
public void setUp() throws Exception {
super.setUp();
Expand All @@ -32,6 +30,7 @@ public void setUp() throws Exception {
}

public void testValueModifiers() {

PsiFile file = myFixture.configureByFile(getTestName(false) + ".java");

PsiField field = PsiTreeUtil.getParentOfType(file.findElementAt(myFixture.getCaretOffset()), PsiField.class);
Expand Down

0 comments on commit 5661bc6

Please sign in to comment.