diff options
author | Thibault Gagnaux <thibault.gagnaux@bit.admin.ch> | 2021-07-08 12:18:42 +0200 |
---|---|---|
committer | Thibault Gagnaux <thibault.gagnaux@bit.admin.ch> | 2021-07-08 16:04:54 +0200 |
commit | ce39d8f5cdfae2788c4664e08d895afead76c682 (patch) | |
tree | f61be38f42c1b93a8b0cebdaaad52a90931b870e /src/functionalTest/java/ch/fhnw/thga | |
parent | 2fceaad440fffc1f6edbd8e4887469cc948edb5d (diff) | |
download | frege-gradle-plugin-ce39d8f5cdfae2788c4664e08d895afead76c682.tar.gz frege-gradle-plugin-ce39d8f5cdfae2788c4664e08d895afead76c682.tar.bz2 frege-gradle-plugin-ce39d8f5cdfae2788c4664e08d895afead76c682.zip |
Refactor: Uses junit5 nested tests for a better structure
Setups missing java 11 in the github workflow
Diffstat (limited to 'src/functionalTest/java/ch/fhnw/thga')
-rw-r--r-- | src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java | 132 |
1 files changed, 82 insertions, 50 deletions
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java index 6800f96..e93bd19 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java @@ -1,6 +1,6 @@ package ch.fhnw.thga.gradleplugins; -import static ch.fhnw.thga.gradleplugins.FregeDTOTest.createPluginsSection; +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; @@ -22,10 +22,18 @@ 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.BeforeAll; 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.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; import org.junit.jupiter.api.io.TempDir; +@TestInstance(Lifecycle.PER_CLASS) public class FregePluginFunctionalTest { private final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder(); @@ -37,14 +45,8 @@ public class FregePluginFunctionalTest { private Project project; private void writeFile(File destination, String content, boolean append) throws IOException { - BufferedWriter output = null; - try { - output = new BufferedWriter(new FileWriter(destination, append)); + try (BufferedWriter output = new BufferedWriter(new FileWriter(destination, append))) { output.write(content); - } finally { - if (output != null) { - output.close(); - } } } @@ -60,59 +62,89 @@ public class FregePluginFunctionalTest { return String.format("%s {\n %s\n}", FREGE_EXTENSION_NAME, fregeDTO.toBuildFile()); } - private void assertGradleTaskOutcome(String buildFileTaskConfig, String taskName) throws Exception { - appendToFile(buildFile, buildFileTaskConfig); - BuildResult result = GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath() - .withArguments(taskName).build(); - System.out.println(result.getOutput()); - assertEquals(SUCCESS, result.task(":" + taskName).getOutcome()); + private BuildResult runGradleTask(String taskName) { + return GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath() + .withArguments(taskName).build(); } - @BeforeEach - void setup() throws Exception { - buildFile = new File(testProjectDir, "build.gradle"); + @BeforeAll + void beforeAll() throws Exception { settingsFile = new File(testProjectDir, "settings.gradle"); - writeToFile(buildFile, createPluginsSection(Stream.of(FREGE_PLUGIN_ID))); writeToFile(settingsFile, "rootProject.name='frege-plugin'"); project = ProjectBuilder.builder().withProjectDir(testProjectDir).build(); project.getPluginManager().apply(FREGE_PLUGIN_ID); + + } + + @BeforeEach + void setup() throws Exception { + buildFile = new File(testProjectDir, "build.gradle"); + writeToFile(buildFile, createPluginsSection(Stream.of(FREGE_PLUGIN_ID))); } - @Test - void given_setup_frege_compiler_task_when_frege_version_and_frege_release_is_specified_then_frege_compiler_is_successfully_downloaded_to_default_directory() - throws Exception { - FregeDTO minimalFregeDTO = fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build(); - assertTrue(project.getTasks().getByName(SETUP_FREGE_TASK_NAME) instanceof SetupFregeTask); - assertGradleTaskOutcome(createFregeSection(minimalFregeDTO), SETUP_FREGE_TASK_NAME); - assertTrue(testProjectDir.toPath().resolve(Paths.get(DEFAULT_DOWNLOAD_DIRECTORY, "frege3.25.84.jar")).toFile() - .exists()); + @AfterEach + void cleanup() { + buildFile.delete(); } - @Test - void given_setup_frege_compiler_task_when_frege_version_and_frege_release_and_download_directory_is_specified_then_frege_compiler_is_successfully_downloaded_to_specified_directory() - throws Exception { - FregeDTO fregeDTO = fregeBuilder.version("'3.25.84'").release("'3.25alpha'") - .compilerDownloadDir("layout.projectDirectory.dir('dist')").build(); - assertTrue(project.getTasks().getByName(SETUP_FREGE_TASK_NAME) instanceof SetupFregeTask); - assertGradleTaskOutcome(createFregeSection(fregeDTO), SETUP_FREGE_TASK_NAME); - assertTrue(testProjectDir.toPath().resolve(Paths.get("dist", "frege3.25.84.jar")).toFile().exists()); + @Nested + @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()); + 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")) + .toFile().exists()); + } + + @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()); + appendToFile(buildFile, buildFileConfigWithCustomDownloadDir); + + 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("dist", "frege3.25.84.jar")).toFile().exists()); + } } - @Test - void frege_compile_task_is_correctly_executed() 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); - FregeDTO minimalFregeDTO = fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build(); - assertTrue(project.getTasks().getByName(COMPILE_FREGE_TASK_NAME) instanceof CompileFregeTask); - assertGradleTaskOutcome(createFregeSection(minimalFregeDTO), COMPILE_FREGE_TASK_NAME); - assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.java") - .exists()); - assertTrue( - new File(testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.class") - .exists()); + @Nested + @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); + + 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/classes/main/frege/ch/fhnw/thga/Completion.java") + .exists()); + assertTrue(new File( + testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.class") + .exists()); + } } }
\ No newline at end of file |