Frontend tests: serialize dynamic call descriptors and check them in diagnostic tests.

This commit is contained in:
Zalim Bashorov
2014-12-15 22:37:41 +03:00
parent d071c44126
commit 2484954e2f
26 changed files with 324 additions and 26 deletions
@@ -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);