aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Gagnaux <tgagnaux@gmail.com>2022-02-23 11:04:50 +0100
committerThibault Gagnaux <tgagnaux@gmail.com>2022-02-23 11:06:00 +0100
commita4879784e7be87b5ee184b47eb8faba635019a5d (patch)
tree0af50423e29ab1038d6007607791dc929a14f504
parentadbe33ac3ce08e4c5d73ba659313c7904273887a (diff)
downloadfrege-gradle-plugin-a4879784e7be87b5ee184b47eb8faba635019a5d.tar.gz
frege-gradle-plugin-a4879784e7be87b5ee184b47eb8faba635019a5d.tar.bz2
frege-gradle-plugin-a4879784e7be87b5ee184b47eb8faba635019a5d.zip
refactor: finishes the replFregeTask refactoring
-rw-r--r--.gitignore3
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java26
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java157
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java102
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java10
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java27
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java18
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java4
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java8
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java12
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java28
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java8
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/Builder.java2
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java10
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java8
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java42
16 files changed, 231 insertions, 234 deletions
diff --git a/.gitignore b/.gitignore
index 151dd40..0292f5c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@ build
.settings
bin
.DS_Store
-lib \ No newline at end of file
+lib
+.jqwik-database \ No newline at end of file
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java
index af3225d..31e6d05 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java
@@ -6,6 +6,8 @@ import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSe
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.NEW_LINE;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.COMPLETION_FR;
import static org.gradle.testkit.runner.TaskOutcome.FAILED;
import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE;
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
@@ -29,30 +31,6 @@ import ch.fhnw.thga.gradleplugins.fregeproject.FregeSourceFile;
public class CompileFregeTaskFunctionalTest
{
- private static final FregeSourceFile COMPLETION_FR = new FregeSourceFile(
- String.format("%s/%s",
- DEFAULT_RELATIVE_SOURCE_DIR,
- "ch/fhnw/thga/Completion.fr"),
- String.join
- (
- NEW_LINE,
- "module ch.fhnw.thga.Completion where",
- NEW_LINE,
- NEW_LINE,
- " complete :: Int -> (Int, String)",
- NEW_LINE,
- " complete i = (i, \"Frege rocks\")",
- NEW_LINE
- )
- );
- private static final String MINIMAL_BUILD_FILE_CONFIG = createFregeSection(
- FregeDTOBuilder
- .builder()
- .version("'3.25.84'")
- .release("'3.25alpha'")
- .build()
- );
-
private static final boolean assertFileExists(
File testProjectDir,
String relativeFilePath)
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
deleted file mode 100644
index 5159c92..0000000
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package ch.fhnw.thga.gradleplugins;
-
-import static ch.fhnw.thga.gradleplugins.FregePlugin.COMPILE_FREGE_TASK_NAME;
-import static ch.fhnw.thga.gradleplugins.FregePlugin.SETUP_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.RUN_FREGE_TASK_NAME;
-import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_SOURCE_DIR;
-import static ch.fhnw.thga.gradleplugins.GradleBuildFileConversionTest.createPluginsSection;
-import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection;
-import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.writeToFile;
-import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeGradleProject;
-import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask;
-import static org.gradle.testkit.runner.TaskOutcome.FAILED;
-import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE;
-import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
-import static org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Collections;
-import java.util.stream.Stream;
-
-import org.gradle.api.Project;
-import org.gradle.testfixtures.ProjectBuilder;
-import org.gradle.testkit.runner.BuildResult;
-import org.gradle.testkit.runner.GradleRunner;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayNameGenerator;
-import org.junit.jupiter.api.IndicativeSentencesGeneration;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.io.TempDir;
-
-public class FregePluginFunctionalTest
-{
- /*@Nested
- @IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class)
- class Run_frege_task_works {
- @Test
- void given_frege_file_with_main_function_and_main_module_config() throws Exception {
- String fregeCode = String.join(NEW_LINE, "module ch.fhnw.thga.Main where", NEW_LINE, NEW_LINE,
- " main = do", NEW_LINE, " println \"Frege rocks\"", NEW_LINE);
- String mainFr = "Main.fr";
- String buildFileConfig = createFregeSection(
- FREGE_BUILDER.version("'3.25.84'").release("'3.25alpha'")
- .mainModule("'ch.fhnw.thga.Main'").build());
- setupDefaultFregeProjectStructure(fregeCode, mainFr, buildFileConfig);
-
- BuildResult result = runGradleTask(RUN_FREGE_TASK_NAME);
- assertTrue(project.getTasks().getByName(RUN_FREGE_TASK_NAME) instanceof RunFregeTask);
- assertEquals(SUCCESS, result.task(":" + RUN_FREGE_TASK_NAME).getOutcome());
- assertTrue(result.getOutput().contains("Frege rocks"));
- }
-
- @Test
- void given_frege_file_without_main_function() throws Exception {
- String completionFr = "Completion.fr";
- String buildFileConfig = createFregeSection(
- FREGE_BUILDER.version("'3.25.84'").release("'3.25alpha'")
- .mainModule("'ch.fhnw.thga.Completion'").build());
- setupDefaultFregeProjectStructure(FREGE_COMPLETION_MODULE_CODE, completionFr, buildFileConfig);
-
- BuildResult result = runAndFailGradleTask(RUN_FREGE_TASK_NAME);
- assertTrue(project.getTasks().getByName(RUN_FREGE_TASK_NAME) instanceof RunFregeTask);
- assertEquals(FAILED, result.task(":" + RUN_FREGE_TASK_NAME).getOutcome());
- assertTrue(result.getOutput().contains("Main method not found"));
- }
-
- @Test
- void given_frege_file_with_main_function_and_main_module_command_line_option() throws Exception {
- String fregeCode = String.join(NEW_LINE, "module ch.fhnw.thga.Main where", NEW_LINE, NEW_LINE,
- " main = do", NEW_LINE, " println \"Frege rocks\"", NEW_LINE);
- String mainFr = "Main.fr";
- String buildFileConfig = createFregeSection(
- FREGE_BUILDER.version("'3.25.84'").release("'3.25alpha'").build());
- setupDefaultFregeProjectStructure(fregeCode, mainFr, buildFileConfig);
-
- BuildResult result = runGradleTask(RUN_FREGE_TASK_NAME, "--mainModule=ch.fhnw.thga.Main");
- assertTrue(project.getTasks().getByName(RUN_FREGE_TASK_NAME) instanceof RunFregeTask);
- assertEquals(SUCCESS, result.task(":" + RUN_FREGE_TASK_NAME).getOutcome());
- assertTrue(result.getOutput().contains("Frege rocks"));
- }
- }
-
-
- @Nested
- @IndicativeSentencesGeneration(
- separator = " -> ",
- generator = DisplayNameGenerator.ReplaceUnderscores.class)
- class Repl_frege_task_works
- {
- @Test
- void given_minimal_build_file_config_with_replModule() throws Exception
- {
- String completionFr = "Completion.fr";
- String minimalReplModuleConfig = createFregeSection(
- FREGE_BUILDER
- .version("'3.25.84'")
- .release("'3.25alpha'")
- .replSource(String.format("'ch.fhnw.thga.Completion'"))
- .build());
- setupDefaultFregeProjectStructure(
- FREGE_COMPLETION_MODULE_CODE,
- completionFr,
- minimalReplModuleConfig);
-
- BuildResult result = runGradleTask(REPL_FREGE_TASK_NAME);
-
- 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("Completion.java"));
- }
- }
-
- @Nested
- @IndicativeSentencesGeneration(
- separator = " -> ",
- generator = DisplayNameGenerator.ReplaceUnderscores.class)
- class Repl_frege_task_fails
- {
- @Test
- void given_minimal_build_file_config_without_repl_module() throws Exception
- {
- String completionFr = "Completion.fr";
- String minimalBuildFileConfig = createFregeSection(
- FREGE_BUILDER
- .version("'3.25.84'")
- .release("'3.25alpha'")
- .build());
- setupDefaultFregeProjectStructure(
- FREGE_COMPLETION_MODULE_CODE,
- completionFr,
- minimalBuildFileConfig);
-
- BuildResult result = runAndFailGradleTask(REPL_FREGE_TASK_NAME);
-
- assertTrue(
- project.getTasks().getByName(REPL_FREGE_TASK_NAME)
- instanceof ReplFregeTask);
- assertEquals(FAILED, result.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
- }
- }*/
-} \ No newline at end of file
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java
new file mode 100644
index 0000000..979d1d4
--- /dev/null
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java
@@ -0,0 +1,102 @@
+package ch.fhnw.thga.gradleplugins;
+
+import static ch.fhnw.thga.gradleplugins.FregePlugin.REPL_FREGE_TASK_NAME;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.COMPLETION_FR;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask;
+import static org.gradle.testkit.runner.TaskOutcome.FAILED;
+import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.File;
+import java.util.stream.Stream;
+
+import org.gradle.api.Project;
+import org.gradle.testkit.runner.BuildResult;
+import org.junit.jupiter.api.DisplayNameGenerator;
+import org.junit.jupiter.api.IndicativeSentencesGeneration;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import ch.fhnw.thga.gradleplugins.fregeproject.FregeProjectBuilder;
+
+public class ReplFregeTaskFunctionalTest
+{
+ @Nested
+ @IndicativeSentencesGeneration(
+ generator = DisplayNameGenerator.ReplaceUnderscores.class)
+ class Repl_frege_task_works
+ {
+ @Test
+ void given_minimal_build_file_config_with_repl_module(
+ @TempDir File testProjectDir)
+ throws Exception
+ {
+ String replModuleConfig = createFregeSection(
+ FregeDTOBuilder
+ .builder()
+ .version("'3.25.84'")
+ .release("'3.25alpha'")
+ .replModule("'ch.fhnw.thga.Completion'")
+ .build()
+ );
+ Project project = FregeProjectBuilder
+ .builder()
+ .projectRoot(testProjectDir)
+ .buildFile(replModuleConfig)
+ .fregeSourceFiles(() -> Stream.of(COMPLETION_FR))
+ .build();
+
+ BuildResult result = runGradleTask(testProjectDir, REPL_FREGE_TASK_NAME);
+
+ 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"));
+ assertFalse(result.getOutput().contains("Completion.class"));
+ }
+ }
+
+ @Nested
+ @IndicativeSentencesGeneration(
+ generator = DisplayNameGenerator.ReplaceUnderscores.class)
+ class Repl_frege_task_fails
+ {
+ @Test
+ void given_minimal_build_file_config_without_repl_module(
+ @TempDir File testProjectDir)
+ throws Exception
+ {
+ Project project = FregeProjectBuilder
+ .builder()
+ .projectRoot(testProjectDir)
+ .buildFile(MINIMAL_BUILD_FILE_CONFIG)
+ .fregeSourceFiles(() -> Stream.of(COMPLETION_FR))
+ .build();
+
+ BuildResult result = runAndFailGradleTask(testProjectDir, REPL_FREGE_TASK_NAME);
+
+ assertTrue(
+ project
+ .getTasks()
+ .getByName(REPL_FREGE_TASK_NAME)
+ instanceof ReplFregeTask
+ );
+ assertEquals(
+ FAILED,
+ result.task(":" + REPL_FREGE_TASK_NAME).getOutcome()
+ );
+ }
+ }
+} \ No newline at end of file
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java
index c0c870a..c4d5bad 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java
@@ -6,6 +6,7 @@ import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.NEW_LINE;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask;
import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG;
import static org.gradle.testkit.runner.TaskOutcome.FAILED;
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -91,17 +92,10 @@ public class RunFregeTaskFunctionalTest
@TempDir File testProjectDir)
throws Exception
{
- String mainBuildConfig = createFregeSection(
- FregeDTOBuilder
- .builder()
- .version("'3.25.84'")
- .release("'3.25alpha'")
- .build()
- );
Project project = FregeProjectBuilder
.builder()
.projectRoot(testProjectDir)
- .buildFile(mainBuildConfig)
+ .buildFile(MINIMAL_BUILD_FILE_CONFIG)
.fregeSourceFiles(() -> Stream.of(MAIN_FR))
.build();
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java
index c98d7ac..51fa256 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java
@@ -3,6 +3,7 @@ package ch.fhnw.thga.gradleplugins;
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.GradleBuildFileConversionTest.createPluginsSection;
+import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_SOURCE_DIR;
import java.io.BufferedWriter;
import java.io.File;
@@ -15,9 +16,35 @@ import org.gradle.testfixtures.ProjectBuilder;
import org.gradle.testkit.runner.BuildResult;
import org.gradle.testkit.runner.GradleRunner;
+import ch.fhnw.thga.gradleplugins.fregeproject.FregeSourceFile;
+
public class SharedFunctionalTestLogic
{
public static final String NEW_LINE = System.lineSeparator();
+ public static final String MINIMAL_BUILD_FILE_CONFIG = createFregeSection(
+ FregeDTOBuilder
+ .builder()
+ .version("'3.25.84'")
+ .release("'3.25alpha'")
+ .build()
+ );
+ public static final FregeSourceFile COMPLETION_FR = new FregeSourceFile(
+ String.format("%s/%s",
+ DEFAULT_RELATIVE_SOURCE_DIR,
+ "ch/fhnw/thga/Completion.fr"),
+ String.join
+ (
+ NEW_LINE,
+ "module ch.fhnw.thga.Completion where",
+ NEW_LINE,
+ NEW_LINE,
+ " complete :: Int -> (Int, String)",
+ NEW_LINE,
+ " complete i = (i, \"Frege rocks\")",
+ NEW_LINE
+ )
+ );
+
static String createFregeSection(FregeDTO fregeDTO)
{
return String.format(
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java
index d2c6aeb..0cb0746 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java
@@ -1,27 +1,23 @@
package ch.fhnw.thga.gradleplugins.fregeproject;
+import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR;
+import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_PLUGIN_ID;
+import static ch.fhnw.thga.gradleplugins.GradleBuildFileConversionTest.createPluginsSection;
+
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
-import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
-import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Stream;
import org.gradle.api.Project;
import org.gradle.testfixtures.ProjectBuilder;
-import ch.fhnw.thga.gradleplugins.FregeDTO;
-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.GradleBuildFileConversionTest.createPluginsSection;
-import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR;
-
public final class FregeProjectBuilder implements ProjectRoot, BuildFile, Build
{
private static final String LATEST_COMPILER_VERSION = "3.25.84";
@@ -82,12 +78,6 @@ public final class FregeProjectBuilder implements ProjectRoot, BuildFile, Build
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
-
- private static File appendToFile(File destination, String content) throws IOException
- {
- writeFile(destination, System.lineSeparator() + content, true);
- return destination;
- }
private File setupLocalFregeCompilerInDefaultPath() throws IOException
{
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java
index c161dbd..858f6d4 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java
@@ -7,8 +7,8 @@ public class FregeSourceFile
public FregeSourceFile(String modulePath, String sourceCode)
{
- this.modulePath = modulePath;
- this.sourceCode = sourceCode;
+ this.modulePath = modulePath;
+ this.sourceCode = sourceCode;
}
public String getFregeModulePath()
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
index cfcd393..18a9500 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
@@ -9,7 +9,8 @@ import org.gradle.api.file.ProjectLayout;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
-public abstract class FregeExtension {
+public abstract class FregeExtension
+{
public static final String DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR = "lib";
public static final String DEFAULT_RELATIVE_OUTPUT_DIR = "classes/main/frege";
public static final String DEFAULT_RELATIVE_SOURCE_DIR = "src/main/frege";
@@ -29,10 +30,11 @@ public abstract class FregeExtension {
public abstract ListProperty<String> getCompilerFlags();
- public abstract Property<String> getReplSource();
+ public abstract Property<String> getReplModule();
@Inject
- public FregeExtension(ProjectLayout projectLayout) {
+ public FregeExtension(ProjectLayout projectLayout)
+ {
getCompilerDownloadDir()
.convention(projectLayout.getProjectDirectory().dir(DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR));
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index 957dc83..9b725ac 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -68,8 +68,8 @@ public class FregePlugin implements Plugin<Project>
{
compileTask.getFregeCompileItem().set(task.getMainModule());
return compileTask;
- })
- .get());
+ }
+ ));
task.getFregeCompilerJar().set(
setupFregeCompilerTask.get().getFregeCompilerOutputPath());
task.getFregeOutputDir().set(extension.getOutputDir());
@@ -82,14 +82,14 @@ public class FregePlugin implements Plugin<Project>
ReplFregeTask.class,
task ->
{
- task.getReplSource().set(extension.getReplSource());
+ task.getReplModule().set(extension.getReplModule());
task.dependsOn(compileFregeTask.map(
compileTask ->
{
- compileTask.getFregeCompileItem().set(task.getReplSource());
+ compileTask.getFregeCompileItem().set(task.getReplModule());
return compileTask;
- })
- .get());
+ }
+ ));
task.getFregeCompilerJar().set(
setupFregeCompilerTask.get().getFregeCompilerOutputPath());
task.getFregeOutputDir().set(extension.getOutputDir());
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
index 7903d7e..67af55e 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java
@@ -1,7 +1,9 @@
package ch.fhnw.thga.gradleplugins;
+import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.extractClassNameFromFregeModuleName;
import org.gradle.api.DefaultTask;
import org.gradle.api.file.DirectoryProperty;
+import org.gradle.api.file.FileTree;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
@@ -25,15 +27,29 @@ public abstract class ReplFregeTask extends DefaultTask {
public abstract DirectoryProperty getFregeOutputDir();
@Input
- @Option(option = "replSource",
- description = "The filename which you want to load into the repl, e.g. 'myFregeFile.fr'")
- public abstract Property<String> getReplSource();
+ @Option(option = "replModule",
+ description = "The full name of the module which you want to load into the repl, e.g. 'my.mod.Name'")
+ public abstract Property<String> getReplModule();
@Internal
public final Provider<String> getReplClassName()
{
- return getReplSource()
- .map(replSource -> replSource.substring(replSource.lastIndexOf(".")));
+ return getReplModule()
+ .map(replSource -> extractClassNameFromFregeModuleName(replSource));
+ }
+
+ @Internal
+ public final Provider<FileTree> getClasspathWithoutReplClassFile()
+ {
+ return getFregeOutputDir()
+ .map(outDir -> outDir.getAsFileTree())
+ .map(tree -> tree.matching(pattern -> pattern.exclude("**/*.java")))
+ .map(tree -> tree.matching(pattern -> pattern.exclude(
+ String.format(
+ "**/%s.class",
+ getReplClassName().get()
+ )
+ )));
}
@TaskAction
@@ -45,7 +61,7 @@ public abstract class ReplFregeTask extends DefaultTask {
getProject(),
getFregeDependencies(),
getFregeCompilerJar(),
- getFregeOutputDir())
+ getClasspathWithoutReplClassFile())
.get().getAsPath(),
REPL_MAIN_CLASS));
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java
index 57af617..e6191a3 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java
@@ -5,7 +5,8 @@ import org.gradle.api.file.FileCollection;
import org.gradle.api.provider.Provider;
import org.gradle.api.provider.Property;
-public final class SharedTaskLogic {
+public final class SharedTaskLogic
+{
private SharedTaskLogic() {};
public static final Provider<FileCollection> setupClasspath(
@@ -19,4 +20,9 @@ public final class SharedTaskLogic {
: project.files(depsClasspath, paths);
});
}
+
+ public static final String extractClassNameFromFregeModuleName(String moduleName)
+ {
+ return moduleName.substring(moduleName.lastIndexOf(".") + 1);
+ }
}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
index df070a2..d379013 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
@@ -15,7 +15,7 @@ public interface Builder {
Builder compilerFlags(String compilerFlags);
- Builder replSource(String replSource);
+ Builder replModule(String replModule);
FregeDTO build();
}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
index e092eac..bea1e81 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
@@ -14,7 +14,7 @@ public class FregeDTO {
public final String outputDir;
public final String mainModule;
public final String compilerFlags;
- public final String replSource;
+ public final String replModule;
public FregeDTO(
String version,
@@ -24,7 +24,7 @@ public class FregeDTO {
String outputDir,
String mainModule,
String compilerFlags,
- String replSource) {
+ String replModule) {
this.version = version;
this.release = release;
this.compilerDownloadDir = compilerDownloadDir;
@@ -32,7 +32,7 @@ public class FregeDTO {
this.outputDir = outputDir;
this.mainModule = mainModule;
this.compilerFlags = compilerFlags;
- this.replSource = replSource;
+ this.replModule = replModule;
}
public String getVersion() {
@@ -63,8 +63,8 @@ public class FregeDTO {
return compilerFlags;
}
- public String getReplSource() {
- return replSource;
+ public String getReplModule() {
+ return replModule;
}
private String getFieldValue(Field field) {
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
index d7fe9f1..58e8396 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
@@ -8,7 +8,7 @@ public final class FregeDTOBuilder implements Builder {
private String outputDir = "";
private String mainModule = "";
private String compilerFlags = "";
- private String replSource = "";
+ private String replModule = "";
private FregeDTOBuilder() {}
@@ -65,9 +65,9 @@ public final class FregeDTOBuilder implements Builder {
}
@Override
- public Builder replSource(String replSource)
+ public Builder replModule(String replModule)
{
- this.replSource = replSource;
+ this.replModule = replModule;
return this;
}
@@ -80,6 +80,6 @@ public final class FregeDTOBuilder implements Builder {
outputDir,
mainModule,
compilerFlags,
- replSource);
+ replModule);
}
}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java
index 6f10d70..bb353a8 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java
@@ -1,14 +1,52 @@
package ch.fhnw.thga.gradleplugins;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.extractClassNameFromFregeModuleName;
+
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
+import net.jqwik.api.Example;
+import net.jqwik.api.ForAll;
+import net.jqwik.api.Property;
+
@TestInstance(Lifecycle.PER_CLASS)
public class SharedTaskLogicTest
{
- @Test
+ @Example
void given_valid_frege_module_name_then_can_extract_class_name()
{
+ assertEquals(
+ extractClassNameFromFregeModuleName("ch.fhnw.thga.Completion"),
+ "Completion"
+ );
+ }
+
+ @Example
+ void given_empty_frege_module_name_then_returns_empty_string()
+ {
+ assertEquals(
+ extractClassNameFromFregeModuleName(""),
+ ""
+ );
+ }
+
+ @Example
+ void module_name_without_a_package_equals_class_name()
+ {
+ assertEquals(
+ extractClassNameFromFregeModuleName("Completion"),
+ "Completion"
+ );
+ }
+
+ @Property
+ void class_name_is_the_suffix_of_the_full_module_name(
+ @ForAll String aString)
+ {
+ String expectedFregeClassName = "Completion";
+ assertEquals(
+ extractClassNameFromFregeModuleName(String.join(".", expectedFregeClassName)),
+ expectedFregeClassName);
}
} \ No newline at end of file