Make tests reveal errors in number of diagnostics with the same type
This commit is contained in:
@@ -17,10 +17,7 @@
|
|||||||
package org.jetbrains.jet.checkers;
|
package org.jetbrains.jet.checkers;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Collections2;
|
import com.google.common.collect.*;
|
||||||
import com.google.common.collect.HashMultiset;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Multiset;
|
|
||||||
import com.intellij.openapi.util.TextRange;
|
import com.intellij.openapi.util.TextRange;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiErrorElement;
|
import com.intellij.psi.PsiErrorElement;
|
||||||
@@ -28,8 +25,8 @@ import com.intellij.psi.PsiFile;
|
|||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import com.intellij.util.containers.Stack;
|
import com.intellij.util.containers.Stack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory;
|
|
||||||
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
import org.jetbrains.jet.lang.diagnostics.Diagnostic;
|
||||||
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticFactory;
|
||||||
import org.jetbrains.jet.lang.diagnostics.Severity;
|
import org.jetbrains.jet.lang.diagnostics.Severity;
|
||||||
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
import org.jetbrains.jet.lang.psi.JetReferenceExpression;
|
||||||
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
||||||
@@ -42,7 +39,7 @@ import java.util.regex.Pattern;
|
|||||||
public class CheckerTestUtil {
|
public class CheckerTestUtil {
|
||||||
public static final Comparator<Diagnostic> DIAGNOSTIC_COMPARATOR = new Comparator<Diagnostic>() {
|
public static final Comparator<Diagnostic> DIAGNOSTIC_COMPARATOR = new Comparator<Diagnostic>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(Diagnostic o1, Diagnostic o2) {
|
public int compare(@NotNull Diagnostic o1, @NotNull Diagnostic o2) {
|
||||||
List<TextRange> ranges1 = o1.getTextRanges();
|
List<TextRange> ranges1 = o1.getTextRanges();
|
||||||
List<TextRange> ranges2 = o2.getTextRanges();
|
List<TextRange> ranges2 = o2.getTextRanges();
|
||||||
if (ranges1.size() != ranges2.size()) return ranges1.size() - ranges2.size();
|
if (ranges1.size() != ranges2.size()) return ranges1.size() - ranges2.size();
|
||||||
@@ -162,15 +159,16 @@ public class CheckerTestUtil {
|
|||||||
Multiset<String> actualDiagnosticTypes = currentActual.getDiagnosticTypeStrings();
|
Multiset<String> actualDiagnosticTypes = currentActual.getDiagnosticTypeStrings();
|
||||||
Multiset<String> expectedDiagnosticTypes = currentExpected.getDiagnostics();
|
Multiset<String> expectedDiagnosticTypes = currentExpected.getDiagnostics();
|
||||||
if (!actualDiagnosticTypes.equals(expectedDiagnosticTypes)) {
|
if (!actualDiagnosticTypes.equals(expectedDiagnosticTypes)) {
|
||||||
Multiset<String> expectedCopy = HashMultiset.create(expectedDiagnosticTypes);
|
Multiset<String> notInActualTypes = HashMultiset.create(expectedDiagnosticTypes);
|
||||||
expectedCopy.removeAll(actualDiagnosticTypes);
|
Multisets.removeOccurrences(notInActualTypes, actualDiagnosticTypes);
|
||||||
Multiset<String> actualCopy = HashMultiset.create(actualDiagnosticTypes);
|
|
||||||
actualCopy.removeAll(expectedDiagnosticTypes);
|
|
||||||
|
|
||||||
for (String type : expectedCopy) {
|
Multiset<String> notInExpectedTypes = HashMultiset.create(actualDiagnosticTypes);
|
||||||
|
Multisets.removeOccurrences(notInExpectedTypes, expectedDiagnosticTypes);
|
||||||
|
|
||||||
|
for (String type : notInActualTypes) {
|
||||||
callbacks.missingDiagnostic(type, expectedStart, expectedEnd);
|
callbacks.missingDiagnostic(type, expectedStart, expectedEnd);
|
||||||
}
|
}
|
||||||
for (String type : actualCopy) {
|
for (String type : notInExpectedTypes) {
|
||||||
callbacks.unexpectedDiagnostic(type, actualStart, actualEnd);
|
callbacks.unexpectedDiagnostic(type, actualStart, actualEnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,13 +178,11 @@ public class CheckerTestUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (currentActual != null) {
|
//noinspection ConstantConditions
|
||||||
unexpectedDiagnostics(currentActual.getDiagnostics(), callbacks);
|
assert (currentActual != null);
|
||||||
currentActual = safeAdvance(actualDiagnostics);
|
|
||||||
}
|
unexpectedDiagnostics(currentActual.getDiagnostics(), callbacks);
|
||||||
else {
|
currentActual = safeAdvance(actualDiagnostics);
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user