aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java37
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java8
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java6
3 files changed, 48 insertions, 3 deletions
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
index 78076a9..0cd2561 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
@@ -5,6 +5,8 @@ import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_DOWNLOAD_DIRECTO
import static ch.fhnw.thga.gradleplugins.FregePlugin.*;
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
import static org.gradle.testkit.runner.TaskOutcome.FAILED;
+import static org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE;
+import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -214,6 +216,41 @@ public class FregePluginFunctionalTest {
assertTrue(
new File(testProjectDir.getAbsolutePath() + "/build/frege/ch/fhnw/thga/Completion.class").exists());
}
+
+ @Test
+ void and_is_up_to_date_given_no_code_changes() throws Exception {
+ String completionFr = "Completion.fr";
+ String minimalBuildFileConfig = createFregeSection(fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
+ setupDefaultFregeProjectStructure(SIMPLE_FREGE_CODE, completionFr, minimalBuildFileConfig);
+
+ BuildResult first = runGradleTask(COMPILE_FREGE_TASK_NAME);
+ assertEquals(SUCCESS, first.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
+
+ BuildResult second = runGradleTask(COMPILE_FREGE_TASK_NAME);
+ assertEquals(UP_TO_DATE, second.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
+ }
+
+ @Test
+ void and_is_cached_given_cache_hit() throws Exception {
+ String completionFr = "Completion.fr";
+ String minimalBuildFileConfig = createFregeSection(fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
+ setupDefaultFregeProjectStructure(SIMPLE_FREGE_CODE, completionFr, minimalBuildFileConfig);
+
+ BuildResult first = runGradleTask(COMPILE_FREGE_TASK_NAME, "--build-cache");
+ assertEquals(SUCCESS, first.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
+
+ String codeChange = String.join(NEW_LINE, "module ch.fhnw.thga.Completion where",
+ NEW_LINE, NEW_LINE, " frob :: Int -> (Int, String)", NEW_LINE, " frob i = (i, \"Frege rocks\")",
+ NEW_LINE);
+ setupDefaultFregeProjectStructure(codeChange, completionFr, "");
+
+ BuildResult second = runGradleTask(COMPILE_FREGE_TASK_NAME, "--build-cache");
+ assertEquals(SUCCESS, second.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
+
+ setupDefaultFregeProjectStructure(SIMPLE_FREGE_CODE, completionFr, "");
+ BuildResult third = runGradleTask(COMPILE_FREGE_TASK_NAME, "--build-cache");
+ assertEquals(FROM_CACHE, third.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
+ }
}
@Nested
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
index 020bc7c..9dc148f 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
@@ -13,21 +13,27 @@ import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Provider;
+import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.OutputDirectory;
+import org.gradle.api.tasks.PathSensitive;
+import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
+@CacheableTask
public abstract class CompileFregeTask extends DefaultTask {
private final JavaExec javaExec;
@InputFile
+ @PathSensitive(PathSensitivity.RELATIVE)
public abstract RegularFileProperty getFregeCompilerJar();
@InputDirectory
+ @PathSensitive(PathSensitivity.RELATIVE)
public abstract DirectoryProperty getFregeMainSourceDir();
@Input
@@ -60,4 +66,4 @@ public abstract class CompileFregeTask extends DefaultTask {
.flatMap(Collection::stream).collect(Collectors.toList());
javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(compilerArgs).exec();
}
-}
+} \ No newline at end of file
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
index f134ec2..ea02493 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
@@ -12,6 +12,8 @@ import org.gradle.api.provider.Property;
public abstract class FregeExtension {
public static final String DEFAULT_DOWNLOAD_DIRECTORY = "lib";
public static final String DEFAULT_RELATIVE_OUTPUT_DIR = "classes/main/frege";
+ public static final String DEFAULT_RELATIVE_SOURCE_DIR = "src/main/frege";
+ public static final List<String> DEFAULT_COMPILER_FLAGS = List.of("-O", "-make");
public abstract Property<String> getVersion();
@@ -30,8 +32,8 @@ public abstract class FregeExtension {
@Inject
public FregeExtension(ProjectLayout projectLayout) {
getCompilerDownloadDir().convention(projectLayout.getProjectDirectory().dir(DEFAULT_DOWNLOAD_DIRECTORY));
- getMainSourceDir().convention(projectLayout.getProjectDirectory());
+ getMainSourceDir().convention(projectLayout.getProjectDirectory().dir(DEFAULT_RELATIVE_SOURCE_DIR));
getOutputDir().convention(projectLayout.getBuildDirectory().dir(DEFAULT_RELATIVE_OUTPUT_DIR));
- getCompilerFlags().convention(List.of("-O", "-make"));
+ getCompilerFlags().convention(DEFAULT_COMPILER_FLAGS);
}
}