Skip to content

Commit 576d9b4

Browse files
committed
adapt CFInferenceTest
1 parent 5c21828 commit 576d9b4

6 files changed

Lines changed: 32 additions & 77 deletions

File tree

File renamed without changes.

tests/checkers/inference/OsTrustedTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package checkers.inference;
22

33
import checkers.inference.solver.MaxSat2TypeSolver;
4+
import checkers.inference.solver.SolverEngine;
45
import checkers.inference.test.CFInferenceTest;
56
import org.checkerframework.framework.test.TestUtilities;
67
import org.checkerframework.javacutil.Pair;
@@ -19,7 +20,7 @@ public OsTrustedTest(File testFile) {
1920

2021
@Override
2122
public Pair<String, List<String>> getSolverNameAndOptions() {
22-
return Pair.<String, List<String>>of(MaxSat2TypeSolver.class.getCanonicalName(), new ArrayList<String>());
23+
return Pair.<String, List<String>>of(SolverEngine.class.getCanonicalName(), new ArrayList<String>());
2324
}
2425

2526
@Parameters

tests/checkers/inference/OsTrustedUnsatTest.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

tests/checkers/inference/test/CFInferenceTest.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package checkers.inference.test;
22

33
import org.checkerframework.framework.test.CheckerFrameworkPerFileTest;
4+
import org.checkerframework.framework.test.TestConfiguration;
45
import org.checkerframework.framework.test.TestUtilities;
6+
import org.checkerframework.framework.test.diagnostics.DiagnosticKind;
7+
import org.checkerframework.framework.test.diagnostics.JavaDiagnosticReader;
8+
import org.checkerframework.framework.test.diagnostics.TestDiagnostic;
59
import org.checkerframework.javacutil.Pair;
610
import org.checkerframework.javacutil.SystemUtil;
711

@@ -11,6 +15,7 @@
1115

1216
import javax.annotation.processing.AbstractProcessor;
1317

18+
import org.junit.Assert;
1419
import org.junit.Test;
1520

1621
public abstract class CFInferenceTest extends CheckerFrameworkPerFileTest {
@@ -57,15 +62,19 @@ testFile, testDataDir, checkerName, checkerOptions, getAdditionalInferenceOption
5762
solverArgs.second, useHacks(), shouldEmitDebugInfo, getPathToAfuScripts(), getPathToInferenceScript());
5863

5964
InferenceTestResult testResult = new InferenceTestExecutor().runTest(config);
60-
postProcessResult(testResult);
61-
}
6265

63-
/**
64-
* Report a summary of the failed test based on the {@link InferenceTestResult}.
65-
*
66-
* @param testResult the test result returned by {@code InferenceTestExecutor}
67-
*/
68-
protected void postProcessResult(InferenceTestResult testResult) {
69-
InferenceTestUtilities.assertResultsAreValid(testResult);
66+
// If the test file contains any hard error, then the test should fail at inference phase and not proceed.
67+
// i.e. the last phase is inference.
68+
TestConfiguration typecheckConfig = config.getInitialTypecheckConfig();
69+
List<TestDiagnostic> expectedDiagnostics = JavaDiagnosticReader.readJavaSourceFiles(typecheckConfig.getTestSourceFiles());
70+
InferenceTestPhase expectedLastPhase = InferenceTestPhase.FINAL_TYPECHECK;
71+
for (TestDiagnostic diagnostic : expectedDiagnostics) {
72+
if (!diagnostic.isFixable()) {
73+
expectedLastPhase = InferenceTestPhase.INFER;
74+
break;
75+
}
76+
}
77+
InferenceTestUtilities.assertResultsAreValid(testResult, expectedLastPhase);
7078
}
79+
7180
}

tests/checkers/inference/test/CFInferenceUnsatTest.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

tests/checkers/inference/test/InferenceTestUtilities.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.regex.Matcher;
1515
import java.util.regex.Pattern;
1616

17+
import org.checkerframework.javacutil.SystemUtil;
1718
import org.junit.Assert;
1819

1920
/**
@@ -96,7 +97,7 @@ public static void assertFail(InferenceTestPhase lastPhase, String summary) {
9697
Assert.fail(message);
9798
}
9899

99-
public static void assertResultsAreValid(InferenceTestResult testResult) {
100+
public static void assertResultsAreValid(InferenceTestResult testResult, InferenceTestPhase expectedLastPhase) {
100101
final InferenceTestPhase lastPhaseRun = testResult.getLastPhaseRun();
101102

102103
switch (lastPhaseRun) {
@@ -105,14 +106,23 @@ public static void assertResultsAreValid(InferenceTestResult testResult) {
105106
break;
106107

107108
case INFER:
108-
assertFail(InferenceTestPhase.INFER, testResult.getInferenceResult().summarize());
109+
if (expectedLastPhase != InferenceTestPhase.INFER) {
110+
assertFail(InferenceTestPhase.INFER, testResult.getInferenceResult().summarize());
111+
}
109112
break;
110113

111114
case INSERT:
112115
assertFail(InferenceTestPhase.INSERT, testResult.getInsertionResult().summarize());
113116
break;
114117

115118
case FINAL_TYPECHECK:
119+
if (expectedLastPhase == InferenceTestPhase.INFER) {
120+
String summary = "Inference is expected to fail, but succeeded on the source file: \n"
121+
+ SystemUtil.join("\n", testResult.getConfiguration().getInitialTypecheckConfig().getTestSourceFiles()) + "\n\n";
122+
123+
assertFail(InferenceTestPhase.INFER, summary);
124+
}
125+
116126
TypecheckResult finalTypecheckResult = testResult.getFinalTypecheckResult();
117127
if (finalTypecheckResult.didTestFail()) {
118128
assertFail(InferenceTestPhase.FINAL_TYPECHECK, finalTypecheckResult.summarize());

0 commit comments

Comments
 (0)