aboutsummaryrefslogtreecommitdiff
path: root/src/functionalTest
diff options
context:
space:
mode:
authorThibault Gagnaux <tgagnaux@gmail.com>2021-11-09 22:26:45 +0100
committerThibault Gagnaux <tgagnaux@gmail.com>2021-11-09 22:26:45 +0100
commit42bdca9c70e54d095e9ebfd69e82d1bca15bf9ac (patch)
tree03370001ccf6b5e3d56552f8edfe5aaf9432acfd /src/functionalTest
parent2b2b16037a7a2083a6929c20fbf8ac25763f8ec7 (diff)
downloadfrege-gradle-plugin-42bdca9c70e54d095e9ebfd69e82d1bca15bf9ac.tar.gz
frege-gradle-plugin-42bdca9c70e54d095e9ebfd69e82d1bca15bf9ac.tar.bz2
frege-gradle-plugin-42bdca9c70e54d095e9ebfd69e82d1bca15bf9ac.zip
feat: adds two tests and makes them pass for new `runFregeTask`
Diffstat (limited to 'src/functionalTest')
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java74
1 files changed, 58 insertions, 16 deletions
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
index e93bd19..1ea8e90 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;
@@ -35,6 +33,7 @@ import org.junit.jupiter.api.io.TempDir;
@TestInstance(Lifecycle.PER_CLASS)
public class FregePluginFunctionalTest {
+ private static final String NEW_LINE = System.lineSeparator();
private final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder();
@@ -62,9 +61,14 @@ 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, String... args) {
+ 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();
}
@BeforeAll
@@ -92,13 +96,13 @@ public class FregePluginFunctionalTest {
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 +110,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);
@@ -132,7 +135,8 @@ public class FregePluginFunctionalTest {
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());
+ String minimalBuildFileConfig = createFregeSection(
+ fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build());
appendToFile(buildFile, minimalBuildFileConfig);
BuildResult result = runGradleTask(COMPILE_FREGE_TASK_NAME);
@@ -147,4 +151,42 @@ public class FregePluginFunctionalTest {
.exists());
}
}
+
+ @Nested
+ @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);
+
+ 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 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);
+
+ 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"));
+ }
+ }
} \ No newline at end of file