Frontend tests: serialize dynamic call descriptors and check them in diagnostic tests.
This commit is contained in:
@@ -61,6 +61,7 @@ import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.diagnostics.Errors.*;
|
||||
import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.RECURSIVE;
|
||||
import static org.jetbrains.jet.test.util.RecursiveDescriptorComparator.RECURSIVE_ALL;
|
||||
|
||||
public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
|
||||
@@ -146,6 +147,15 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
ok &= testFile.getActualText(moduleBindings.get(testFile.getModule()), actualText, shouldSkipJvmSignatureDiagnostics(groupedByModule));
|
||||
}
|
||||
|
||||
Throwable exceptionFromDynamicCallDescriptorsValidation = null;
|
||||
try {
|
||||
File expectedFile = new File(FileUtil.getNameWithoutExtension(testDataFile.getAbsolutePath()) + ".dynamic.txt");
|
||||
checkDynamicCallDescriptors(expectedFile, testFiles);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
exceptionFromDynamicCallDescriptorsValidation = e;
|
||||
}
|
||||
|
||||
JetTestUtils.assertEqualsToFile(testDataFile, actualText.toString());
|
||||
|
||||
assertTrue("Diagnostics mismatch. See the output above", ok);
|
||||
@@ -157,6 +167,28 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest {
|
||||
if (exceptionFromLazyResolveLogValidation != null) {
|
||||
throw UtilsPackage.rethrow(exceptionFromLazyResolveLogValidation);
|
||||
}
|
||||
if (exceptionFromDynamicCallDescriptorsValidation != null) {
|
||||
throw UtilsPackage.rethrow(exceptionFromDynamicCallDescriptorsValidation);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkDynamicCallDescriptors(File expectedFile, List<TestFile> testFiles) {
|
||||
RecursiveDescriptorComparator serializer = new RecursiveDescriptorComparator(RECURSIVE_ALL);
|
||||
|
||||
StringBuilder actualText = new StringBuilder();
|
||||
|
||||
for (TestFile testFile : testFiles) {
|
||||
List<DeclarationDescriptor> dynamicCallDescriptors = testFile.getDynamicCallDescriptors();
|
||||
|
||||
for (DeclarationDescriptor descriptor : dynamicCallDescriptors) {
|
||||
String actualSerialized = serializer.serializeRecursively(descriptor);
|
||||
actualText.append(actualSerialized);
|
||||
}
|
||||
}
|
||||
|
||||
if (actualText.length() != 0 || expectedFile.exists()) {
|
||||
JetTestUtils.assertEqualsToFile(expectedFile, actualText.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean shouldSkipJvmSignatureDiagnostics(Map<TestModule, List<TestFile>> groupedByModule) {
|
||||
|
||||
@@ -33,6 +33,7 @@ import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.asJava.AsJavaPackage;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.diagnostics.*;
|
||||
import org.jetbrains.jet.lang.psi.JetDeclaration;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
@@ -243,6 +244,7 @@ public abstract class BaseDiagnosticsTest extends
|
||||
private final boolean declareFlexibleType;
|
||||
public final boolean checkLazyLog;
|
||||
private final boolean markDynamicCalls;
|
||||
private final List<DeclarationDescriptor> dynamicCallDescriptors = new ArrayList<DeclarationDescriptor>();
|
||||
|
||||
public TestFile(
|
||||
@Nullable TestModule module,
|
||||
@@ -325,6 +327,11 @@ public abstract class BaseDiagnosticsTest extends
|
||||
return jetFile;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<DeclarationDescriptor> getDynamicCallDescriptors() {
|
||||
return dynamicCallDescriptors;
|
||||
}
|
||||
|
||||
public boolean getActualText(BindingContext bindingContext, StringBuilder actualText, boolean skipJvmSignatureDiagnostics) {
|
||||
if (this.jetFile == null) {
|
||||
// TODO: check java files too
|
||||
@@ -338,7 +345,7 @@ public abstract class BaseDiagnosticsTest extends
|
||||
|
||||
final boolean[] ok = { true };
|
||||
List<Diagnostic> diagnostics = ContainerUtil.filter(
|
||||
KotlinPackage.plus(CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile, markDynamicCalls),
|
||||
KotlinPackage.plus(CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile, markDynamicCalls, dynamicCallDescriptors),
|
||||
jvmSignatureDiagnostics),
|
||||
whatDiagnosticsToConsider
|
||||
);
|
||||
|
||||
@@ -147,7 +147,7 @@ public class CheckerTestUtilTest extends JetLiteFixture {
|
||||
(JetFile) psiFile)
|
||||
.getBindingContext();
|
||||
|
||||
String expectedText = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false)).toString();
|
||||
String expectedText = CheckerTestUtil.addDiagnosticMarkersToText(psiFile, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false, null)).toString();
|
||||
|
||||
List<DiagnosedRange> diagnosedRanges = Lists.newArrayList();
|
||||
CheckerTestUtil.parseDiagnosedRanges(expectedText, diagnosedRanges);
|
||||
@@ -155,7 +155,7 @@ public class CheckerTestUtilTest extends JetLiteFixture {
|
||||
diagnosedRange.setFile(psiFile);
|
||||
}
|
||||
|
||||
List<Diagnostic> diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false);
|
||||
List<Diagnostic> diagnostics = CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, psiFile, false, null);
|
||||
Collections.sort(diagnostics, CheckerTestUtil.DIAGNOSTIC_COMPARATOR);
|
||||
|
||||
makeTestData(diagnostics, diagnosedRanges);
|
||||
|
||||
Reference in New Issue
Block a user