|
1 | 1 | package checkers.inference.test; |
2 | 2 |
|
3 | 3 | import org.checkerframework.framework.test.CheckerFrameworkPerFileTest; |
| 4 | +import org.checkerframework.framework.test.TestConfiguration; |
4 | 5 | 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; |
5 | 9 | import org.checkerframework.javacutil.Pair; |
6 | 10 | import org.checkerframework.javacutil.SystemUtil; |
7 | 11 |
|
|
11 | 15 |
|
12 | 16 | import javax.annotation.processing.AbstractProcessor; |
13 | 17 |
|
| 18 | +import org.junit.Assert; |
14 | 19 | import org.junit.Test; |
15 | 20 |
|
16 | 21 | public abstract class CFInferenceTest extends CheckerFrameworkPerFileTest { |
@@ -57,15 +62,19 @@ testFile, testDataDir, checkerName, checkerOptions, getAdditionalInferenceOption |
57 | 62 | solverArgs.second, useHacks(), shouldEmitDebugInfo, getPathToAfuScripts(), getPathToInferenceScript()); |
58 | 63 |
|
59 | 64 | InferenceTestResult testResult = new InferenceTestExecutor().runTest(config); |
60 | | - postProcessResult(testResult); |
61 | | - } |
62 | 65 |
|
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); |
70 | 78 | } |
| 79 | + |
71 | 80 | } |
0 commit comments