diff options
| author | Thibault Gagnaux <tgagnaux@gmail.com> | 2022-03-09 18:02:17 +0100 |
|---|---|---|
| committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2022-03-09 18:02:17 +0100 |
| commit | 68562738c90ede953ab3e4c24c0fa9aef79c8c6d (patch) | |
| tree | 81b445ffa30e5c1e953612e481514b56859fd11b /src/main/java | |
| parent | 0fb7e5baa3b1418e69f04716d20ad0f8bbdb5992 (diff) | |
| download | frege-gradle-plugin-68562738c90ede953ab3e4c24c0fa9aef79c8c6d.tar.gz frege-gradle-plugin-68562738c90ede953ab3e4c24c0fa9aef79c8c6d.tar.bz2 frege-gradle-plugin-68562738c90ede953ab3e4c24c0fa9aef79c8c6d.zip | |
feat: adds testFrege task
Diffstat (limited to 'src/main/java')
4 files changed, 105 insertions, 10 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index c1fdf12..33ce89f 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -9,14 +9,18 @@ import org.gradle.api.tasks.TaskProvider; public class FregePlugin implements Plugin<Project> { - public static final String SETUP_FREGE_TASK_NAME = "setupFrege"; - public static final String COMPILE_FREGE_TASK_NAME = "compileFrege"; - public static final String RUN_FREGE_TASK_NAME = "runFrege"; - public static final String REPL_FREGE_TASK_NAME = "replFrege"; - public static final String INIT_FREGE_TASK_NAME = "initFrege"; - public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; - public static final String FREGE_EXTENSION_NAME = "frege"; - public static final String FREGE_IMPLEMENTATION_SCOPE = "implementation"; + public static final String SETUP_FREGE_TASK_NAME = "setupFrege"; + public static final String COMPILE_FREGE_TASK_NAME = "compileFrege"; + public static final String RUN_FREGE_TASK_NAME = "runFrege"; + public static final String TEST_FREGE_TASK_NAME = "testFrege"; + public static final String REPL_FREGE_TASK_NAME = "replFrege"; + public static final String INIT_FREGE_TASK_NAME = "initFrege"; + public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; + public static final String FREGE_EXTENSION_NAME = "frege"; + public static final String FREGE_IMPLEMENTATION_SCOPE = "implementation"; + public static final String HELLO_FREGE_DEFAULT_MODULE_NAME = "examples.HelloFrege"; + public static final String FREGE_TEST_MODULE_NAME = "frege.tools.Quick"; + public static final String FREGE_TEST_DEFAULT_ARGS = "-v"; @Override public void apply(Project project) { @@ -38,7 +42,7 @@ public class FregePlugin implements Plugin<Project> task -> { task.getFregeMainSourceDir().set(extension.getMainSourceDir()); - task.getFregeModuleName().set("examples.HelloFrege"); + task.getFregeModuleName().set(HELLO_FREGE_DEFAULT_MODULE_NAME); } ); @@ -88,6 +92,27 @@ public class FregePlugin implements Plugin<Project> task.getFregeDependencies().set(implementation.getAsPath()); } ); + + project.getTasks().register( + TEST_FREGE_TASK_NAME, + TestFregeTask.class, + task -> + { + task.getMainModule().set(extension.getMainModule()); + task.dependsOn(compileFregeTask.map( + compileTask -> + { + compileTask.getFregeCompileItem().set(task.getMainModule()); + return compileTask; + } + ).get()); + task.getFregeCompilerJar().set( + setupFregeCompilerTask.get().getFregeCompilerOutputPath()); + task.getFregeOutputDir().set(extension.getOutputDir()); + task.getFregeDependencies().set(implementation.getAsPath()); + task.getFregeArgs().set(FREGE_TEST_DEFAULT_ARGS); + } + ); project.getTasks().register( REPL_FREGE_TASK_NAME, diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/InitFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/InitFregeTask.java index c2926aa..13fa471 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/InitFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/InitFregeTask.java @@ -1,6 +1,7 @@ package ch.fhnw.thga.gradleplugins; import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.NEW_LINE; +import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.EMPTY_LINE; import java.io.IOException; import java.nio.file.Paths; @@ -19,7 +20,6 @@ import org.gradle.api.tasks.options.Option; public abstract class InitFregeTask extends DefaultTask { - private static final String EMPTY_LINE = ""; private static final String HELLO_FREGE_CODE_WITHOUT_MODULE = String.join(NEW_LINE, "import Test.QuickCheck", EMPTY_LINE, diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java index ad4a252..b8dcb3e 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java @@ -15,6 +15,7 @@ public final class SharedTaskLogic private SharedTaskLogic() {}; public static final String NEW_LINE = System.lineSeparator(); + public static final String EMPTY_LINE = ""; public static final Provider<FileCollection> setupClasspath( Project project, diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/TestFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/TestFregeTask.java new file mode 100644 index 0000000..dbfb856 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/TestFregeTask.java @@ -0,0 +1,69 @@ +package ch.fhnw.thga.gradleplugins; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.options.Option; +import org.gradle.api.tasks.Internal; +import org.gradle.api.provider.Provider; + +public abstract class TestFregeTask extends DefaultTask { + private static final String TEST_MAIN_CLASS = "frege.tools.Quick"; + private final JavaExec javaExec; + + @InputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + @InputDirectory + public abstract DirectoryProperty getFregeOutputDir(); + + @Input + @Option(option = "mainModule", + description = "The full name of the Frege module with a main function, e.g. 'my.mod.Name'") + public abstract Property<String> getMainModule(); + + @Input + @Option(option = "args", + description = "optional args passed to frege") + public abstract Property<String> getFregeArgs(); + + @Internal + final Provider<String> getAllArgs() + { + return getFregeArgs() + .map(args -> String.format("%s %s", args, getMainModule().get())); + } + + @Input + public abstract Property<String> getFregeDependencies(); + + @Inject + public TestFregeTask(ObjectFactory objectFactory) { + javaExec = objectFactory.newInstance(JavaExec.class); + } + + @TaskAction + public void runFrege() { + javaExec.getMainClass().set(TEST_MAIN_CLASS); + javaExec + .setClasspath( + SharedTaskLogic.setupClasspath( + getProject(), + getFregeDependencies(), + getFregeCompilerJar(), + getFregeOutputDir()) + .get() + ) + .setArgsString(getAllArgs().get()) + .exec(); + } +}
\ No newline at end of file |
