aboutsummaryrefslogtreecommitdiff
path: root/src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy
blob: 5c985e865eb29c0c9e149e6a9c2f42a66f962ae7 (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
package frege.plugin

import org.gradle.testkit.runner.GradleRunner
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import spock.lang.Specification

import static org.gradle.testkit.runner.TaskOutcome.SUCCESS

class FregePluginIntegTest extends Specification {

    @Rule
    final TemporaryFolder testProjectDir = new TemporaryFolder()
    File buildFile

    List<File> pluginClasspath

    def setup() {
        buildFile = testProjectDir.newFile('build.gradle')

        def pluginClasspathResource = getClass().classLoader.findResource("plugin-classpath.txt")
        if (pluginClasspathResource == null) {
            // try again via file reference
            pluginClasspathResource = new File("build/createClasspathManifest/plugin-classpath.txt")
            if (pluginClasspathResource == null) {
                throw new IllegalStateException("Did not find plugin classpath resource, run `integTestClasses` build task.")
            }
        }
        pluginClasspath = pluginClasspathResource.readLines().collect { new File(it) }
    }

    def "can compile frege production code"() {
        given:
        buildFile << """
            plugins {
                id 'org.frege-lang'
            }

            repositories {
                jcenter()
            }

            dependencies {
                compile "org.frege-lang:frege:3.22.367-g2737683"
            }

            task sayHello(type: JavaExec){
                classpath = sourceSets.main.runtimeClasspath
                main = 'HelloFrege'
            }

        """

        testProjectDir.newFolder("src", "main", "frege")
        def fregeSourceFile = testProjectDir.newFile("src/main/frege/HelloFrege.fr")

        fregeSourceFile << """
module HelloFrege where

greeting = "Hello Frege!"

main _ = do
    println greeting
"""

        when:
        def result = GradleRunner.create()
                .withProjectDir(testProjectDir.root)
                .withArguments('sayHello')
                .withPluginClasspath(pluginClasspath)
                .build()

        then:
        result.output.contains("Hello Frege!")
        result.task(":sayHello").outcome == SUCCESS
    }
}