JetDiagnosticsTest: java+kotlin
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user