JetDiagnosticsTest: java+kotlin

This commit is contained in:
Stepan Koltsov
2012-02-29 22:33:53 +04:00
parent 0b0878b8f9
commit 92c69b6826
2 changed files with 66 additions and 6 deletions
@@ -0,0 +1,9 @@
// FILE: A.java
class A {
void f() { }
}
// FILE: B.kt
fun foo(a: A) = a.f()
@@ -18,8 +18,16 @@ package org.jetbrains.jet.checkers;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.io.ByteStreams;
import com.google.common.io.CharStreams;
import com.google.common.io.Files;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiErrorElement;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import junit.framework.Test; import junit.framework.Test;
import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -35,6 +43,8 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.List; import java.util.List;
/** /**
@@ -59,17 +69,32 @@ public class JetDiagnosticsTest extends JetLiteFixture {
private final String expectedText; private final String expectedText;
private final String clearText; private final String clearText;
private final JetFile jetFile; private final JetFile jetFile;
private final PsiFile javaFile;
public TestFile(String fileName, String textWithMarkers) { public TestFile(String fileName, String textWithMarkers) {
expectedText = textWithMarkers; if (fileName.endsWith(".java")) {
clearText = CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges); this.javaFile = PsiFileFactory.getInstance(getProject()).createFileFromText(fileName, JavaLanguage.INSTANCE, textWithMarkers);
jetFile = createCheckAndReturnPsiFile(fileName, clearText); // TODO: check there's not syntax errors
for (CheckerTestUtil.DiagnosedRange diagnosedRange : diagnosedRanges) { this.jetFile = null;
diagnosedRange.setFile(jetFile); this.expectedText = this.clearText = textWithMarkers;
} else {
expectedText = textWithMarkers;
clearText = CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges);
this.javaFile = null;
this.jetFile = createCheckAndReturnPsiFile(fileName, clearText);
for (CheckerTestUtil.DiagnosedRange diagnosedRange : diagnosedRanges) {
diagnosedRange.setFile(jetFile);
}
} }
} }
public boolean getActualText(BindingContext bindingContext, StringBuilder actualText) { public boolean getActualText(BindingContext bindingContext, StringBuilder actualText) {
if (this.jetFile == null) {
// TODO: check java files too
actualText.append(this.clearText);
return true;
}
final boolean ok[] = { true }; final boolean ok[] = { true };
CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() { CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() {
@NotNull @NotNull
@@ -99,8 +124,24 @@ public class JetDiagnosticsTest extends JetLiteFixture {
} }
private boolean hasJavaFiles;
private File javaFilesDir;
private void writeJavaFile(@NotNull String fileName, @NotNull String content) {
try {
File javaFile = new File(javaFilesDir, fileName);
JetTestUtils.mkdirs(javaFile.getParentFile());
Files.write(content, javaFile, Charset.forName("utf-8"));
hasJavaFiles = true;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override @Override
public void runTest() throws Exception { public void runTest() throws Exception {
javaFilesDir = new File(FileUtil.getTempDirectory(), "java-files");
String testFileName = name + ".jet"; String testFileName = name + ".jet";
String expectedText = loadFile(testFileName); String expectedText = loadFile(testFileName);
@@ -108,16 +149,26 @@ public class JetDiagnosticsTest extends JetLiteFixture {
List<TestFile> testFileFiles = JetTestUtils.createTestFiles(testFileName, expectedText, new JetTestUtils.TestFileFactory<TestFile>() { List<TestFile> testFileFiles = JetTestUtils.createTestFiles(testFileName, expectedText, new JetTestUtils.TestFileFactory<TestFile>() {
@Override @Override
public TestFile create(String fileName, String text) { public TestFile create(String fileName, String text) {
if (fileName.endsWith(".java")) {
writeJavaFile(fileName, text);
}
return new TestFile(fileName, text); return new TestFile(fileName, text);
} }
}); });
boolean importJdk = expectedText.contains("+JDK"); boolean importJdk = expectedText.contains("+JDK");
// Configuration configuration = importJdk ? JavaBridgeConfiguration.createJavaBridgeConfiguration(getProject()) : Configuration.EMPTY; // Configuration configuration = importJdk ? JavaBridgeConfiguration.createJavaBridgeConfiguration(getProject()) : Configuration.EMPTY;
if (hasJavaFiles) {
// According to yole@ the only way to import java files is to write them on disk
// -- stepan.koltsov@ 2012-02-29
myEnvironment.addToClasspath(javaFilesDir);
}
List<JetFile> jetFiles = Lists.newArrayList(); List<JetFile> jetFiles = Lists.newArrayList();
for (TestFile testFileFile : testFileFiles) { for (TestFile testFileFile : testFileFiles) {
jetFiles.add(testFileFile.jetFile); if (testFileFile.jetFile != null) {
jetFiles.add(testFileFile.jetFile);
}
} }
BindingContext bindingContext; BindingContext bindingContext;