diff options
-rw-r--r-- | .github/workflows/main.yml | 28 | ||||
-rw-r--r-- | build.gradle | 2 | ||||
-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.java | 27 | ||||
-rw-r--r-- | src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java | 29 | ||||
-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.java | 15 | ||||
-rw-r--r-- | src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java | 85 | ||||
-rw-r--r-- | src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java | 48 | ||||
-rw-r--r-- | src/test/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java | 150 |
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 |