Class CheckerFrameworkPerFileTest

java.lang.Object
org.checkerframework.framework.test.CheckerFrameworkPerFileTest

public abstract class CheckerFrameworkPerFileTest extends Object
Compiles all test files individually. Use CheckerFrameworkPerDirectoryTest to compile all files in a test directory together.

To use this class you must do two things:

  1. Create exactly 1 constructor in the subclass with exactly 1 argument of type java.io.File. This File will be the Java file that is compiled and whose output is verified.
  2. Create one of the following 2 public static methods with the annotation org.junit.runners.Parameterized.Parameters. The method name and signature must match exactly.
    • @Parameters public static String [] getTestDirs()

      getTestDir must return an array of directories that exist in the test folder, e.g.

        @Parameters
         public static String [] getTestDirs() {
            return new String[]{"all-systems", "flow"};
         }
      The directories can contain more path information (e.g., "myTestDir/moreTests") but note, the test suite will find all of the Java test files that exists below the listed directories. It is unnecessary to list child directories of a directory you have already listed.
    • @Parameters public static List<File> getTestFiles()

      The method returns a List of Java files. There are methods like TestUtilities.findNestedJavaTestFiles(java.lang.String...) to help you construct this List. The PerDirectorySuite will then instantiate the subclass once for each file returned by getTestFiles and execute the run method. An example of this method is:

        @Parameters
         public static List<File> getTestFiles() {
           return TestUtilities.findNestedJavaTestFiles("aggregate");
         }
  • Field Details

    • testFile

      protected final File testFile
      The file containing test code, which will be type-checked.
    • checker

      protected final Class<?> checker
      The checker to use for tests.
    • testDir

      protected final String testDir
      The path, relative to the test root directory (see CheckerFrameworkRootedTest.resolveTestDirectory()), to the directory containing test inputs.
    • checkerOptions

      protected final List<String> checkerOptions
      Extra options to pass to javac when running the checker.
  • Constructor Details

  • Method Details

    • run

      public void run()
    • customizeOptions

      public List<String> customizeOptions(List<String> previousOptions)
      Override this method if you would like to supply a checker command-line option that depends on the Java file passed to the test. That file name is available in field testFile.

      If you want to specify the same command-line option for all tests of a particular checker, then pass it to the CheckerFrameworkPerFileTest constructor.

      Parameters:
      previousOptions - the options specified in the constructor of the test previousOptions is unmodifiable
      Returns:
      a new list of options or the original passed through
    • resolveTestDirectory

      protected File resolveTestDirectory()
      Resolves the test root directory from the optional TestRootDirectory annotation or falls back to the default of currentDir/tests.
      Returns:
      the resolved directory
    • checkResult

      public void checkResult(TypecheckResult typecheckResult)
      Check that the TypecheckResult did not fail.
      Parameters:
      typecheckResult - result to check