aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml (renamed from .github/workflows/main.yml)0
-rw-r--r--README.md24
-rw-r--r--build.gradle2
-rw-r--r--gradle.properties2
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java140
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java1
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java5
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java14
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java43
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/Builder.java2
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java8
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java29
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/GradleBuildFileConversionTest.java8
13 files changed, 236 insertions, 42 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/build.yml
index c82e9d6..c82e9d6 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/build.yml
diff --git a/README.md b/README.md
index f909cf7..76b42c5 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
# Frege Gradle Plugin
-Compile frege code with gradle.
+![build](https://github.com/tricktron/frege-gradle-plugin/actions/workflows/build.yml/badge.svg)
+
+Simplifies setting up your Frege project.
## Installation
@@ -10,18 +12,32 @@ git clone https://github.com/tricktron/frege-gradle-plugin.git
```
## How to Use
-1. Specify the frege compiler release and version in your `build.gradle`:
+1. Specify the frege compiler release, version and main module in your `build.gradle`:
```groovy
frege {
version = '3.25.84'
release = '3.25alpha'
+ mainModule = 'my.mod.Name'
}
```
-See the [frege releases](https://github.com/Frege/frege/releases) for all available versions.
+See the [Frege Releases](https://github.com/Frege/frege/releases) for all available versions.
+
+Optional configuration parameters inside `build.gradle`:
+- compilerDownloadDir: defaults to `<projectRoot>/lib`
+- mainSourceDir: defaults to `<projectRoot>/src/main/frege`
+- outputDir: defaults to `<projectRoot>/build/classes/main/frege`
+
+
+
+
+### Added Tasks
+
+- **setupFrege**: Downloads the specified version of the Frege compiler.
+- **compileFrege**: All your `*.fr` files in `mainSourceDir` get compiled to `outputDir`.
+- **runFrege**: Runs the Frege module specified by `mainModule`. Alternatively you can also pass the main module by command line, e.g: `gradle runFrege --mainModule=my.mod.Name`.
-2. Run the newly added `compileFrege` task. All your `*.fr` files get compiled to `build/classes/frege`.
## How to Contribute
Try to add another task, e.g. `fregeDoc` to the [FregePluginFunctionalTest.java](src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java) file and try to make the test pass. \ No newline at end of file
diff --git a/build.gradle b/build.gradle
index a30daed..f64913d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -45,7 +45,7 @@ tasks.withType(Test).configureEach {
dependencies {
def junit5Group = 'org.junit.jupiter'
- def junit5Version = '5.7.2'
+ def junit5Version = '5.8.1'
testImplementation group: junit5Group, name: 'junit-jupiter-api', version: junit5Version
testRuntimeOnly group: junit5Group, name: 'junit-jupiter-engine', version: junit5Version
}
diff --git a/gradle.properties b/gradle.properties
index cae3d07..52f90fe 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,2 +1,2 @@
group = ch.fhnw.thga
-version = 1.0.0-alpha \ No newline at end of file
+version = 1.1.0-alpha \ No newline at end of file
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
index e93bd19..aa3a7f4 100644
--- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
@@ -2,11 +2,9 @@ package ch.fhnw.thga.gradleplugins;
import static ch.fhnw.thga.gradleplugins.GradleBuildFileConversionTest.createPluginsSection;
import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_DOWNLOAD_DIRECTORY;
-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.SETUP_FREGE_TASK_NAME;
+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.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -15,6 +13,7 @@ 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.stream.Stream;
@@ -35,8 +34,14 @@ import org.junit.jupiter.api.io.TempDir;
@TestInstance(Lifecycle.PER_CLASS)
public class FregePluginFunctionalTest {
+ private static final String NEW_LINE = System.lineSeparator();
+ private static final String SIMPLE_FREGE_CODE = 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 final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder();
+ private static FregeDTOBuilder fregeBuilder;
@TempDir
File testProjectDir;
@@ -62,9 +67,22 @@ public class FregePluginFunctionalTest {
return String.format("%s {\n %s\n}", FREGE_EXTENSION_NAME, fregeDTO.toBuildFile());
}
- private BuildResult runGradleTask(String taskName) {
- return GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath()
- .withArguments(taskName).build();
+ private BuildResult runGradleTask(String... taskName) {
+ return GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath().withArguments(taskName)
+ .build();
+ }
+
+ private BuildResult runAndFailGradleTask(String taskName, String... args) {
+ return GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath().withArguments(taskName)
+ .buildAndFail();
+ }
+
+ private void setupDefaultFregeProjectStructure(String fregeCode, String fregeFileName, String buildFileConfig) throws Exception {
+ Files.createDirectories(testProjectDir.toPath().resolve(Paths.get("src", "main", "frege")));
+ File fregeFile = testProjectDir.toPath().resolve(Paths.get("src", "main", "frege", fregeFileName))
+ .toFile();
+ writeToFile(fregeFile, fregeCode);
+ appendToFile(buildFile, buildFileConfig);
}
@BeforeAll
@@ -80,25 +98,27 @@ public class FregePluginFunctionalTest {
void setup() throws Exception {
buildFile = new File(testProjectDir, "build.gradle");
writeToFile(buildFile, createPluginsSection(Stream.of(FREGE_PLUGIN_ID)));
+ fregeBuilder = FregeDTOBuilder.getInstance();
}
@AfterEach
void cleanup() {
- buildFile.delete();
+ testProjectDir.delete();
}
@Nested
+ @TestInstance(Lifecycle.PER_CLASS)
@IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class)
class Setup_frege_task_works {
@Test
- void given_minimal_build_file_config()
- throws Exception {
- String minimalBuildFileConfig = createFregeSection(fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
+ 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(SETUP_FREGE_TASK_NAME);
-
+
assertTrue(project.getTasks().getByName(SETUP_FREGE_TASK_NAME) instanceof SetupFregeTask);
assertEquals(SUCCESS, result.task(":" + SETUP_FREGE_TASK_NAME).getOutcome());
assertTrue(testProjectDir.toPath().resolve(Paths.get(DEFAULT_DOWNLOAD_DIRECTORY, "frege3.25.84.jar"))
@@ -106,10 +126,9 @@ public class FregePluginFunctionalTest {
}
@Test
- void given_custom_frege_compiler_download_directory_in_build_file_config()
- throws Exception {
- String buildFileConfigWithCustomDownloadDir = createFregeSection(fregeBuilder.version("'3.25.84'").release("'3.25alpha'")
- .compilerDownloadDir("layout.projectDirectory.dir('dist')").build());
+ void given_custom_frege_compiler_download_directory_in_build_file_config() throws Exception {
+ String buildFileConfigWithCustomDownloadDir = createFregeSection(fregeBuilder.version("'3.25.84'")
+ .release("'3.25alpha'").compilerDownloadDir("layout.projectDirectory.dir('dist')").build());
appendToFile(buildFile, buildFileConfigWithCustomDownloadDir);
BuildResult result = runGradleTask(SETUP_FREGE_TASK_NAME);
@@ -121,19 +140,16 @@ public class FregePluginFunctionalTest {
}
@Nested
+ @TestInstance(Lifecycle.PER_CLASS)
@IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class)
class Compile_frege_task_works {
@Test
- void given_frege_code_in_src_main_frege_and_minimal_build_file_config() throws Exception {
- String fregeCode = "module ch.fhnw.thga.Completion where\n\n" + "complete :: Int -> (Int, String)\n"
- + "complete i = (i, \"Frege rocks\")\n";
- Files.createDirectories(testProjectDir.toPath().resolve(Paths.get("src", "main", "frege")));
- File completionFr = testProjectDir.toPath().resolve(Paths.get("src", "main", "frege", "Completion.fr"))
- .toFile();
- writeToFile(completionFr, fregeCode);
- String minimalBuildFileConfig = createFregeSection(fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
- appendToFile(buildFile, minimalBuildFileConfig);
+ void given_frege_code_in_default_source_dir_and_minimal_build_file_config() 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 result = runGradleTask(COMPILE_FREGE_TASK_NAME);
@@ -146,5 +162,77 @@ public class FregePluginFunctionalTest {
testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.class")
.exists());
}
+
+ @Test
+ void given_frege_code_in_custom_source_dir_and_custom_output_dir_and_minimal_build_file_config()
+ throws Exception {
+ Path customMainSourceDir = testProjectDir.toPath().resolve(Paths.get("src", "frege"));
+ Files.createDirectories(customMainSourceDir);
+ File completionFr = customMainSourceDir.resolve("Completion.fr").toFile();
+ writeToFile(completionFr, SIMPLE_FREGE_CODE);
+ String minimalBuildFileConfig = createFregeSection(fregeBuilder.version("'3.25.84'").release("'3.25alpha'")
+ .mainSourceDir("layout.projectDirectory.dir('src/frege')")
+ .outputDir("layout.buildDirectory.dir('frege')").build());
+ appendToFile(buildFile, minimalBuildFileConfig);
+
+ BuildResult result = runGradleTask(COMPILE_FREGE_TASK_NAME);
+
+ assertTrue(project.getTasks().getByName(COMPILE_FREGE_TASK_NAME) instanceof CompileFregeTask);
+ assertEquals(SUCCESS, result.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome());
+ assertTrue(
+ new File(testProjectDir.getAbsolutePath() + "/build/frege/ch/fhnw/thga/Completion.java").exists());
+ assertTrue(
+ new File(testProjectDir.getAbsolutePath() + "/build/frege/ch/fhnw/thga/Completion.class").exists());
+ }
+ }
+
+ @Nested
+ @TestInstance(Lifecycle.PER_CLASS)
+ @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(
+ fregeBuilder.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(
+ fregeBuilder.version("'3.25.84'").release("'3.25alpha'")
+ .mainModule("'ch.fhnw.thga.Completion'").build());
+ setupDefaultFregeProjectStructure(SIMPLE_FREGE_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(
+ fregeBuilder.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"));
+ }
}
} \ No newline at end of file
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
index 551f6c5..6ba6212 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
@@ -29,7 +29,6 @@ public abstract class CompileFregeTask extends DefaultTask {
@Inject
public CompileFregeTask(ObjectFactory objectFactory) {
javaExec = objectFactory.newInstance(JavaExec.class);
-
}
@TaskAction
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
index fd4f1b4..139429b 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java
@@ -8,11 +8,14 @@ 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 abstract Property<String> getVersion();
public abstract Property<String> getRelease();
+ public abstract Property<String> getMainModule();
+
public abstract DirectoryProperty getCompilerDownloadDir();
public abstract DirectoryProperty getMainSourceDir();
@@ -23,7 +26,7 @@ public abstract class FregeExtension {
public FregeExtension(ProjectLayout projectLayout) {
getCompilerDownloadDir().convention(projectLayout.getProjectDirectory().dir(DEFAULT_DOWNLOAD_DIRECTORY));
getMainSourceDir().convention(projectLayout.getProjectDirectory());
- getOutputDir().convention(projectLayout.getBuildDirectory().dir("classes/main/frege"));
+ getOutputDir().convention(projectLayout.getBuildDirectory().dir(DEFAULT_RELATIVE_OUTPUT_DIR));
}
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
index 4f0bb34..8c50a5f 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java
@@ -7,6 +7,7 @@ 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 FREGE_PLUGIN_ID = "ch.fhnw.thga.frege";
public static final String FREGE_EXTENSION_NAME = "frege";
@@ -20,11 +21,18 @@ public class FregePlugin implements Plugin<Project> {
task.getDownloadDir().set(extension.getCompilerDownloadDir());
});
- project.getTasks().register(COMPILE_FREGE_TASK_NAME, CompileFregeTask.class, task -> {
- task.dependsOn(setupFregeCompilerTask);
+ TaskProvider<CompileFregeTask> compileFregeTask = project.getTasks().register(COMPILE_FREGE_TASK_NAME,
+ CompileFregeTask.class, task -> {
+ task.dependsOn(setupFregeCompilerTask);
+ task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath());
+ task.getFregeMainSourceDir().set(extension.getMainSourceDir());
+ task.getFregeOutputDir().set(extension.getOutputDir());
+ });
+ project.getTasks().register(RUN_FREGE_TASK_NAME, RunFregeTask.class, task -> {
+ task.dependsOn(compileFregeTask);
task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath());
- task.getFregeMainSourceDir().set(extension.getMainSourceDir());
task.getFregeOutputDir().set(extension.getOutputDir());
+ task.getMainModule().set(extension.getMainModule());
});
}
}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java
new file mode 100644
index 0000000..d27816c
--- /dev/null
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/RunFregeTask.java
@@ -0,0 +1,43 @@
+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.logging.Logger;
+import org.gradle.api.logging.Logging;
+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;
+
+public abstract class RunFregeTask extends DefaultTask {
+ public static final Logger LOGGER = Logging.getLogger(SetupFregeTask.class);
+ 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();
+
+ @Inject
+ public RunFregeTask(ObjectFactory objectFactory) {
+ javaExec = objectFactory.newInstance(JavaExec.class);
+ }
+
+ @TaskAction
+ public void runFrege() {
+ javaExec.getMainClass().set(getMainModule());
+ javaExec.setClasspath(getProject().files(getFregeCompilerJar(), getFregeOutputDir())).exec();
+ }
+}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
index cebaaf3..c8aeda7 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
@@ -11,5 +11,7 @@ public interface Builder {
Builder outputDir(String outputDir);
+ Builder mainModule(String mainModule);
+
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 63d7dae..271d07b 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
@@ -12,14 +12,16 @@ public class FregeDTO {
public final String compilerDownloadDir;
public final String mainSourceDir;
public final String outputDir;
+ public final String mainModule;
public FregeDTO(String version, String release, String compilerDownloadDir, String mainSourceDir,
- String outputDir) {
+ String outputDir, String mainModule) {
this.version = version;
this.release = release;
this.compilerDownloadDir = compilerDownloadDir;
this.mainSourceDir = mainSourceDir;
this.outputDir = outputDir;
+ this.mainModule = mainModule;
}
public String getVersion() {
@@ -42,6 +44,10 @@ public class FregeDTO {
return outputDir;
}
+ public String getMainModule() {
+ return mainModule;
+ }
+
private String getFieldValue(Field field) {
try {
return field.get(this).toString();
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
index afdc862..f4cabbe 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
@@ -1,11 +1,29 @@
package ch.fhnw.thga.gradleplugins;
-public class FregeDTOBuilder implements Builder {
+public final class FregeDTOBuilder implements Builder {
private String version = "";
private String release = "";
private String compilerDownloadDir = "";
private String mainSourceDir = "";
private String outputDir = "";
+ private String mainModule = "";
+
+ private static volatile FregeDTOBuilder instance;
+
+ private FregeDTOBuilder() {
+ }
+
+ public static FregeDTOBuilder getInstance() {
+ FregeDTOBuilder result = instance;
+ if (result != null) {
+ return result;
+ } else {
+ synchronized (FregeDTOBuilder.class) {
+ return (instance == null) ? new FregeDTOBuilder() : instance;
+ }
+ }
+ }
+
@Override
public Builder version(String version) {
@@ -41,8 +59,13 @@ public class FregeDTOBuilder implements Builder {
return this;
}
- public FregeDTO build() {
- return new FregeDTO(version, release, compilerDownloadDir, mainSourceDir, outputDir);
+ @Override
+ public Builder mainModule(String mainModule) {
+ this.mainModule = mainModule;
+ return this;
}
+ public FregeDTO build() {
+ return new FregeDTO(version, release, compilerDownloadDir, mainSourceDir, outputDir, mainModule);
+ }
}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/GradleBuildFileConversionTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/GradleBuildFileConversionTest.java
index 80c8827..8512113 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/GradleBuildFileConversionTest.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/GradleBuildFileConversionTest.java
@@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.stream.Stream;
import java.util.stream.Collectors;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.IndicativeSentencesGeneration;
import org.junit.jupiter.api.Nested;
@@ -15,7 +16,7 @@ import org.junit.jupiter.api.TestInstance.Lifecycle;
@TestInstance(Lifecycle.PER_CLASS)
public class GradleBuildFileConversionTest {
- private final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder();
+ private static FregeDTOBuilder fregeBuilder;
private static String buildFilePluginString(String pluginId) {
return String.format("id '%s'", pluginId);
@@ -30,6 +31,11 @@ public class GradleBuildFileConversionTest {
assertTrue(subStrings.allMatch(substring -> s.contains(substring)));
}
+ @BeforeEach
+ void setup() {
+ fregeBuilder = FregeDTOBuilder.getInstance();
+ }
+
@Nested
@IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class)
class Converting_Frege_DTO_to_build_file_key_value_pairs_works {