Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #29 from breskeby/with-java
some more basic cleanup and fixing
- Loading branch information
Showing
11 changed files
with
334 additions
and
269 deletions.
There are no files selected for viewing
68 changes: 68 additions & 0 deletions
68
src/integTest/groovy/frege/gradle/integtest/fixtures/AbstractFregeIntegrationSpec.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package frege.gradle.integtest.fixtures | ||
|
||
import org.gradle.testkit.runner.GradleRunner | ||
import org.gradle.testkit.runner.BuildResult | ||
import org.junit.Rule | ||
import org.junit.rules.TemporaryFolder | ||
import spock.lang.Specification | ||
|
||
class AbstractFregeIntegrationSpec extends Specification { | ||
public static final String DEFAULT_FREGE_VERSION = "3.23.370-g898bc8c" | ||
List<File> pluginClasspath | ||
|
||
@Rule | ||
final TemporaryFolder testProjectDir = new TemporaryFolder() | ||
File buildFile | ||
|
||
def setup() { | ||
buildFile = testProjectDir.newFile('build.gradle') | ||
|
||
|
||
testProjectDir.newFolder("src", "main", "java", "org", "frege") | ||
testProjectDir.newFolder("src", "main", "frege", "org", "frege") | ||
|
||
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) } | ||
} | ||
|
||
|
||
BuildResult run(String task) { | ||
run(null, task); | ||
} | ||
|
||
BuildResult run(String gradleVersion, String task) { | ||
def writer = new StringWriter(); | ||
GradleRunner runner = newRunner(task, writer, gradleVersion) | ||
def result = runner.build() | ||
println writer; | ||
return result; | ||
} | ||
|
||
BuildResult fail(String task) { | ||
def writer = new StringWriter(); | ||
GradleRunner runner = newRunner(task, writer, null) | ||
def result = runner.buildAndFail() | ||
println writer; | ||
return result; | ||
} | ||
|
||
private GradleRunner newRunner(String task, StringWriter writer, String gradleVersion) { | ||
def runner = GradleRunner.create() | ||
.withProjectDir(testProjectDir.root) | ||
.withArguments(task) | ||
.withPluginClasspath(pluginClasspath) | ||
.forwardStdOutput(writer) | ||
if (gradleVersion) { | ||
runner.withGradleVersion(gradleVersion) | ||
} | ||
runner | ||
} | ||
|
||
} |
128 changes: 128 additions & 0 deletions
128
src/integTest/groovy/frege/gradle/plugins/FregePluginIntegTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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' | ||
} """ | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
src/integTest/groovy/frege/gradle/tasks/FregeCompileIntegTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package frege.gradle.tasks | ||
import frege.gradle.integtest.fixtures.AbstractFregeIntegrationSpec | ||
|
||
import static org.gradle.testkit.runner.TaskOutcome.FAILED | ||
|
||
class FregeCompileIntegTest extends AbstractFregeIntegrationSpec { | ||
|
||
List<File> pluginClasspath | ||
|
||
def setup() { | ||
buildFile << """ | ||
plugins { | ||
id 'org.frege-lang.base' | ||
} | ||
import frege.gradle.tasks.FregeCompile | ||
repositories { jcenter() } | ||
configurations { frege {} } | ||
dependencies { | ||
frege "org.frege-lang:frege:$DEFAULT_FREGE_VERSION" | ||
} | ||
task compile(type: FregeCompile) { | ||
destinationDir = file("frege-output") | ||
source("frege-src") | ||
module = "frege-src" | ||
classpath = configurations.frege | ||
fregepath = configurations.frege | ||
} | ||
""" | ||
|
||
testProjectDir.newFolder("frege-src") | ||
} | ||
|
||
def "shows compile errors"() { | ||
given: | ||
simpleFrege() | ||
failingFrege() | ||
when: | ||
def result = fail("compile") | ||
|
||
then: | ||
result.task(":compile").outcome == FAILED | ||
result.output.contains("Failing.fr:6: can't resolve `Hello`") | ||
} | ||
|
||
def failingFrege() { | ||
def failingFrege = testProjectDir.newFile("frege-src/Failing.fr") | ||
failingFrege << """ | ||
module Failing where | ||
failingFun _ = do | ||
println(Hello) | ||
""" | ||
} | ||
|
||
def simpleFrege() { | ||
|
||
def helloFrege = testProjectDir.newFile("frege-src/Hello.fr") | ||
helloFrege << """ | ||
module Hello where | ||
import frege.prelude.PreludeBase | ||
main _ = do | ||
println("Hello From Frege") | ||
""" | ||
} | ||
} |
108 changes: 0 additions & 108 deletions
108
src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.