aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/main.yml28
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java (renamed from src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java)8
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java27
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java29
-rw-r--r--src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java (renamed from src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java)19
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/Builder.java15
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java85
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java48
-rw-r--r--src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java150
10 files changed, 279 insertions, 132 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..0c68f2b
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,28 @@
+name: Test
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+ workflow_dispatch:
+
+jobs:
+ ci:
+ name: ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [macos-10.15, ubuntu-20.04, windows-2019]
+
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v2.3.4
+
+ - name: Run Tests
+ run: |
+ if [ "$RUNNER_OS" = "Windows" ]; then
+ gradlew.bat clean test
+ else
+ ./gradlew clean test
+ fi \ No newline at end of file
diff --git a/build.gradle b/build.gradle
index a0a97cf..d889b1f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,4 +25,4 @@ gradlePlugin {
tasks.withType(Test).configureEach {
useJUnitPlatform()
-} \ No newline at end of file
+}
diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
index 0f19f08..551f6c5 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeCompileTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/CompileFregeTask.java
@@ -14,7 +14,7 @@ import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
-public abstract class FregeCompileTask extends DefaultTask {
+public abstract class CompileFregeTask extends DefaultTask {
private final JavaExec javaExec;
@InputFile
@@ -27,16 +27,16 @@ public abstract class FregeCompileTask extends DefaultTask {
public abstract DirectoryProperty getFregeOutputDir();
@Inject
- public FregeCompileTask(ObjectFactory objectFactory) {
+ public CompileFregeTask(ObjectFactory objectFactory) {
javaExec = objectFactory.newInstance(JavaExec.class);
}
-
@TaskAction
public void compileFrege() {
String fregeMainSourceDir = getFregeMainSourceDir().getAsFile().get().getAbsolutePath();
- List<String> args = List.of("-v", "-d", getFregeOutputDir().get().getAsFile().getAbsolutePath(), "-sp", fregeMainSourceDir, fregeMainSourceDir);
+ List<String> 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<String> getVersion();
- public abstract Property<String> getFregeVersion();
+ public abstract Property<String> getRelease();
- public abstract Property<String> 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<Project> {
- 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> 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<SetupFregeTask> 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/SetupFregeTask.java
index b3d08a1..7f92053 100644
--- a/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeCompilerTask.java
+++ b/src/main/java/ch/fhnw/thga/gradleplugins/SetupFregeTask.java
@@ -20,34 +20,34 @@ 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);
+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<String> getFregeVersion();
+ public abstract Property<String> getVersion();
@Input
- public abstract Property<String> getFregeRelease();
+ public abstract Property<String> getRelease();
@Internal
- public abstract DirectoryProperty getFregeCompilerOutputDirectory();
+ public abstract DirectoryProperty getDownloadDir();
@Internal
public Provider<String> getFregeVersionJarName() {
- return getFregeVersion().map(version -> "frege" + version + ".jar");
+ return getVersion().map(version -> "frege" + version + ".jar");
}
@Internal
public Provider<String> getDownloadUrl() {
return getFregeVersionJarName()
- .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getFregeRelease().get(), name));
+ .map(name -> String.join("/", FREGE_GITHUB_URL_PREFIX, getRelease().get(), name));
}
@OutputFile
public Provider<RegularFile> getFregeCompilerOutputPath() {
- return getFregeCompilerOutputDirectory().file(getFregeVersionJarName());
+ return getDownloadDir().file(getFregeVersionJarName());
}
@TaskAction
@@ -57,7 +57,8 @@ public abstract class SetupFregeCompilerTask extends DefaultTask {
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));
+ 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/Builder.java b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
new file mode 100644
index 0000000..cebaaf3
--- /dev/null
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java
@@ -0,0 +1,15 @@
+package ch.fhnw.thga.gradleplugins;
+
+public interface Builder {
+ Builder version(String version);
+
+ Builder release(String release);
+
+ Builder compilerDownloadDir(String downloadDir);
+
+ Builder mainSourceDir(String mainSourceDir);
+
+ Builder outputDir(String outputDir);
+
+ FregeDTO build();
+}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
new file mode 100644
index 0000000..63d7dae
--- /dev/null
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java
@@ -0,0 +1,85 @@
+package ch.fhnw.thga.gradleplugins;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class FregeDTO {
+ public final String version;
+ public final String release;
+ public final String compilerDownloadDir;
+ public final String mainSourceDir;
+ public final String outputDir;
+
+ public FregeDTO(String version, String release, String compilerDownloadDir, String mainSourceDir,
+ String outputDir) {
+ this.version = version;
+ this.release = release;
+ this.compilerDownloadDir = compilerDownloadDir;
+ this.mainSourceDir = mainSourceDir;
+ this.outputDir = outputDir;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public String getRelease() {
+ return release;
+ }
+
+ public String getCompilerDownloadDir() {
+ return compilerDownloadDir;
+ }
+
+ public String getMainSourceDir() {
+ return mainSourceDir;
+ }
+
+ public String getOutputDir() {
+ return outputDir;
+ }
+
+ private String getFieldValue(Field field) {
+ try {
+ return field.get(this).toString();
+ } catch (IllegalAccessException | IllegalArgumentException e) {
+ throw new RuntimeException(e.getMessage(), e.getCause());
+ }
+ }
+
+ private Field getField(String fieldName) {
+ try {
+ return FregeDTO.class.getField(fieldName);
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(
+ String.format("Field %s not found in class %s", e.getMessage(), FregeDTO.class.getName()),
+ e.getCause());
+ }
+ }
+
+ private boolean isEmpty(Field field) {
+ return getFieldValue(field).isEmpty();
+ }
+
+ private String toKeyValuePairs(Field field) {
+ return String.format("%s = %s", field.getName(), getFieldValue(field));
+ }
+
+ private boolean isGetterProperty(Method method) {
+ return method.getName().startsWith("get") && method.getReturnType().getName().contains("Property");
+ }
+
+ private String stripGetPrefixAndDecapitalize(String s) {
+ return Character.toLowerCase(s.charAt(3)) + s.substring(4);
+ }
+
+ public String toBuildFile() {
+ Stream<Method> methods = Arrays.stream(FregeExtension.class.getMethods());
+ Stream<Field> fields = methods.filter(m -> isGetterProperty(m))
+ .map(m -> stripGetPrefixAndDecapitalize(m.getName())).map(name -> getField(name));
+ return fields.filter(f -> !isEmpty(f)).map(f -> toKeyValuePairs(f)).collect(Collectors.joining("\n "));
+ }
+}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
new file mode 100644
index 0000000..afdc862
--- /dev/null
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java
@@ -0,0 +1,48 @@
+package ch.fhnw.thga.gradleplugins;
+
+public class FregeDTOBuilder implements Builder {
+ private String version = "";
+ private String release = "";
+ private String compilerDownloadDir = "";
+ private String mainSourceDir = "";
+ private String outputDir = "";
+
+ @Override
+ public Builder version(String version) {
+ this.version = version;
+ return this;
+
+ }
+
+ @Override
+ public Builder release(String release) {
+ this.release = release;
+ return this;
+
+ }
+
+ @Override
+ public Builder compilerDownloadDir(String downloadDir) {
+ this.compilerDownloadDir = downloadDir;
+ return this;
+
+ }
+
+ @Override
+ public Builder mainSourceDir(String mainSourceDir) {
+ this.mainSourceDir = mainSourceDir;
+ return this;
+
+ }
+
+ @Override
+ public Builder outputDir(String outputDir) {
+ this.outputDir = outputDir;
+ return this;
+ }
+
+ public FregeDTO build() {
+ return new FregeDTO(version, release, compilerDownloadDir, mainSourceDir, outputDir);
+ }
+
+}
diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
index 31f8d21..81ba9ad 100644
--- a/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
+++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java
@@ -1,12 +1,10 @@
package ch.fhnw.thga.gradleplugins;
-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.FregeExtension.DEFAULT_DOWNLOAD_DIRECTORY;
+import static ch.fhnw.thga.gradleplugins.FregePlugin.COMPILE_FREGE_TASK_NAME;
import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_EXTENSION_NAME;
import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_PLUGIN_ID;
-import static ch.fhnw.thga.gradleplugins.FregePlugin.SETUP_FREGE_COMPILER_TASK_NAME;
-import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_COMPILE_TASK_NAME;
+import static ch.fhnw.thga.gradleplugins.FregePlugin.SETUP_FREGE_TASK_NAME;
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -15,7 +13,8 @@ import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
-import java.util.Optional;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -28,7 +27,11 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
public class FregePluginFunctionalTest {
- @TempDir File testProjectDir;
+
+ private final FregeDTOBuilder fregeBuilder = new FregeDTOBuilder();
+
+ @TempDir
+ File testProjectDir;
private File buildFile;
private File settingsFile;
private Project project;
@@ -50,51 +53,61 @@ public class FregePluginFunctionalTest {
}
private void appendToFile(File destination, String content) throws IOException {
- writeFile(destination, content, true);
+ writeFile(destination, "\n" + content, true);
}
private static String buildFilePluginString(String pluginId) {
return String.format("id '%s'", pluginId);
}
- private static String buildFileFregeExtension(String fregeVersion, String fregeRelease,
- Optional<String> compilerPath) {
- 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);
- }
-
- private static String writeBuildFilePlugins(Stream<String> pluginIds) {
+ private static String createPluginsSection(Stream<String> pluginIds) {
String plugins = pluginIds.map(pluginId -> buildFilePluginString(pluginId)).collect(Collectors.joining("\n "));
return String.format("plugins {\n %s\n}\n", plugins);
}
- private void assertSetupFregeCompilerTask(String fregeConfig) throws Exception {
- System.out.println(fregeConfig);
- appendToFile(buildFile, fregeConfig);
- assertTrue(project.getTasks().getByName(SETUP_FREGE_COMPILER_TASK_NAME) instanceof SetupFregeCompilerTask);
+ private static String createFregeSection(FregeDTO fregeDTO) {
+ return String.format("%s {\n %s\n}", FREGE_EXTENSION_NAME, fregeDTO.toBuildFile());
+ }
+
+ private void assertGradleTaskOutcome(String buildFileTaskConfig, String taskName) throws Exception {
+ appendToFile(buildFile, buildFileTaskConfig);
BuildResult result = GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath()
- .withArguments(SETUP_FREGE_COMPILER_TASK_NAME).build();
+ .withArguments(taskName).build();
System.out.println(result.getOutput());
- assertEquals(SUCCESS, result.task(":" + SETUP_FREGE_COMPILER_TASK_NAME).getOutcome());
+ assertEquals(SUCCESS, result.task(":" + taskName).getOutcome());
}
@BeforeEach
void setup() throws Exception {
buildFile = new File(testProjectDir, "build.gradle");
settingsFile = new File(testProjectDir, "settings.gradle");
- writeToFile(buildFile, writeBuildFilePlugins(Stream.of(FREGE_PLUGIN_ID)));
+ writeToFile(buildFile, createPluginsSection(Stream.of(FREGE_PLUGIN_ID)));
writeToFile(settingsFile, "rootProject.name='frege-plugin'");
project = ProjectBuilder.builder().withProjectDir(testProjectDir).build();
project.getPluginManager().apply(FREGE_PLUGIN_ID);
}
@Test
+ void given_version_and_release_then_fregeDTO_can_be_converted_to_build_file_string() {
+ FregeDTO fregeDTO = fregeBuilder.version("'3.25'").release("'3.25alpha'").build();
+ String expected = "version = '3.25'\n release = '3.25alpha'";
+ assertEquals(expected, fregeDTO.toBuildFile());
+ }
+
+ @Test
+ void given_version_release_and_compiler_download_dir_then_fregeDTO_can_be_converted_to_build_file_string() {
+ FregeDTO fregeDTO = fregeBuilder.version("'3.25'").release("'3.25alpha'")
+ .compilerDownloadDir("layout.projectDirectory.dir('dist')").build();
+ String expected = "version = '3.25'\n release = '3.25alpha'\n compilerDownloadDir = layout.projectDirectory.dir('dist')";
+ assertEquals(expected, fregeDTO.toBuildFile());
+ }
+
+ @Test
void given_single_plugin_id_then_it_is_correctly_converted_to_build_file_string() {
String pluginId = "frege";
Stream<String> pluginIds = Stream.of(pluginId);
String expected = "plugins {\n" + " id '" + pluginId + "'\n" + "}\n";
- assertEquals(expected, writeBuildFilePlugins(pluginIds));
+ assertEquals(expected, createPluginsSection(pluginIds));
}
@Test
@@ -103,73 +116,44 @@ public class FregePluginFunctionalTest {
String javaId = "java";
Stream<String> pluginIds = Stream.of(fregeId, javaId);
String expected = "plugins {\n" + " id '" + fregeId + "'\n" + " id '" + javaId + "'\n" + "}\n";
- assertEquals(expected, writeBuildFilePlugins(pluginIds));
+ assertEquals(expected, createPluginsSection(pluginIds));
}
@Test
- void given_default_plugin_ids_then_they_are_correctly_converted_to_build_file_string() {
- String fregeId = "frege";
- String javaId = "java";
- Stream<String> pluginIds = Stream.of(fregeId, javaId);
- String expected = "plugins {\n" + " id '" + fregeId + "'\n" + " id '" + javaId + "'\n" + "}\n";
- assertEquals(expected, writeBuildFilePlugins(pluginIds));
- }
-
- @Test
- void given_frege_version_and_frege_release_then_they_are_correctly_converted_to_build_file_string() {
- String fregeVersion = "'3.25.84'";
- String fregeRelease = "'3.25alpha'";
- String expectedFregeConfig = FREGE_EXTENSION_NAME + " {\n" + " fregeVersion = " + fregeVersion + "\n"
- + " fregeRelease = " + fregeRelease + "\n" + "}\n";
- assertEquals(expectedFregeConfig, buildFileFregeExtension(fregeVersion, fregeRelease, Optional.empty()));
+ void given_setup_frege_compiler_task_when_frege_version_and_frege_release_is_specified_then_frege_compiler_is_successfully_downloaded_to_default_directory()
+ throws Exception {
+ FregeDTO minimalFregeDTO = fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build();
+ assertTrue(project.getTasks().getByName(SETUP_FREGE_TASK_NAME) instanceof SetupFregeTask);
+ assertGradleTaskOutcome(createFregeSection(minimalFregeDTO), SETUP_FREGE_TASK_NAME);
+ assertTrue(testProjectDir.toPath().resolve(Paths.get(DEFAULT_DOWNLOAD_DIRECTORY, "frege3.25.84.jar")).toFile()
+ .exists());
}
@Test
- void given_frege_version_and_frege_release_and_frege_compiler_path_then_they_are_correctly_converted_to_build_file_string() {
- String fregeVersion = "'3.25.84'";
- String fregeRelease = "'3.25alpha'";
- String fregeCompilerPath = "layout.projectDirectory.file('lib/frege3.25.84')";
- String expectedFregeConfig =
- FREGE_EXTENSION_NAME + " {\n" + " fregeVersion = " + fregeVersion + "\n"
- + " fregeRelease = " + fregeRelease + "\n"
- + " fregeCompilerOutputDirectory = " + fregeCompilerPath + "\n" + "}\n";
- assertEquals(expectedFregeConfig, buildFileFregeExtension(fregeVersion, fregeRelease, Optional.of(fregeCompilerPath)));
+ void given_setup_frege_compiler_task_when_frege_version_and_frege_release_and_download_directory_is_specified_then_frege_compiler_is_successfully_downloaded_to_specified_directory()
+ throws Exception {
+ FregeDTO fregeDTO = fregeBuilder.version("'3.25.84'").release("'3.25alpha'")
+ .compilerDownloadDir("layout.projectDirectory.dir('dist')").build();
+ assertTrue(project.getTasks().getByName(SETUP_FREGE_TASK_NAME) instanceof SetupFregeTask);
+ assertGradleTaskOutcome(createFregeSection(fregeDTO), SETUP_FREGE_TASK_NAME);
+ assertTrue(testProjectDir.toPath().resolve(Paths.get("dist", "frege3.25.84.jar")).toFile().exists());
}
@Test
- void given_frege_compiler_version_3_25_84_and_3_25_alpha_release_without_frege_compiler_path_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.empty());
- assertSetupFregeCompilerTask(fregeConfig);
- assertTrue(new File(testProjectDir.getAbsolutePath() + "/lib/frege3.25.84.jar").exists());
-
+ void frege_compile_task_is_correctly_executed() throws Exception {
+ String fregeCode = "module ch.fhnw.thga.Completion where\n\n" + "complete :: Int -> (Int, String)\n"
+ + "complete i = (i, \"Frege rocks\")\n";
+ Files.createDirectories(testProjectDir.toPath().resolve(Paths.get("src", "main", "frege")));
+ File completionFr = testProjectDir.toPath().resolve(Paths.get("src", "main", "frege", "Completion.fr"))
+ .toFile();
+ writeToFile(completionFr, fregeCode);
+ FregeDTO minimalFregeDTO = fregeBuilder.version("'3.25.84'").release("'3.25alpha'").build();
+ assertTrue(project.getTasks().getByName(COMPILE_FREGE_TASK_NAME) instanceof CompileFregeTask);
+ assertGradleTaskOutcome(createFregeSection(minimalFregeDTO), COMPILE_FREGE_TASK_NAME);
+ assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.java")
+ .exists());
+ assertTrue(
+ new File(testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.class")
+ .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.buildDirectory.dir('dist')"));
- assertSetupFregeCompilerTask(fregeConfig);
- assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/dist/frege3.25.84.jar").exists());
- }
-
- @Test
- void frege_compile_task_is_correctly_executed()
- throws Exception {
- String fregeConfig = buildFileFregeExtension("'3.25.84'", "'3.25alpha'", Optional.of("layout.buildDirectory.dir('dist')"));
- String fregeCode = "module ch.fhnw.thga.Completion where\n\n" +
- "complete :: Int -> (Int, String)\n" +
- "complete i = (i, \"Frege rocks\")\n";
- File completionFr = new File(testProjectDir, "Completion.fr");
- writeToFile(completionFr, fregeCode);
- System.out.println(fregeConfig);
- appendToFile(buildFile, fregeConfig);
- assertTrue(project.getTasks().getByName(FREGE_COMPILE_TASK_NAME) instanceof FregeCompileTask);
- BuildResult result = GradleRunner.create().withProjectDir(testProjectDir).withPluginClasspath()
- .withArguments(FREGE_COMPILE_TASK_NAME).build();
- System.out.println(result.getOutput());
- assertEquals(SUCCESS, result.task(":" + FREGE_COMPILE_TASK_NAME).getOutcome());
- assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.java").exists());
- assertTrue(new File(testProjectDir.getAbsolutePath() + "/build/classes/main/frege/ch/fhnw/thga/Completion.class").exists());
- }
} \ No newline at end of file