aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorThibault Gagnaux <tgagnaux@gmail.com>2021-07-07 22:58:47 +0200
committerThibault Gagnaux <tgagnaux@gmail.com>2021-07-07 22:58:47 +0200
commit2fceaad440fffc1f6edbd8e4887469cc948edb5d (patch)
tree8ceac945432e7c38ac7655d4590bdc5e2f9ef6c3 /src/test
parentcd5d39b867ad5435039d1a47244252078600ca0b (diff)
downloadfrege-gradle-plugin-2fceaad440fffc1f6edbd8e4887469cc948edb5d.tar.gz
frege-gradle-plugin-2fceaad440fffc1f6edbd8e4887469cc948edb5d.tar.bz2
frege-gradle-plugin-2fceaad440fffc1f6edbd8e4887469cc948edb5d.zip
Splits tests into fast unit tests and slow functional tests
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOTest.java67
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java159
2 files changed, 67 insertions, 159 deletions
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOTest.java
new file mode 100644
index 0000000..8df6eae
--- /dev/null
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOTest.java
@@ -0,0 +1,67 @@
+package ch.fhnw.thga.gradleplugins;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.stream.Stream;
+import java.util.stream.Collectors;
+
+import org.junit.jupiter.api.Test;
+
+public class FregeDTOTest {
+ private final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder();
+
+ private static String buildFilePluginString(String pluginId) {
+ return String.format("id '%s'", pluginId);
+ }
+
+ static String createPluginsSection(Stream<String> pluginIds) {
+ String plugins = pluginIds.map(pluginId -> buildFilePluginString(pluginId)).collect(Collectors.joining("\n "));
+ return String.format("plugins {\n %s\n}\n", plugins);
+ }
+
+ // TODO: Is there a better alternative?
+ // needed helper method because reflection does NOT return the fields in order
+ private void assertStringContainsSubStrings(String s, Stream<String> subStrings) {
+ assertTrue(subStrings.allMatch(substring -> s.contains(substring)));
+ }
+
+ @Test
+ void given_version_then_fregeDTO_can_be_converted_to_build_file_string() {
+ FregeDTO fregeDTO = fregeBuilder.version("'3.25'").build();
+ String expected = "version = '3.25'";
+ assertEquals(expected, fregeDTO.toBuildFile());
+ }
+
+ @Test
+ void given_version_and_release_then_fregeDTO_can_be_converted_to_build_file_string() {
+ FregeDTO fregeDTO = fregeBuilder.version("'3.25'").release("'3.25alpha'").build();
+ String expected = "version = '3.25'\n release = '3.25alpha'";
+ assertStringContainsSubStrings(expected, fregeDTO.toBuildFile().lines());
+ }
+
+ @Test
+ void given_version_release_and_compiler_download_dir_then_fregeDTO_can_be_converted_to_build_file_string() {
+ FregeDTO fregeDTO = fregeBuilder.version("'3.25'").release("'3.25alpha'")
+ .compilerDownloadDir("layout.projectDirectory.dir('dist')").build();
+ String expected = "version = '3.25'\n release = '3.25alpha'\n compilerDownloadDir = layout.projectDirectory.dir('dist')";
+ assertStringContainsSubStrings(expected, fregeDTO.toBuildFile().lines());
+ }
+
+ @Test
+ void given_single_plugin_id_then_it_is_correctly_converted_to_build_file_string() {
+ String pluginId = "frege";
+ Stream<String> pluginIds = Stream.of(pluginId);
+ String expected = "plugins {\n" + " id '" + pluginId + "'\n" + "}\n";
+ assertEquals(expected, createPluginsSection(pluginIds));
+ }
+
+ @Test
+ void given_multiple_plugin_ids_then_they_are_correctly_converted_to_build_file_string() {
+ String fregeId = "frege";
+ String javaId = "java";
+ Stream<String> pluginIds = Stream.of(fregeId, javaId);
+ String expected = "plugins {\n" + " id '" + fregeId + "'\n" + " id '" + javaId + "'\n" + "}\n";
+ assertEquals(expected, createPluginsSection(pluginIds));
+ }
+}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
deleted file mode 100644
index 81ba9ad..0000000
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package ch.fhnw.thga.gradleplugins;
-
-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 org.gradle.testkit.runner.TaskOutcome.SUCCESS;
-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.Paths;
-import java.util.stream.Collectors;
-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.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.io.TempDir;
-
-public class FregePluginFunctionalTest {
-
- private final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder();
-
- @TempDir
- File testProjectDir;
- private File buildFile;
- private File settingsFile;
- 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));
- output.write(content);
- } finally {
- if (output != null) {
- output.close();
- }
- }
- }
-
- private void writeToFile(File destination, String content) throws IOException {
- writeFile(destination, content, false);
- }
-
- private void appendToFile(File destination, String content) throws IOException {
- writeFile(destination, "\n" + content, true);
- }
-
- private static String buildFilePluginString(String pluginId) {
- return String.format("id '%s'", pluginId);
- }
-
- private static String createPluginsSection(Stream<String> pluginIds) {
- String plugins = pluginIds.map(pluginId -> buildFilePluginString(pluginId)).collect(Collectors.joining("\n "));
- return String.format("plugins {\n %s\n}\n", plugins);
- }
-
- private static String createFregeSection(FregeDTO fregeDTO) {
- 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());
- }
-
- @BeforeEach
- void setup() throws Exception {
- buildFile = new File(testProjectDir, "build.gradle");
- 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);
- }
-
- @Test
- void given_version_and_release_then_fregeDTO_can_be_converted_to_build_file_string() {
- FregeDTO fregeDTO = fregeBuilder.version("'3.25'").release("'3.25alpha'").build();
- String expected = "version = '3.25'\n release = '3.25alpha'";
- assertEquals(expected, fregeDTO.toBuildFile());
- }
-
- @Test
- void given_version_release_and_compiler_download_dir_then_fregeDTO_can_be_converted_to_build_file_string() {
- FregeDTO fregeDTO = fregeBuilder.version("'3.25'").release("'3.25alpha'")
- .compilerDownloadDir("layout.projectDirectory.dir('dist')").build();
- String expected = "version = '3.25'\n release = '3.25alpha'\n compilerDownloadDir = layout.projectDirectory.dir('dist')";
- assertEquals(expected, fregeDTO.toBuildFile());
- }
-
- @Test
- void given_single_plugin_id_then_it_is_correctly_converted_to_build_file_string() {
- String pluginId = "frege";
- Stream<String> pluginIds = Stream.of(pluginId);
- String expected = "plugins {\n" + " id '" + pluginId + "'\n" + "}\n";
- assertEquals(expected, createPluginsSection(pluginIds));
- }
-
- @Test
- void given_multiple_plugin_ids_then_they_are_correctly_converted_to_build_file_string() {
- String fregeId = "frege";
- String javaId = "java";
- Stream<String> pluginIds = Stream.of(fregeId, javaId);
- String expected = "plugins {\n" + " id '" + fregeId + "'\n" + " id '" + javaId + "'\n" + "}\n";
- assertEquals(expected, createPluginsSection(pluginIds));
- }
-
- @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());
- }
-
- @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());
- }
-
- @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());
- }
-} \ No newline at end of file