diff options
author | Thibault Gagnaux <thibault.gagnaux@bit.admin.ch> | 2021-06-29 09:02:17 +0200 |
---|---|---|
committer | Thibault Gagnaux <thibault.gagnaux@bit.admin.ch> | 2021-06-29 09:02:17 +0200 |
commit | e7fc5336c818e6ce9f81069df73c258d116acc9f (patch) | |
tree | 13d784f07f80d766954760e3a5c9a0b37d83fcb3 | |
parent | f3d085304bad105e65ce0c77f25ae59161fd8776 (diff) | |
download | frege-gradle-plugin-e7fc5336c818e6ce9f81069df73c258d116acc9f.tar.gz frege-gradle-plugin-e7fc5336c818e6ce9f81069df73c258d116acc9f.tar.bz2 frege-gradle-plugin-e7fc5336c818e6ce9f81069df73c258d116acc9f.zip |
Switches from groovy's spock testing framework back to java
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | build.gradle | 12 | ||||
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java | 54 | ||||
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java | 20 | ||||
-rw-r--r-- | src/test/groovy/ch.fhnw.thga.fregeplugin/FregePluginFunctionalTest.groovy | 18 | ||||
-rw-r--r-- | src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java | 54 |
6 files changed, 141 insertions, 22 deletions
@@ -2,5 +2,6 @@ .vscode build .project - - +.classpath +.settings +bin
\ No newline at end of file diff --git a/build.gradle b/build.gradle index 728043c..69dd68c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,4 @@ plugins { - id 'groovy' id 'java-gradle-plugin' } @@ -8,9 +7,18 @@ repositories { } dependencies { - testImplementation group: 'org.spockframework', name: 'spock-core', version: '2.0-groovy-3.0' testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.2") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.2") + +} + +gradlePlugin { + plugins { + fregePlugin { + id = 'ch.fhnw.thga.frege' + implementationClass = 'ch.fhnw.thga.gradleplugins.FregePlugin' + } + } } tasks.withType(Test).configureEach { diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java new file mode 100644 index 0000000..e96bfb1 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeInitTask.java @@ -0,0 +1,54 @@ +package ch.fhnw.thga.gradleplugins; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; + +import org.apache.log4j.Logger; +import org.gradle.api.DefaultTask; +import org.gradle.api.file.ProjectLayout; +import org.gradle.api.file.RegularFile; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.OutputFile; +import org.gradle.api.tasks.TaskAction; + +public abstract class FregeInitTask extends DefaultTask { + private final static Logger LOGGER = Logger.getLogger(FregeInitTask.class.getName()); + private static final String DEFAULT_FREGE_VERSION = "3.25.84"; + private static final String DEFAULT_FREGE_RELEASE = "3.25alpha"; + + @Input + public abstract Property<String> getFregeVersion(); + + @Input + public abstract Property<String> getFregeRelease(); + + @OutputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + public FregeInitTask() { + getFregeVersion().convention(DEFAULT_FREGE_VERSION); + getFregeRelease().convention(DEFAULT_FREGE_RELEASE); + getFregeCompilerJar().convention(getProject().getLayout().getBuildDirectory().file("lib/frege" + getFregeVersion() + ".jar")); + } + + @TaskAction + public void downloadFregeCompiler() { + try { + ReadableByteChannel readChannel = Channels.newChannel( + new URL("https://github.com/Frege/frege/releases/download/" + + getFregeRelease().get() + "/frege" + getFregeVersion() + ".jar").openStream()); + FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerJar().get().getAsFile().getAbsolutePath()); + FileChannel writeChannel = fregeCompilerDestinationPath.getChannel(); + writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e.getCause()); + } + } +} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java new file mode 100644 index 0000000..678a10c --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -0,0 +1,20 @@ +package ch.fhnw.thga.gradleplugins; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; + +public class FregePlugin implements Plugin<Project> { + + @Override + public void apply(Project project) { + project.getTasks().create("fregeInit", FregeInitTask.class); + Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> { + c.setVisible(false); + c.setCanBeConsumed(false); + c.setCanBeResolved(true); + c.setDescription("The frege compiler"); + c.defaultDependencies(d -> d.add(project.getDependencies().create("frege3.25.84.jar"))); + }); + } +} diff --git a/src/test/groovy/ch.fhnw.thga.fregeplugin/FregePluginFunctionalTest.groovy b/src/test/groovy/ch.fhnw.thga.fregeplugin/FregePluginFunctionalTest.groovy deleted file mode 100644 index 889f6f0..0000000 --- a/src/test/groovy/ch.fhnw.thga.fregeplugin/FregePluginFunctionalTest.groovy +++ /dev/null @@ -1,18 +0,0 @@ -package ch.fhnw.thga.fregeplugin - -import org.junit.jupiter.api.io.TempDir; -import spock.lang.Specification - -class FregePluginFunctionalTests extends Specification { - @TempDir File testProjectDir - File buildFile - - def setup() { - buildFile = newFile(testProjectDir, 'build.gradle') - buildFile << """ - plugins { - id 'ch.fhnw.thga.frege' - } - """ - } -}
\ No newline at end of file diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java new file mode 100644 index 0000000..b93ba65 --- /dev/null +++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java @@ -0,0 +1,54 @@ +package ch.fhnw.thga.gradleplugins; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.gradle.testkit.runner.TaskOutcome.SUCCESS; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.gradle.api.Project; +import org.gradle.testfixtures.ProjectBuilder; +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.GradleRunner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +public class FregePluginFunctionalTest { + @TempDir File testProjectDir; + private File buildFile; + + private void writeFile(File destination, String content) throws IOException { + BufferedWriter output = null; + try { + output = new BufferedWriter(new FileWriter(destination)); + output.write(content); + } finally { + if (output != null) { + output.close(); + } + } + } + + @BeforeEach + void setup() throws Exception { + buildFile = new File(testProjectDir, "build.gradle"); + String buildFileContent = "plugins {" + + "id 'ch.fhnw.thga.frege'" + + "}"; + writeFile(buildFile, buildFileContent); + } + + @Test + void given_frege_plugin_when_applying_then_latest_frege_compiler_is_downloaded_and_added_as_a_depenency() { + //Project project = ProjectBuilder.builder().withProjectDir(testProjectDir).build(); + //assertEquals(1, project.getConfigurations().getByName("fregeCompiler").getAllDependencies().size()); + BuildResult result = GradleRunner.create() + .withProjectDir(testProjectDir) + .build(); + assertEquals(SUCCESS, result.task("initFrege").getOutcome()); + } +}
\ No newline at end of file |