diff options
Diffstat (limited to 'src')
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") + } +} |