diff options
author | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-07-01 19:09:02 +0200 |
---|---|---|
committer | Thibault Gagnaux <tgagnaux@gmail.com> | 2021-07-01 19:09:02 +0200 |
commit | 5ad88075e8e67ece6673999ffd06260c2b5d298d (patch) | |
tree | a332a0515cf1fe80e8c2b38f785f3bd0aad45461 | |
parent | b87c1babf4a1d0b9cdf417b8aaf8da8edc473766 (diff) | |
download | frege-gradle-plugin-5ad88075e8e67ece6673999ffd06260c2b5d298d.tar.gz frege-gradle-plugin-5ad88075e8e67ece6673999ffd06260c2b5d298d.tar.bz2 frege-gradle-plugin-5ad88075e8e67ece6673999ffd06260c2b5d298d.zip |
Refactors `SetupFregeCompilerTask` tests
4 files changed, 53 insertions, 36 deletions
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java index 5e8834d..8a6d175 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -2,32 +2,25 @@ package ch.fhnw.thga.gradleplugins; import javax.inject.Inject; +import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.ProjectLayout; -import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; -import groovy.transform.Internal; public abstract class FregeExtension { public static final String DEFAULT_FREGE_EXTENSION_NAMESPACE = "frege"; public static final String FREGE_VERSION_BUILD_FILE_KEY = "fregeVersion"; public static final String FREGE_RELEASE_BUILD_FILE_KEY = "fregeRelease"; - public static final String FREGE_COMPILER_BUILD_FILE_KEY = "fregeCompilerPath"; + public static final String FREGE_COMPILER_OUTPUT_DIRECTORY_KEY = "fregeCompilerOutputDirectory"; public abstract Property<String> getFregeVersion(); public abstract Property<String> getFregeRelease(); - public abstract RegularFileProperty getFregeCompilerPath(); - - @Internal - public Provider<String> getDefaultJarName() { - return getFregeVersion().map(version -> version + ".jar"); - } + public abstract DirectoryProperty getFregeCompilerOutputDirectory(); @Inject public FregeExtension(ProjectLayout projectLayout) { - getFregeCompilerPath().set(projectLayout.getProjectDirectory().file("lib/frege" + getDefaultJarName())); + getFregeCompilerOutputDirectory().convention(projectLayout.getProjectDirectory().dir("lib")); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index ffa788f..709552c 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -2,8 +2,6 @@ package ch.fhnw.thga.gradleplugins; import org.gradle.api.Plugin; import org.gradle.api.Project; -import org.gradle.api.file.RegularFile; -import org.gradle.api.provider.Property; public class FregePlugin implements Plugin<Project> { public static final String SETUP_FREGE_COMPILER_TASK_NAME = "setupFregeCompiler"; @@ -16,7 +14,7 @@ public class FregePlugin implements Plugin<Project> { project.getTasks().register(SETUP_FREGE_COMPILER_TASK_NAME, SetupFregeCompilerTask.class, task -> { task.getFregeVersion().set(extension.getFregeVersion()); task.getFregeRelease().set(extension.getFregeRelease()); - task.getFregeCompilerPath().set(extension.getFregeCompilerPath()); + task.getFregeCompilerOutputDirectory().set(extension.getFregeCompilerOutputDirectory()); }); //Configuration fregeCompiler = project.getConfigurations().create("fregeCompiler", c -> { // c.setVisible(false); diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java index a7f48ba..b3d08a1 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java @@ -9,13 +9,21 @@ import java.nio.channels.ReadableByteChannel; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; -import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFile; +import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; import org.gradle.api.tasks.Input; +import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; public abstract class SetupFregeCompilerTask extends DefaultTask { + public static final Logger LOGGER = Logging.getLogger(SetupFregeCompilerTask.class); + + private static final String FREGE_GITHUB_URL_PREFIX = "https://github.com/Frege/frege/releases/download"; @Input public abstract Property<String> getFregeVersion(); @@ -23,21 +31,35 @@ public abstract class SetupFregeCompilerTask extends DefaultTask { @Input public abstract Property<String> getFregeRelease(); + @Internal + public abstract DirectoryProperty getFregeCompilerOutputDirectory(); + + @Internal + public Provider<String> getFregeVersionJarName() { + return getFregeVersion().map(version -> "frege" + version + ".jar"); + } + + @Internal + public Provider<String> getDownloadUrl() { + return getFregeVersionJarName() + .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getFregeRelease().get(), name)); + } + @OutputFile - public abstract RegularFileProperty getFregeCompilerPath(); + public Provider<RegularFile> getFregeCompilerOutputPath() { + return getFregeCompilerOutputDirectory().file(getFregeVersionJarName()); + } @TaskAction public void downloadFregeCompiler() { - try { - ReadableByteChannel readChannel = Channels.newChannel( - new URL("https://github.com/Frege/frege/releases/download/" + - getFregeRelease().get() + "/frege" + getFregeVersion().get() + ".jar").openStream()); - FileOutputStream fregeCompilerDestinationPath = new FileOutputStream(getFregeCompilerPath().get().getAsFile().getAbsolutePath()); - FileChannel writeChannel = fregeCompilerDestinationPath.getChannel(); - writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); - System.out.println("Successfully downloaded compiler to" + getFregeCompilerPath().get()); - } catch (IOException e) { - throw new GradleException(e.getMessage()); - } + String fregeCompilerOutputPath = getFregeCompilerOutputPath().get().getAsFile().getAbsolutePath(); + try (ReadableByteChannel readChannel = Channels.newChannel(new URL(getDownloadUrl().get()).openStream()); + FileOutputStream fregeCompilerOutputStream = new FileOutputStream(fregeCompilerOutputPath);) { + FileChannel writeChannel = fregeCompilerOutputStream.getChannel(); + writeChannel.transferFrom(readChannel, 0, Long.MAX_VALUE); + LOGGER.lifecycle(String.format("Successfully downloaded %s to: %s", getFregeVersionJarName().get(), fregeCompilerOutputPath)); + } catch (IOException e) { + throw new GradleException(e.getMessage()); + } } } diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java index 672b065..4f22bc2 100644 --- a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java +++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java @@ -1,6 +1,6 @@ package ch.fhnw.thga.gradleplugins; -import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_COMPILER_BUILD_FILE_KEY; +import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_COMPILER_OUTPUT_DIRECTORY_KEY; import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_RELEASE_BUILD_FILE_KEY; import static ch.fhnw.thga.gradleplugins.FregeExtension.FREGE_VERSION_BUILD_FILE_KEY; import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_EXTENSION_NAME; @@ -58,7 +58,7 @@ public class FregePluginFunctionalTest { private static String buildFileFregeExtension(String fregeVersion, String fregeRelease, Optional<String> compilerPath) { - String optionalCompilerPathLine = compilerPath.isPresent() ? String.format(" %s = %s\n", FREGE_COMPILER_BUILD_FILE_KEY, compilerPath.get()) : ""; + String optionalCompilerPathLine = compilerPath.isPresent() ? String.format(" %s = %s\n", FREGE_COMPILER_OUTPUT_DIRECTORY_KEY, compilerPath.get()) : ""; return String.format("%s {\n %s = %s\n %s = %s\n%s}\n", FREGE_EXTENSION_NAME, FREGE_VERSION_BUILD_FILE_KEY, fregeVersion, FREGE_RELEASE_BUILD_FILE_KEY, fregeRelease, optionalCompilerPathLine); } @@ -74,6 +74,7 @@ public class FregePluginFunctionalTest { assertTrue(project.getTasks().getByName(SETUP_FREGE_COMPILER_TASK_NAME) instanceof SetupFregeCompilerTask); BuildResult result = GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath() .withArguments(SETUP_FREGE_COMPILER_TASK_NAME).build(); + System.out.println(result.getOutput()); assertEquals(SUCCESS, result.task(":" + SETUP_FREGE_COMPILER_TASK_NAME).getOutcome()); } @@ -130,7 +131,7 @@ public class FregePluginFunctionalTest { String expectedFregeConfig = FREGE_EXTENSION_NAME + " {\n" + " fregeVersion = " + fregeVersion + "\n" + " fregeRelease = " + fregeRelease + "\n" - + " fregeCompilerPath = " + fregeCompilerPath + "\n" + "}\n"; + + " fregeCompilerOutputDirectory = " + fregeCompilerPath + "\n" + "}\n"; assertEquals(expectedFregeConfig, buildFileFregeExtension(fregeVersion, fregeRelease, Optional.of(fregeCompilerPath))); } @@ -139,12 +140,15 @@ public class FregePluginFunctionalTest { throws Exception { String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.empty()); assertSetupFregeCompilerTask(fregeConfig); - } + assertTrue(new File(testProjectDir.getAbsolutePath() + "/lib/frege3.25.84.jar").exists()); - @Test - void given_frege_compiler_version_3_25_84_when_running_the_setup_frege_compiler_task_then_the_frege_compiler_is_correctly_setup() - throws Exception { - String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.of("layout.projectDirectory.file('lib/frege3.25.84')")); - assertSetupFregeCompilerTask(fregeConfig); } + + @Test + void given_frege_compiler_version_3_25_84_when_running_the_setup_frege_compiler_task_then_the_frege_compiler_is_correctly_setup() + throws Exception { + String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.of("layout.buildDirectory.dir('dist')")); + assertSetupFregeCompilerTask(fregeConfig); + assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/dist/frege3.25.84.jar").exists()); + } }
\ No newline at end of file |