aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorThibault Gagnaux <tgagnaux@gmail.com>2022-03-09 18:02:17 +0100
committerThibault Gagnaux <tgagnaux@gmail.com>2022-03-09 18:02:17 +0100
commit68562738c90ede953ab3e4c24c0fa9aef79c8c6d (patch)
tree81b445ffa30e5c1e953612e481514b56859fd11b /src/main/java
parent0fb7e5baa3b1418e69f04716d20ad0f8bbdb5992 (diff)
downloadfrege-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')
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java43
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/InitFregeTask.java2
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java1
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/TestFregeTask.java69
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