aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java33
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java25
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java33
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java16
5 files changed, 75 insertions, 34 deletions
diff --git a/build.gradle b/build.gradle
index 2fb7819..d460e2a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -41,7 +41,7 @@ check.dependsOn functionalTest
tasks.withType(Test).configureEach {
useJUnitPlatform()
- maxParallelForks 4
+ maxParallelForks 6
}
dependencies {
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
index cf6dc70..f94469c 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
@@ -4,9 +4,10 @@ import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_DOWNLOAD_DIRECTO
import static ch.fhnw.thga.gradleplugins.FregePlugin.COMPILE_FREGE_TASK_NAME;
import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_EXTENSION_NAME;
import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_PLUGIN_ID;
-import static ch.fhnw.thga.gradleplugins.FregePlugin.REPL_FREGE_TASK_NAME;
+import static ch.fhnw.thga.gradleplugins.FregePlugin.DEPS_FREGE_TASK_NAME;
import static ch.fhnw.thga.gradleplugins.FregePlugin.RUN_FREGE_TASK_NAME;
import static ch.fhnw.thga.gradleplugins.FregePlugin.SETUP_FREGE_TASK_NAME;
+import static ch.fhnw.thga.gradleplugins.FregePlugin.REPL_FREGE_TASK_NAME;
import static ch.fhnw.thga.gradleplugins.GradleBuildFileConversionTest.createPluginsSection;
import static org.gradle.testkit.runner.TaskOutcome.FAILED;
import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE;
@@ -39,6 +40,8 @@ import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.api.io.TempDir;
+import ch.fhnw.thga.gradleplugins.internal.DependencyFregeTask;
+
@TestInstance(Lifecycle.PER_CLASS)
public class FregePluginFunctionalTest {
private static final String NEW_LINE = System.lineSeparator();
@@ -394,16 +397,16 @@ public class FregePluginFunctionalTest {
@Nested
@TestInstance(Lifecycle.PER_CLASS)
@IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class)
- class Repl_frege_task_works {
+ class Deps_frege_task_works {
@Test
void given_minimal_build_file_config() throws Exception {
String minimalBuildFileConfig = createFregeSection(
fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
appendToFile(buildFile, minimalBuildFileConfig);
- BuildResult result = runGradleTask(REPL_FREGE_TASK_NAME, "-q");
- assertTrue(project.getTasks().getByName(REPL_FREGE_TASK_NAME) instanceof ReplFregeTask);
- assertEquals(SUCCESS, result.task(":" + REPL_FREGE_TASK_NAME).getOutcome());
+ BuildResult result = runGradleTask(DEPS_FREGE_TASK_NAME, "-q");
+ assertTrue(project.getTasks().getByName(DEPS_FREGE_TASK_NAME) instanceof DependencyFregeTask);
+ assertEquals(SUCCESS, result.task(":" + DEPS_FREGE_TASK_NAME).getOutcome());
assertTrue(result.getOutput().contains("frege3.25.84.jar"));
}
@@ -415,11 +418,29 @@ public class FregePluginFunctionalTest {
appendToFile(buildFile, String.join("\n", "repositories {", "mavenCentral()", "}"));
appendToFile(buildFile, String.join("\n", "dependencies {",
"implementation group: 'org.json', name: 'json', version: '20211205'", "}"));
+ BuildResult result = runGradleTask(DEPS_FREGE_TASK_NAME, "-q");
+ assertTrue(project.getTasks().getByName(DEPS_FREGE_TASK_NAME) instanceof DependencyFregeTask);
+ assertEquals(SUCCESS, result.task(":" + DEPS_FREGE_TASK_NAME).getOutcome());
+ assertTrue(result.getOutput().contains("frege3.25.84.jar"));
+ assertTrue(result.getOutput().contains("org.json"));
+ }
+ }
+
+ @Nested
+ @TestInstance(Lifecycle.PER_CLASS)
+ @IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class)
+ class Repl_frege_task_works {
+ @Test
+ void given_minimal_build_file_config() throws Exception {
+ String minimalBuildFileConfig = createFregeSection(
+ fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
+ appendToFile(buildFile, minimalBuildFileConfig);
+
BuildResult result = runGradleTask(REPL_FREGE_TASK_NAME, "-q");
assertTrue(project.getTasks().getByName(REPL_FREGE_TASK_NAME) instanceof ReplFregeTask);
assertEquals(SUCCESS, result.task(":" + REPL_FREGE_TASK_NAME).getOutcome());
+ assertTrue(result.getOutput().contains("java -cp"));
assertTrue(result.getOutput().contains("frege3.25.84.jar"));
- assertTrue(result.getOutput().contains("org.json"));
}
}
} \ No newline at end of file
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index b4948e6..18016f3 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -3,17 +3,32 @@ package ch.fhnw.thga.gradleplugins;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.file.FileCollection;
+import org.gradle.api.file.RegularFile;
+import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.TaskProvider;
+import ch.fhnw.thga.gradleplugins.internal.DependencyFregeTask;
+
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 DEPS_FREGE_TASK_NAME = "depsFrege";
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";
+ private FileCollection setupClasspath(Project project, Configuration dependencies,
+ Provider<RegularFile> fregeCompilerJar) {
+ if (dependencies.isEmpty()) {
+ return project.files(fregeCompilerJar);
+ } else {
+ return project.files(fregeCompilerJar, dependencies.getAsPath());
+ }
+ }
+
@Override
public void apply(Project project) {
Configuration implementation = project.getConfigurations().create(FREGE_IMPLEMENTATION_SCOPE);
@@ -41,10 +56,16 @@ public class FregePlugin implements Plugin<Project> {
task.getMainModule().set(extension.getMainModule());
task.getFregeDependencies().set(implementation.getAsPath());
});
+ project.getTasks().register(DEPS_FREGE_TASK_NAME,
+ DependencyFregeTask.class, task -> {
+ task.dependsOn(setupFregeCompilerTask);
+ task.getClasspath().setFrom(setupClasspath(project, implementation,
+ setupFregeCompilerTask.get().getFregeCompilerOutputPath()));
+ });
project.getTasks().register(REPL_FREGE_TASK_NAME, ReplFregeTask.class, task -> {
task.dependsOn(setupFregeCompilerTask);
- task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath());
- task.getFregeDependencies().set(implementation.getAsPath());
+ task.getFregeClasspath().setFrom(setupClasspath(project, implementation,
+ setupFregeCompilerTask.get().getFregeCompilerOutputPath()));
});
}
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
index 5a915c0..81da1cd 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
@@ -1,36 +1,19 @@
package ch.fhnw.thga.gradleplugins;
import org.gradle.api.DefaultTask;
-import org.gradle.api.file.FileCollection;
-import org.gradle.api.file.RegularFileProperty;
-import org.gradle.api.logging.Logger;
-import org.gradle.api.logging.Logging;
-import org.gradle.api.provider.Property;
-import org.gradle.api.provider.Provider;
-import org.gradle.api.tasks.Input;
-import org.gradle.api.tasks.InputFile;
-import org.gradle.api.tasks.Internal;
+import org.gradle.api.file.ConfigurableFileCollection;
+import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.TaskAction;
public abstract class ReplFregeTask extends DefaultTask {
- public static final Logger LOGGER = Logging.getLogger(SetupFregeTask.class);
+ public static final String REPL_MAIN_CLASS = "frege.repl.FregeRepl";
- @InputFile
- public abstract RegularFileProperty getFregeCompilerJar();
-
- @Input
- public abstract Property<String> getFregeDependencies();
-
- @Internal
- public final Provider<FileCollection> getClasspath() {
- return getFregeDependencies().map(depsClasspath -> {
- return depsClasspath.isEmpty() ? getProject().files(getFregeCompilerJar())
- : getProject().files(getFregeCompilerJar(), depsClasspath);
- });
- }
+ @InputFiles
+ public abstract ConfigurableFileCollection getFregeClasspath();
@TaskAction
- public void fregeReplDependencies() {
- System.out.println(getClasspath().get().getAsPath());
+ public void printStartFregeReplCommand() {
+ System.out.println("Execute the following command to start the Frege Repl:");
+ System.out.println(String.format("java -cp %s %s", getFregeClasspath().getAsPath(), REPL_MAIN_CLASS));
}
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java
new file mode 100644
index 0000000..34b33a2
--- /dev/null
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/internal/DependencyFregeTask.java
@@ -0,0 +1,16 @@
+package ch.fhnw.thga.gradleplugins.internal;
+
+import org.gradle.api.DefaultTask;
+import org.gradle.api.file.ConfigurableFileCollection;
+import org.gradle.api.tasks.InputFiles;
+import org.gradle.api.tasks.TaskAction;
+
+public abstract class DependencyFregeTask extends DefaultTask {
+ @InputFiles
+ public abstract ConfigurableFileCollection getClasspath();
+
+ @TaskAction
+ public void fregeDependencies() {
+ System.out.println(getClasspath().getAsPath());
+ }
+}