diff options
author | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-11-10 00:37:04 +0100 |
---|---|---|
committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-11-10 00:37:04 +0100 |
commit | 06d18924294dfe78eaba8eafe3a5ec559c43aecb (patch) | |
tree | 073d46f80a4184c633d8168a7339bbfa7ba91c08 | |
parent | 42bdca9c70e54d095e9ebfd69e82d1bca15bf9ac (diff) | |
download | frege-gradle-plugin-06d18924294dfe78eaba8eafe3a5ec559c43aecb.tar.gz frege-gradle-plugin-06d18924294dfe78eaba8eafe3a5ec559c43aecb.tar.bz2 frege-gradle-plugin-06d18924294dfe78eaba8eafe3a5ec559c43aecb.zip |
refactor: tests and makes `FregeDTOBuilder` a singleton
3 files changed, 80 insertions, 26 deletions
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java index 1ea8e90..3e36f52 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java @@ -13,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; @@ -34,8 +35,13 @@ 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; @@ -71,6 +77,14 @@ public class FregePluginFunctionalTest { .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 void beforeAll() throws Exception { settingsFile = new File(testProjectDir, "settings.gradle"); @@ -84,14 +98,16 @@ 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 { @@ -124,20 +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); + 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()); - appendToFile(buildFile, minimalBuildFileConfig); + setupDefaultFregeProjectStructure(SIMPLE_FREGE_CODE, completionFr, minimalBuildFileConfig); BuildResult result = runGradleTask(COMPILE_FREGE_TASK_NAME); @@ -150,21 +162,43 @@ 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() 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); - Files.createDirectories(testProjectDir.toPath().resolve(Paths.get("src", "main", "frege"))); - File mainFr = testProjectDir.toPath().resolve(Paths.get("src", "main", "frege", "Main.fr")).toFile(); - writeToFile(mainFr, fregeCode); - String minimalBuildFileConfig = createFregeSection( - fregeBuilder.version("'3.25.84'").release("'3.25alpha'").mainModule("'ch.fhnw.thga.Main'").build()); - appendToFile(buildFile, minimalBuildFileConfig); + 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); @@ -174,14 +208,11 @@ public class FregePluginFunctionalTest { @Test void given_frege_file_without_main_function() 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 completeFr = testProjectDir.toPath().resolve(Paths.get("src", "main", "frege", "Complete.fr")).toFile(); - writeToFile(completeFr, fregeCode); - String minimalBuildFileConfig = createFregeSection( - fregeBuilder.version("'3.25.84'").release("'3.25alpha'").mainModule("'ch.fhnw.thga.Completion'").build()); - appendToFile(buildFile, minimalBuildFileConfig); + 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); diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java index 5c24f10..f4cabbe 100644 --- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java +++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java @@ -1,6 +1,6 @@ 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 = ""; @@ -8,6 +8,23 @@ public class FregeDTOBuilder implements Builder { 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) { this.version = version; 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 { |