break CodegenTestCase : JetLiteFixture dependency

This is important because test base classes like JetLiteFixture has
a lot of unused code/state that hardens reading/debugging.
This commit is contained in:
Stepan Koltsov
2012-05-23 02:52:28 +04:00
parent a81e40fae2
commit 5eb3a86c4d
4 changed files with 61 additions and 33 deletions
@@ -18,14 +18,9 @@ package org.jetbrains.jet;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.impl.PsiFileFactoryImpl;
import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.LightVirtualFile;
import com.intellij.testFramework.TestDataFile; import com.intellij.testFramework.TestDataFile;
import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.UsefulTestCase;
@@ -35,10 +30,8 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode; import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
import org.jetbrains.jet.plugin.JetLanguage;
import org.junit.Assert; import org.junit.Assert;
import java.io.File;
import java.io.IOException; import java.io.IOException;
/** /**
@@ -100,17 +93,7 @@ public abstract class JetLiteFixture extends UsefulTestCase {
} }
protected String loadFile(@NonNls @TestDataFile String name) throws IOException { protected String loadFile(@NonNls @TestDataFile String name) throws IOException {
return doLoadFile(myFullDataPath, name); return JetTestUtils.doLoadFile(myFullDataPath, name);
}
protected static String doLoadFile(String myFullDataPath, String name) throws IOException {
String fullName = myFullDataPath + File.separatorChar + name;
return doLoadFile(new File(fullName));
}
protected static String doLoadFile(@NotNull File file) throws IOException {
String text = FileUtil.loadFile(file, CharsetToolkit.UTF8).trim();
return StringUtil.convertLineSeparators(text);
} }
protected JetFile createPsiFile(@Nullable String testName, @Nullable String fileName, String text) { protected JetFile createPsiFile(@Nullable String testName, @Nullable String fileName, String text) {
@@ -118,7 +101,7 @@ public abstract class JetLiteFixture extends UsefulTestCase {
Assert.assertNotNull(testName); Assert.assertNotNull(testName);
fileName = testName + ".jet"; fileName = testName + ".jet";
} }
return (JetFile) createFile(fileName, text); return (JetFile) JetTestUtils.createFile(fileName, text, myEnvironment.getProject());
} }
protected JetFile loadPsiFile(String name) { protected JetFile loadPsiFile(String name) {
@@ -129,12 +112,6 @@ public abstract class JetLiteFixture extends UsefulTestCase {
} }
} }
protected PsiFile createFile(@NonNls String name, String text) {
LightVirtualFile virtualFile = new LightVirtualFile(name, JetLanguage.INSTANCE, text);
virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET);
return ((PsiFileFactoryImpl) PsiFileFactory.getInstance(myEnvironment.getProject())).trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false);
}
protected static void ensureParsed(PsiFile file) { protected static void ensureParsed(PsiFile file) {
file.accept(new PsiElementVisitor() { file.accept(new PsiElementVisitor() {
@Override @Override
@@ -19,9 +19,17 @@ package org.jetbrains.jet;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.intellij.openapi.Disposable; import com.intellij.openapi.Disposable;
import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.ShutDownTracker; import com.intellij.openapi.util.ShutDownTracker;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.impl.PsiFileFactoryImpl;
import com.intellij.testFramework.LightVirtualFile;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
@@ -35,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode; import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
import org.jetbrains.jet.plugin.JetLanguage;
import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; import org.jetbrains.jet.util.slicedmap.ReadOnlySlice;
import org.jetbrains.jet.util.slicedmap.SlicedMap; import org.jetbrains.jet.util.slicedmap.SlicedMap;
import org.jetbrains.jet.util.slicedmap.WritableSlice; import org.jetbrains.jet.util.slicedmap.WritableSlice;
@@ -238,6 +247,22 @@ public class JetTestUtils {
CompileCompilerDependenciesTest.compilerDependenciesForTests(CompilerSpecialMode.REGULAR, false)); CompileCompilerDependenciesTest.compilerDependenciesForTests(CompilerSpecialMode.REGULAR, false));
} }
public static PsiFile createFile(@NonNls String name, String text, @NotNull Project project) {
LightVirtualFile virtualFile = new LightVirtualFile(name, JetLanguage.INSTANCE, text);
virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET);
return ((PsiFileFactoryImpl) PsiFileFactory.getInstance(project)).trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false);
}
public static String doLoadFile(String myFullDataPath, String name) throws IOException {
String fullName = myFullDataPath + File.separatorChar + name;
return doLoadFile(new File(fullName));
}
public static String doLoadFile(@NotNull File file) throws IOException {
String text = FileUtil.loadFile(file, CharsetToolkit.UTF8).trim();
return StringUtil.convertLineSeparators(text);
}
public interface TestFileFactory<F> { public interface TestFileFactory<F> {
F create(String fileName, String text); F create(String fileName, String text);
} }
@@ -145,7 +145,7 @@ public class JetDiagnosticsTest extends JetLiteFixture {
public void runTest() throws Exception { public void runTest() throws Exception {
javaFilesDir = new File(FileUtil.getTempDirectory(), "java-files"); javaFilesDir = new File(FileUtil.getTempDirectory(), "java-files");
String expectedText = doLoadFile(file); String expectedText = JetTestUtils.doLoadFile(file);
List<TestFile> testFileFiles = JetTestUtils.createTestFiles(file.getName(), expectedText, new JetTestUtils.TestFileFactory<TestFile>() { List<TestFile> testFileFiles = JetTestUtils.createTestFiles(file.getName(), expectedText, new JetTestUtils.TestFileFactory<TestFile>() {
@Override @Override
@@ -17,15 +17,18 @@
package org.jetbrains.jet.codegen; package org.jetbrains.jet.codegen;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.intellij.testFramework.UsefulTestCase;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetLiteFixture; import org.jetbrains.jet.JetTestUtils;
import org.jetbrains.jet.analyzer.AnalyzeExhaust; import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.AnalyzingUtils; import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode;
import org.jetbrains.jet.parsing.JetParsingTest; import org.jetbrains.jet.parsing.JetParsingTest;
import java.io.File; import java.io.File;
@@ -41,10 +44,33 @@ import java.util.List;
/** /**
* @author yole * @author yole
*/ */
public abstract class CodegenTestCase extends JetLiteFixture { public abstract class CodegenTestCase extends UsefulTestCase {
// for environment and classloader // for environment and classloader
protected JetCoreEnvironment myEnvironment;
private List<File> extraClasspath = Lists.newArrayList(); private List<File> extraClasspath = Lists.newArrayList();
protected JetFile myFile;
protected void createEnvironmentWithMockJdkAndIdeaAnnotations() {
if (myEnvironment != null) {
throw new IllegalStateException("must not set up myEnvironemnt twice");
}
myEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(getTestRootDisposable());
}
protected void createEnvironmentWithMockJdkAndIdeaAnnotations(@NotNull CompilerSpecialMode compilerSpecialMode) {
if (myEnvironment != null) {
throw new IllegalStateException("must not set up myEnvironemnt twice");
}
myEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(getTestRootDisposable(), compilerSpecialMode);
}
protected void createEnvironmentWithFullJdk() {
if (myEnvironment != null) {
throw new IllegalStateException("must not set up myEnvironemnt twice");
}
myEnvironment = JetTestUtils.createEnvironmentWithFullJdk(getTestRootDisposable());
}
protected void addToClasspath(@NotNull File file) { protected void addToClasspath(@NotNull File file) {
myEnvironment.addToClasspath(file); myEnvironment.addToClasspath(file);
@@ -70,18 +96,18 @@ public abstract class CodegenTestCase extends JetLiteFixture {
@Override @Override
protected void tearDown() throws Exception { protected void tearDown() throws Exception {
myFile = null; myFile = null;
myEnvironment = null;
super.tearDown(); super.tearDown();
} }
protected void loadText(final String text) { protected void loadText(final String text) {
myFile = (JetFile) createFile("a.jet", text); myFile = (JetFile) JetTestUtils.createFile("a.jet", text, myEnvironment.getProject());
} }
@Override
protected String loadFile(final String name) { protected String loadFile(final String name) {
try { try {
final String content = doLoadFile(JetParsingTest.getTestDataDir() + "/codegen/", name); final String content = JetTestUtils.doLoadFile(JetParsingTest.getTestDataDir() + "/codegen/", name);
myFile = (JetFile) createFile(name, content); myFile = (JetFile) JetTestUtils.createFile(name, content, myEnvironment.getProject());
return content; return content;
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
@@ -147,7 +173,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
myEnvironment.getCompilerDependencies()); myEnvironment.getCompilerDependencies());
analyzeExhaust.throwIfError(); analyzeExhaust.throwIfError();
AnalyzingUtils.throwExceptionOnErrors(analyzeExhaust.getBindingContext()); AnalyzingUtils.throwExceptionOnErrors(analyzeExhaust.getBindingContext());
GenerationState state = new GenerationState(getProject(), classBuilderFactory, analyzeExhaust, Collections.singletonList(myFile)); GenerationState state = new GenerationState(myEnvironment.getProject(), classBuilderFactory, analyzeExhaust, Collections.singletonList(myFile));
state.compileCorrectFiles(CompilationErrorHandler.THROW_EXCEPTION); state.compileCorrectFiles(CompilationErrorHandler.THROW_EXCEPTION);
return state; return state;
} }