blob: e837a2a3168bd51717bd42896d25a78eacd22709 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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'
} """
}
}
|