aboutsummaryrefslogtreecommitdiff
path: root/src/functionalTest/java
diff options
context:
space:
mode:
authortricktron <tgagnaux@gmail.com>2022-03-09 18:08:57 +0100
committerGitHub <noreply@github.com>2022-03-09 18:08:57 +0100
commit77dd1ed3d3f451fe2a58cfdaad1329777777d3b4 (patch)
tree81b445ffa30e5c1e953612e481514b56859fd11b /src/functionalTest/java
parent0fb7e5baa3b1418e69f04716d20ad0f8bbdb5992 (diff)
parent68562738c90ede953ab3e4c24c0fa9aef79c8c6d (diff)
downloadfrege-gradle-plugin-77dd1ed3d3f451fe2a58cfdaad1329777777d3b4.tar.gz
frege-gradle-plugin-77dd1ed3d3f451fe2a58cfdaad1329777777d3b4.tar.bz2
frege-gradle-plugin-77dd1ed3d3f451fe2a58cfdaad1329777777d3b4.zip
Merge pull request #31 from tricktron/f-test-task
Adds testFrege Task
Diffstat (limited to 'src/functionalTest/java')
-rw-r--r--src/functionalTest/java/ch/fhnw/thga/gradleplugins/TestFregeFunctionalTest.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/TestFregeFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/TestFregeFunctionalTest.java
new file mode 100644
index 0000000..4a53fa0
--- /dev/null
+++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/TestFregeFunctionalTest.java
@@ -0,0 +1,144 @@
+package ch.fhnw.thga.gradleplugins;
+
+import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_SOURCE_DIR;
+import static ch.fhnw.thga.gradleplugins.FregePlugin.TEST_FREGE_TASK_NAME;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask;
+import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask;
+import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.EMPTY_LINE;
+import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.NEW_LINE;
+import static org.gradle.testkit.runner.TaskOutcome.FAILED;
+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.File;
+import java.util.stream.Stream;
+
+import org.gradle.api.Project;
+import org.gradle.testkit.runner.BuildResult;
+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.io.TempDir;
+
+import ch.fhnw.thga.gradleplugins.fregeproject.FregeProjectBuilder;
+import ch.fhnw.thga.gradleplugins.fregeproject.FregeSourceFile;
+
+public class TestFregeFunctionalTest
+{
+ private static final FregeSourceFile PROPERTY_TESTS_FR = new FregeSourceFile(
+ String.format(
+ "%s/%s",
+ DEFAULT_RELATIVE_SOURCE_DIR,
+ "ch/fhnw/thga/PropertyTests.fr"
+ ),
+ String.join(NEW_LINE,
+ "module ch.fhnw.thga.PropertyTests where",
+ EMPTY_LINE,
+ "import Test.QuickCheck",
+ EMPTY_LINE,
+ "p_pass = property $ \\(n::Integer) -> odd n ^^ even n",
+ "p_fail = property $ \\(n::Integer) -> even n"
+ )
+ );
+
+ @Nested
+ @IndicativeSentencesGeneration(
+ separator = " -> ",
+ generator = DisplayNameGenerator.ReplaceUnderscores.class
+ )
+ class Test_frege_task_works
+ {
+ @Test
+ void given_frege_code_with_true_quick_check_property(
+ @TempDir File testProjectDir)
+ throws Exception
+ {
+ String mainBuildConfig = createFregeSection(
+ FregeDTOBuilder
+ .builder()
+ .version("'3.25.84'")
+ .release("'3.25alpha'")
+ .mainModule("'ch.fhnw.thga.PropertyTests'")
+ .build()
+ );
+
+ Project project = FregeProjectBuilder
+ .builder()
+ .projectRoot(testProjectDir)
+ .buildFile(mainBuildConfig)
+ .fregeSourceFiles(() -> Stream.of(PROPERTY_TESTS_FR))
+ .build();
+
+ BuildResult result = runGradleTask(
+ testProjectDir,
+ TEST_FREGE_TASK_NAME,
+ "--args=-v -p p_pass"
+ );
+
+ assertTrue(
+ project
+ .getTasks()
+ .getByName(TEST_FREGE_TASK_NAME)
+ instanceof TestFregeTask
+ );
+ assertEquals(
+ SUCCESS,
+ result.task(":" + TEST_FREGE_TASK_NAME).getOutcome()
+ );
+ assertTrue(result.getOutput().contains("OK"));
+ assertTrue(result.getOutput().contains("Properties passed: 1, failed: 0"));
+ }
+ }
+
+ @Nested
+ @IndicativeSentencesGeneration(
+ separator = " -> ",
+ generator = DisplayNameGenerator.ReplaceUnderscores.class
+ )
+ class Test_frege_task_fails
+ {
+ @Test
+ void given_frege_code_with_false_quick_check_property(
+ @TempDir File testProjectDir)
+ throws Exception
+ {
+ String mainBuildConfig = createFregeSection(
+ FregeDTOBuilder
+ .builder()
+ .version("'3.25.84'")
+ .release("'3.25alpha'")
+ .mainModule("'ch.fhnw.thga.PropertyTests'")
+ .build()
+ );
+
+ Project project = FregeProjectBuilder
+ .builder()
+ .projectRoot(testProjectDir)
+ .buildFile(mainBuildConfig)
+ .fregeSourceFiles(() -> Stream.of(PROPERTY_TESTS_FR))
+ .build();
+
+ BuildResult result = runAndFailGradleTask(
+ testProjectDir,
+ TEST_FREGE_TASK_NAME,
+ "--args=-v -p p_fail"
+ );
+
+ assertTrue(
+ project
+ .getTasks()
+ .getByName(TEST_FREGE_TASK_NAME)
+ instanceof TestFregeTask
+ );
+ assertEquals(
+ FAILED,
+ result.task(":" + TEST_FREGE_TASK_NAME).getOutcome()
+ );
+ assertTrue(result.getOutput().contains("Failed"));
+ assertTrue(result.getOutput().contains("Properties passed: 0, failed: 1"));
+ }
+ }
+}