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.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.io.FileUtil;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiErrorElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import junit.framework.Test;
import org.jetbrains.annotations.NonNls;
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 java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.List;
/**
@@ -59,17 +69,32 @@ public class JetDiagnosticsTest extends JetLiteFixture {
private final String expectedText;
private final String clearText;
private final JetFile jetFile;
private final PsiFile javaFile;
public TestFile(String fileName, String textWithMarkers) {
expectedText = textWithMarkers;
clearText = CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges);
jetFile = createCheckAndReturnPsiFile(fileName, clearText);
for (CheckerTestUtil.DiagnosedRange diagnosedRange : diagnosedRanges) {
diagnosedRange.setFile(jetFile);
if (fileName.endsWith(".java")) {
this.javaFile = PsiFileFactory.getInstance(getProject()).createFileFromText(fileName, JavaLanguage.INSTANCE, textWithMarkers);
// TODO: check there's not syntax errors
this.jetFile = null;
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) {
if (this.jetFile == null) {
// TODO: check java files too
actualText.append(this.clearText);
return true;
}
final boolean ok[] = { true };
CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() {
@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
public void runTest() throws Exception {
javaFilesDir = new File(FileUtil.getTempDirectory(), "java-files");
String testFileName = name + ".jet";
String expectedText = loadFile(testFileName);
@@ -108,16 +149,26 @@ public class JetDiagnosticsTest extends JetLiteFixture {
List<TestFile> testFileFiles = JetTestUtils.createTestFiles(testFileName, expectedText, new JetTestUtils.TestFileFactory<TestFile>() {
@Override
public TestFile create(String fileName, String text) {
if (fileName.endsWith(".java")) {
writeJavaFile(fileName, text);
}
return new TestFile(fileName, text);
}
});
boolean importJdk = expectedText.contains("+JDK");
// 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();
for (TestFile testFileFile : testFileFiles) {
jetFiles.add(testFileFile.jetFile);
if (testFileFile.jetFile != null) {
jetFiles.add(testFileFile.jetFile);
}
}
BindingContext bindingContext;