aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy46
-rw-r--r--src/main/groovy/frege/gradle/CompileTask.groovy2
-rw-r--r--src/main/groovy/frege/gradle/FregeBasePlugin.groovy17
-rw-r--r--src/main/groovy/frege/gradle/FregePlugin.groovy11
-rw-r--r--src/main/resources/META-INF/gradle-plugins/org.frege-lang.base.properties1
-rw-r--r--src/test/groovy/frege/gradle/FregeBasePluginTest.groovy29
-rw-r--r--src/test/groovy/frege/gradle/FregePluginTest.groovy30
7 files changed, 117 insertions, 19 deletions
diff --git a/src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy b/src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy
index 5c985e8..a67620f 100644
--- a/src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy
+++ b/src/integTest/groovy/frege/plugin/FregePluginIntegTest.groovy
@@ -1,14 +1,15 @@
package frege.plugin
-
import org.gradle.testkit.runner.GradleRunner
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import spock.lang.Specification
+import spock.lang.Unroll
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS
class FregePluginIntegTest extends Specification {
+ public static final String DEFAULT_FREGE_VERSION = "3.23.370-g898bc8c"
@Rule
final TemporaryFolder testProjectDir = new TemporaryFolder()
File buildFile
@@ -18,6 +19,15 @@ class FregePluginIntegTest extends Specification {
def setup() {
buildFile = testProjectDir.newFile('build.gradle')
+ buildFile << """
+ plugins {
+ id 'org.frege-lang'
+ }
+
+ repositories {
+ jcenter()
+ }
+ """
def pluginClasspathResource = getClass().classLoader.findResource("plugin-classpath.txt")
if (pluginClasspathResource == null) {
// try again via file reference
@@ -29,26 +39,36 @@ class FregePluginIntegTest extends Specification {
pluginClasspath = pluginClasspathResource.readLines().collect { new File(it) }
}
- def "can compile frege production code"() {
+ def "can handle non existing source directories"() {
given:
buildFile << """
- plugins {
- id 'org.frege-lang'
+ dependencies {
+ compile "org.frege-lang:frege:$DEFAULT_FREGE_VERSION"
}
+ """
- repositories {
- jcenter()
- }
+ when:
+ def result = GradleRunner.create()
+ .withProjectDir(testProjectDir.root)
+ .withArguments('classes')
+ .withPluginClasspath(pluginClasspath)
+ .build()
+ then:
+ result.task(":compileFrege") != null
+ }
+ @Unroll
+ def "can compile and run frege code"() {
+ given:
+ buildFile << """
dependencies {
- compile "org.frege-lang:frege:3.22.367-g2737683"
+ compile "org.frege-lang:frege:$fregeVersion"
}
task sayHello(type: JavaExec){
classpath = sourceSets.main.runtimeClasspath
main = 'HelloFrege'
}
-
"""
testProjectDir.newFolder("src", "main", "frege")
@@ -65,6 +85,7 @@ main _ = do
when:
def result = GradleRunner.create()
+ .withGradleVersion(gradleVersion)
.withProjectDir(testProjectDir.root)
.withArguments('sayHello')
.withPluginClasspath(pluginClasspath)
@@ -73,5 +94,12 @@ main _ = do
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"
}
} \ No newline at end of file
diff --git a/src/main/groovy/frege/gradle/CompileTask.groovy b/src/main/groovy/frege/gradle/CompileTask.groovy
index 07850a5..d297d3d 100644
--- a/src/main/groovy/frege/gradle/CompileTask.groovy
+++ b/src/main/groovy/frege/gradle/CompileTask.groovy
@@ -81,7 +81,7 @@ class CompileTask extends DefaultTask {
@Optional @Input
List<File> fregePaths = []
- @Optional @Input
+ @InputFiles
List<File> sourcePaths = [deduceSourceDir(project)]
@Optional @OutputDirectory
diff --git a/src/main/groovy/frege/gradle/FregeBasePlugin.groovy b/src/main/groovy/frege/gradle/FregeBasePlugin.groovy
new file mode 100644
index 0000000..5af7a86
--- /dev/null
+++ b/src/main/groovy/frege/gradle/FregeBasePlugin.groovy
@@ -0,0 +1,17 @@
+package frege.gradle
+
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.plugins.JavaBasePlugin
+
+class FregeBasePlugin implements Plugin<Project> {
+ static String EXTENSION_NAME = "frege"
+
+ @Override
+ void apply(Project project) {
+ // Workaround to build proper jars on Windows, see https://github.com/Frege/frege-gradle-plugin/issues/9
+ System.setProperty("file.encoding", "UTF-8")
+ project.getPluginManager().apply(JavaBasePlugin.class);
+ project.extensions.create(EXTENSION_NAME, FregePluginExtension)
+ }
+}
diff --git a/src/main/groovy/frege/gradle/FregePlugin.groovy b/src/main/groovy/frege/gradle/FregePlugin.groovy
index 29be393..e8ee2d5 100644
--- a/src/main/groovy/frege/gradle/FregePlugin.groovy
+++ b/src/main/groovy/frege/gradle/FregePlugin.groovy
@@ -1,20 +1,13 @@
package frege.gradle
-
-import groovy.transform.TypeChecked
+import fj.data.Option
import org.gradle.api.Plugin
import org.gradle.api.Project
-import fj.data.Option
-import org.gradle.api.plugins.JavaPlugin
-
//@TypeChecked
class FregePlugin implements Plugin<Project> {
void apply(Project project) {
- // Workaround to build proper jars on Windows, see https://github.com/Frege/frege-gradle-plugin/issues/9
- System.setProperty("file.encoding", "UTF-8")
- project.plugins.apply(JavaPlugin)
- def e = (FregePluginExtension) project.extensions.create("frege", FregePluginExtension)
+ project.plugins.apply(FregeBasePlugin)
project.task('compileFrege', type: CompileTask, group: 'Build', dependsOn: "compileJava") {
module = CompileTask.deduceSourceDir(project).absolutePath
diff --git a/src/main/resources/META-INF/gradle-plugins/org.frege-lang.base.properties b/src/main/resources/META-INF/gradle-plugins/org.frege-lang.base.properties
new file mode 100644
index 0000000..6ab972a
--- /dev/null
+++ b/src/main/resources/META-INF/gradle-plugins/org.frege-lang.base.properties
@@ -0,0 +1 @@
+implementation-class=frege.gradle.FregeBasePlugin
diff --git a/src/test/groovy/frege/gradle/FregeBasePluginTest.groovy b/src/test/groovy/frege/gradle/FregeBasePluginTest.groovy
new file mode 100644
index 0000000..ebdb7d3
--- /dev/null
+++ b/src/test/groovy/frege/gradle/FregeBasePluginTest.groovy
@@ -0,0 +1,29 @@
+package frege.gradle
+import org.gradle.api.Project
+import org.gradle.testfixtures.ProjectBuilder
+import spock.lang.Specification
+
+public class FregeBasePluginTest extends Specification {
+
+ Project project = ProjectBuilder.builder().build()
+
+ def setup(){
+ when:
+ project.plugins.apply(FregeBasePlugin)
+ }
+
+ def "adds frege extension"(){
+ expect:
+ project.getExtensions().getByName(FregeBasePlugin.EXTENSION_NAME) != null
+ }
+
+ def "applies java base plugin"(){
+ expect:
+ project.pluginManager.hasPlugin("java-base")
+ }
+
+ def "can be identified by id"(){
+ expect:
+ project.pluginManager.hasPlugin("org.frege-lang.base")
+ }
+} \ No newline at end of file
diff --git a/src/test/groovy/frege/gradle/FregePluginTest.groovy b/src/test/groovy/frege/gradle/FregePluginTest.groovy
new file mode 100644
index 0000000..61001de
--- /dev/null
+++ b/src/test/groovy/frege/gradle/FregePluginTest.groovy
@@ -0,0 +1,30 @@
+package frege.gradle
+
+import org.gradle.api.Project
+import org.gradle.testfixtures.ProjectBuilder
+import spock.lang.Specification
+
+class FregePluginTest extends Specification {
+
+ Project project = ProjectBuilder.builder().build()
+
+ def setup(){
+ when:
+ project.plugins.apply(FregePlugin)
+ }
+
+ def "adds frege extension"(){
+ expect:
+ project.getExtensions().getByName(FregeBasePlugin.EXTENSION_NAME) != null
+ }
+
+ def "applies frege base plugin"() {
+ expect:
+ project.pluginManager.findPlugin("org.frege-lang.base") != null
+ }
+
+ def "can be identified by id"(){
+ expect:
+ project.pluginManager.hasPlugin("org.frege-lang")
+ }
+}