package de.plushnikov.intellij.plugin;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.LanguageLevelModuleExtension;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiFile;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import com.intellij.util.PathUtil;
import junit.framework.ComparisonFailure;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.regex.Pattern;
public abstract class AbstractLombokLightCodeInsightTestCase extends LightCodeInsightFixtureTestCase {
private static final String LOMBOK_SRC_PATH = "./generated/src/lombok";
private static final String HRISEY_SRC_PATH = "./generated/src/hrisey";
@Override
protected String getTestDataPath() {
return ".";
}
@Override
protected String getBasePath() {
return "testData";
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return new DefaultLightProjectDescriptor() {
@Override
public Sdk getSdk() {
return JavaSdk.getInstance().createJdk("java 1.7", "lib/mockJDK-1.7", false);
}
@Override
public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) {
model.getModuleExtension(LanguageLevelModuleExtension.class).setLanguageLevel(LanguageLevel.JDK_1_7);
}
};
}
@Override
public void setUp() throws Exception {
VfsRootAccess.allowRootAccess(new File(getTestDataPath(), getBasePath()).getCanonicalPath(),
new File(LOMBOK_SRC_PATH).getCanonicalPath(), new File(HRISEY_SRC_PATH).getCanonicalPath());
super.setUp();
loadFilesFrom(LOMBOK_SRC_PATH);
loadFilesFrom(HRISEY_SRC_PATH);
}
private void loadFilesFrom(final String srcPath) {
List<File> filesByMask = FileUtil.findFilesByMask(Pattern.compile(".*\\.java"), new File(srcPath));
for (File javaFile : filesByMask) {
String filePath = PathUtil.toSystemIndependentName(javaFile.getPath());
myFixture.copyFileToProject(filePath, filePath.substring(srcPath.lastIndexOf("/") + 1));
}
}
protected PsiFile loadToPsiFile(String fileName) {
final String sourceFilePath = getBasePath() + "/" + fileName;
VirtualFile virtualFile = myFixture.copyFileToProject(sourceFilePath, fileName);
myFixture.configureFromExistingVirtualFile(virtualFile);
return myFixture.getFile();
}
protected void checkResultByFile(String expectedFile) throws IOException {
try {
myFixture.checkResultByFile(expectedFile, true);
} catch (ComparisonFailure ex) {
String actualFileText = myFixture.getFile().getText();
actualFileText = actualFileText.replace("java.lang.", "");
final String path = getTestDataPath() + "/" + expectedFile;
String expectedFileText = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(path)));
assertEquals(expectedFileText.replaceAll("\\s+", ""), actualFileText.replaceAll("\\s+", ""));
}
}
}