aboutsummaryrefslogtreecommitdiff
path: root/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy
diff options
context:
space:
mode:
Diffstat (limited to 'src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy')
-rw-r--r--src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy b/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy
new file mode 100644
index 0000000..e837a2a
--- /dev/null
+++ b/src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy
@@ -0,0 +1,128 @@
+package frege.gradle.plugins
+
+import frege.gradle.integtest.fixtures.AbstractFregeIntegrationSpec
+import org.gradle.testkit.runner.BuildResult
+import spock.lang.Unroll
+import static org.gradle.testkit.runner.TaskOutcome.*
+
+class FregePluginIntegTest extends AbstractFregeIntegrationSpec {
+
+ def setup() {
+ buildFile << """
+ plugins {
+ id 'org.frege-lang'
+ }
+
+ repositories {
+ jcenter()
+ }
+ """
+ }
+
+ def "can handle non existing source directories"() {
+ given:
+ buildFile << """
+ dependencies {
+ compile "org.frege-lang:frege:$DEFAULT_FREGE_VERSION"
+ }
+ """
+
+ when:
+ def result = run("classes")
+ then:
+ result.task(":compileFrege").outcome == UP_TO_DATE
+ }
+
+ @Unroll
+ def "can compile and run frege code (gradle: #gradleVersion, frege: #fregeVersion)"() {
+ given:
+ buildFile << """
+ dependencies {
+ compile "org.frege-lang:frege:$fregeVersion"
+ }
+ ${sayHelloTask()}
+ """
+
+ def fregeSourceFile = testProjectDir.newFile("src/main/frege/org/frege/HelloFrege.fr")
+
+ fregeSourceFile << """
+ module org.frege.HelloFrege where
+
+ greeting = "Hello Frege!"
+
+ main _ = do
+ println greeting
+ """
+
+ when:
+ def result = run(gradleVersion, "sayHello")
+
+ then:
+ result.output.contains("Hello Frege!")
+ result.task(":sayHello").outcome == SUCCESS
+
+ where:
+ fregeVersion | gradleVersion
+ DEFAULT_FREGE_VERSION | "2.9"
+ DEFAULT_FREGE_VERSION | "2.8"
+ "3.22.367-g2737683" | "2.9"
+ "3.22.367-g2737683" | "2.8"
+ }
+
+ def "can reference java from frege"() {
+ given:
+ buildFile << """
+ dependencies {
+ compile "org.frege-lang:frege:$DEFAULT_FREGE_VERSION"
+ }
+ ${sayHelloTask()}
+ """
+
+ and:
+ javaCode()
+ fregeCallingJava()
+ when:
+ BuildResult result = run("sayHello")
+ then:
+ result.task(":compileJava").outcome == SUCCESS
+ result.task(":compileFrege").outcome == SUCCESS
+ result.output.contains("hello from java")
+ }
+
+ def fregeCallingJava() {
+
+ File fregeSourceFile = testProjectDir.newFile("src/main/frege/org/frege/HelloFrege.fr")
+ fregeSourceFile << """
+ module org.frege.HelloFrege where
+
+ data StaticHello = pure native org.frege.StaticHello where
+ pure native helloJava org.frege.StaticHello.helloJava:: () -> String
+
+
+ main _ = do
+ println(StaticHello.helloJava())
+
+ """
+ }
+
+ def javaCode(String sourceRoot = "java") {
+ def javaSourceFile = testProjectDir.newFile("src/main/$sourceRoot/org/frege/StaticHello.java")
+
+ javaSourceFile << """
+ package org.frege;
+
+ public class StaticHello {
+ public static String helloJava() {
+ return "hello from java";
+ }
+ }
+ """
+ }
+
+ def sayHelloTask() {
+ return """ task sayHello(type: JavaExec) {
+ classpath = sourceSets.main.runtimeClasspath
+ main = 'org.frege.HelloFrege'
+ } """
+ }
+} \ No newline at end of file