package org.checkerframework.framework.test.junit;

import java.io.File;
import java.util.List;
import org.checkerframework.common.returnsreceiver.ReturnsReceiverChecker;
import org.checkerframework.framework.test.CheckerFrameworkPerDirectoryTest;
import org.junit.runners.Parameterized.Parameters;

/**
 * Tests the returns receiver checker's lombok integration, the test files in
 * tests/returnsreceiverlombok package will be delomboked into tests/returnsreceiverdelomboked
 * package before running the test and the returns receiver checker will run on the generated codes.
 */
public class ReturnsReceiverLombokTest extends CheckerFrameworkPerDirectoryTest {
  public ReturnsReceiverLombokTest(List<File> testFiles) {
    super(
        testFiles,
        ReturnsReceiverChecker.class,
        "returnsreceiverdelomboked",
        "-Anomsgtext",
        "-nowarn",
        "-AsuppressWarnings=type.anno.before.modifier");
  }

  @Override
  public void run() {
    // Only run if delomboked codes have been created.
    if (!new File("tests/returnsreceiverdelomboked/").exists()) {
      throw new RuntimeException("delombok task must be run before this test.");
    }
    super.run();
  }

  @Parameters
  public static String[] getTestDirs() {
    return new String[] {"returnsreceiverdelomboked"};
  }
}
