From cd5d39b867ad5435039d1a47244252078600ca0b Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Wed, 7 Jul 2021 17:21:33 +0200 Subject: Refactors tests - Uses the builder pattern to simplify the creation of `build.gradle` test files. - Adds `gradlew clean test` github workflow --- .../fhnw/thga/gradleplugins/CompileFregeTask.java | 42 ++++++++++++++ .../fhnw/thga/gradleplugins/FregeCompileTask.java | 42 -------------- .../ch/fhnw/thga/gradleplugins/FregeExtension.java | 27 ++++----- .../ch/fhnw/thga/gradleplugins/FregePlugin.java | 29 ++++------ .../thga/gradleplugins/SetupFregeCompilerTask.java | 65 --------------------- .../ch/fhnw/thga/gradleplugins/SetupFregeTask.java | 66 ++++++++++++++++++++++ 6 files changed, 129 insertions(+), 142 deletions(-) create mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java delete mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java delete mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java create mode 100644 src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java (limited to 'src/main') diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java new file mode 100644 index 0000000..551f6c5 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java @@ -0,0 +1,42 @@ +package ch.fhnw.thga.gradleplugins; + +import java.util.List; + +import javax.inject.Inject; + +import org.gradle.api.DefaultTask; +import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.tasks.InputDirectory; +import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.OutputDirectory; +import org.gradle.api.tasks.TaskAction; + +public abstract class CompileFregeTask extends DefaultTask { + private final JavaExec javaExec; + + @InputFile + public abstract RegularFileProperty getFregeCompilerJar(); + + @InputDirectory + public abstract DirectoryProperty getFregeMainSourceDir(); + + @OutputDirectory + public abstract DirectoryProperty getFregeOutputDir(); + + @Inject + public CompileFregeTask(ObjectFactory objectFactory) { + javaExec = objectFactory.newInstance(JavaExec.class); + + } + + @TaskAction + public void compileFrege() { + String fregeMainSourceDir = getFregeMainSourceDir().getAsFile().get().getAbsolutePath(); + List args = List.of("-v", "-d", getFregeOutputDir().get().getAsFile().getAbsolutePath(), "-sp", + fregeMainSourceDir, fregeMainSourceDir); + javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(args).exec(); + } +} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java deleted file mode 100644 index 0f19f08..0000000 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java +++ /dev/null @@ -1,42 +0,0 @@ -package ch.fhnw.thga.gradleplugins; - -import java.util.List; - -import javax.inject.Inject; - -import org.gradle.api.DefaultTask; -import org.gradle.api.file.DirectoryProperty; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.model.ObjectFactory; -import org.gradle.api.tasks.InputDirectory; -import org.gradle.api.tasks.InputFile; -import org.gradle.api.tasks.JavaExec; -import org.gradle.api.tasks.OutputDirectory; -import org.gradle.api.tasks.TaskAction; - -public abstract class FregeCompileTask extends DefaultTask { - private final JavaExec javaExec; - - @InputFile - public abstract RegularFileProperty getFregeCompilerJar(); - - @InputDirectory - public abstract DirectoryProperty getFregeMainSourceDir(); - - @OutputDirectory - public abstract DirectoryProperty getFregeOutputDir(); - - @Inject - public FregeCompileTask(ObjectFactory objectFactory) { - javaExec = objectFactory.newInstance(JavaExec.class); - - } - - - @TaskAction - public void compileFrege() { - String fregeMainSourceDir = getFregeMainSourceDir().getAsFile().get().getAbsolutePath(); - List args = List.of("-v", "-d", getFregeOutputDir().get().getAsFile().getAbsolutePath(), "-sp", fregeMainSourceDir, fregeMainSourceDir); - javaExec.setClasspath(getProject().files(getFregeCompilerJar())).setArgs(args).exec(); - } -} diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java index 2763ebc..fd4f1b4 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -1,36 +1,29 @@ package ch.fhnw.thga.gradleplugins; -import java.io.File; - import javax.inject.Inject; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.ProjectLayout; import org.gradle.api.provider.Property; - 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_OUTPUT_DIRECTORY_KEY = "fregeCompilerOutputDirectory"; + public static final String DEFAULT_DOWNLOAD_DIRECTORY = "lib"; + + public abstract Property getVersion(); - public abstract Property getFregeVersion(); + public abstract Property getRelease(); - public abstract Property getFregeRelease(); + public abstract DirectoryProperty getCompilerDownloadDir(); - public abstract DirectoryProperty getFregeCompilerOutputDirectory(); + public abstract DirectoryProperty getMainSourceDir(); - public abstract DirectoryProperty getFregeMainSourceDir(); - - public abstract DirectoryProperty getFregeOutputDir(); + public abstract DirectoryProperty getOutputDir(); @Inject public FregeExtension(ProjectLayout projectLayout) { - getFregeCompilerOutputDirectory().convention(projectLayout.getProjectDirectory().dir("lib")); - // TODO: change to projectDir/src/main/frege - getFregeMainSourceDir().convention(projectLayout.getProjectDirectory()); - getFregeOutputDir().convention(projectLayout.getBuildDirectory().dir("classes/main/frege")); + getCompilerDownloadDir().convention(projectLayout.getProjectDirectory().dir(DEFAULT_DOWNLOAD_DIRECTORY)); + getMainSourceDir().convention(projectLayout.getProjectDirectory()); + getOutputDir().convention(projectLayout.getBuildDirectory().dir("classes/main/frege")); } } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 429edbb..4f0bb34 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -5,33 +5,26 @@ import org.gradle.api.Project; import org.gradle.api.tasks.TaskProvider; public class FregePlugin implements Plugin { - public static final String SETUP_FREGE_COMPILER_TASK_NAME = "setupFregeCompiler"; - public static final String FREGE_COMPILE_TASK_NAME = "fregeCompile"; + public static final String SETUP_FREGE_TASK_NAME = "setupFrege"; + public static final String COMPILE_FREGE_TASK_NAME = "compileFrege"; public static final String FREGE_PLUGIN_ID = "ch.fhnw.thga.frege"; public static final String FREGE_EXTENSION_NAME = "frege"; @Override public void apply(Project project) { FregeExtension extension = project.getExtensions().create(FREGE_EXTENSION_NAME, FregeExtension.class); - TaskProvider setupFregeCompilerTask = - project.getTasks().register(SETUP_FREGE_COMPILER_TASK_NAME, SetupFregeCompilerTask.class, task -> { - task.getFregeVersion().set(extension.getFregeVersion()); - task.getFregeRelease().set(extension.getFregeRelease()); - task.getFregeCompilerOutputDirectory().set(extension.getFregeCompilerOutputDirectory()); - }); + TaskProvider setupFregeCompilerTask = project.getTasks().register(SETUP_FREGE_TASK_NAME, + SetupFregeTask.class, task -> { + task.getVersion().set(extension.getVersion()); + task.getRelease().set(extension.getRelease()); + task.getDownloadDir().set(extension.getCompilerDownloadDir()); + }); - project.getTasks().register(FREGE_COMPILE_TASK_NAME, FregeCompileTask.class, task -> { + project.getTasks().register(COMPILE_FREGE_TASK_NAME, CompileFregeTask.class, task -> { task.dependsOn(setupFregeCompilerTask); task.getFregeCompilerJar().set(setupFregeCompilerTask.get().getFregeCompilerOutputPath()); - task.getFregeMainSourceDir().set(extension.getFregeMainSourceDir()); - task.getFregeOutputDir().set(extension.getFregeOutputDir()); + task.getFregeMainSourceDir().set(extension.getMainSourceDir()); + task.getFregeOutputDir().set(extension.getOutputDir()); }); - //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/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java deleted file mode 100644 index b3d08a1..0000000 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java +++ /dev/null @@ -1,65 +0,0 @@ -package ch.fhnw.thga.gradleplugins; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; - -import org.gradle.api.DefaultTask; -import org.gradle.api.GradleException; -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 getFregeVersion(); - - @Input - public abstract Property getFregeRelease(); - - @Internal - public abstract DirectoryProperty getFregeCompilerOutputDirectory(); - - @Internal - public Provider getFregeVersionJarName() { - return getFregeVersion().map(version -> "frege" + version + ".jar"); - } - - @Internal - public Provider getDownloadUrl() { - return getFregeVersionJarName() - .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getFregeRelease().get(), name)); - } - - @OutputFile - public Provider getFregeCompilerOutputPath() { - return getFregeCompilerOutputDirectory().file(getFregeVersionJarName()); - } - - @TaskAction - public void downloadFregeCompiler() { - 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/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java new file mode 100644 index 0000000..7f92053 --- /dev/null +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java @@ -0,0 +1,66 @@ +package ch.fhnw.thga.gradleplugins; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; + +import org.gradle.api.DefaultTask; +import org.gradle.api.GradleException; +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 SetupFregeTask extends DefaultTask { + public static final Logger LOGGER = Logging.getLogger(SetupFregeTask.class); + + private static final String FREGE_GITHUB_URL_PREFIX = "https://github.com/Frege/frege/releases/download"; + + @Input + public abstract Property getVersion(); + + @Input + public abstract Property getRelease(); + + @Internal + public abstract DirectoryProperty getDownloadDir(); + + @Internal + public Provider getFregeVersionJarName() { + return getVersion().map(version -> "frege" + version + ".jar"); + } + + @Internal + public Provider getDownloadUrl() { + return getFregeVersionJarName() + .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getRelease().get(), name)); + } + + @OutputFile + public Provider getFregeCompilerOutputPath() { + return getDownloadDir().file(getFregeVersionJarName()); + } + + @TaskAction + public void downloadFregeCompiler() { + 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()); + } + } +} -- cgit