diff options
16 files changed, 231 insertions, 234 deletions
@@ -6,4 +6,5 @@ build .settings bin .DS_Store -lib
\ No newline at end of file +lib +.jqwik-database
\ No newline at end of file diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java index af3225d..31e6d05 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/CompileFregeTaskFunctionalTest.java @@ -6,6 +6,8 @@ import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSe import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask; import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask; import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.NEW_LINE; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.COMPLETION_FR; import static org.gradle.testkit.runner.TaskOutcome.FAILED; import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE; import static org.gradle.testkit.runner.TaskOutcome.SUCCESS; @@ -29,30 +31,6 @@ import ch.fhnw.thga.gradleplugins.fregeproject.FregeSourceFile; public class CompileFregeTaskFunctionalTest { - private static final FregeSourceFile COMPLETION_FR = new FregeSourceFile( - String.format("%s/%s", - DEFAULT_RELATIVE_SOURCE_DIR, - "ch/fhnw/thga/Completion.fr"), - String.join - ( - NEW_LINE, - "module ch.fhnw.thga.Completion where", - NEW_LINE, - NEW_LINE, - " complete :: Int -> (Int, String)", - NEW_LINE, - " complete i = (i, \"Frege rocks\")", - NEW_LINE - ) - ); - private static final String MINIMAL_BUILD_FILE_CONFIG = createFregeSection( - FregeDTOBuilder - .builder() - .version("'3.25.84'") - .release("'3.25alpha'") - .build() - ); - private static final boolean assertFileExists( File testProjectDir, String relativeFilePath) diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java deleted file mode 100644 index 5159c92..0000000 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/FregePluginFunctionalTest.java +++ /dev/null @@ -1,157 +0,0 @@ -package ch.fhnw.thga.gradleplugins; - -import static ch.fhnw.thga.gradleplugins.FregePlugin.COMPILE_FREGE_TASK_NAME; -import static ch.fhnw.thga.gradleplugins.FregePlugin.SETUP_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.REPL_FREGE_TASK_NAME; -import static ch.fhnw.thga.gradleplugins.FregePlugin.RUN_FREGE_TASK_NAME; -import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_SOURCE_DIR; -import static ch.fhnw.thga.gradleplugins.GradleBuildFileConversionTest.createPluginsSection; -import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection; -import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.writeToFile; -import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeGradleProject; -import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask; -import static org.gradle.testkit.runner.TaskOutcome.FAILED; -import static org.gradle.testkit.runner.TaskOutcome.FROM_CACHE; -import static org.gradle.testkit.runner.TaskOutcome.SUCCESS; -import static org.gradle.testkit.runner.TaskOutcome.UP_TO_DATE; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Collections; -import java.util.stream.Stream; - -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.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayNameGenerator; -import org.junit.jupiter.api.IndicativeSentencesGeneration; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -public class FregePluginFunctionalTest -{ - /*@Nested - @IndicativeSentencesGeneration(separator = " -> ", generator = DisplayNameGenerator.ReplaceUnderscores.class) - class Run_frege_task_works { - @Test - void given_frege_file_with_main_function_and_main_module_config() throws Exception { - String fregeCode = String.join(NEW_LINE, "module ch.fhnw.thga.Main where", NEW_LINE, NEW_LINE, - " main = do", NEW_LINE, " println \"Frege rocks\"", NEW_LINE); - String mainFr = "Main.fr"; - String buildFileConfig = createFregeSection( - FREGE_BUILDER.version("'3.25.84'").release("'3.25alpha'") - .mainModule("'ch.fhnw.thga.Main'").build()); - setupDefaultFregeProjectStructure(fregeCode, mainFr, buildFileConfig); - - BuildResult result = runGradleTask(RUN_FREGE_TASK_NAME); - assertTrue(project.getTasks().getByName(RUN_FREGE_TASK_NAME) instanceof RunFregeTask); - assertEquals(SUCCESS, result.task(":" + RUN_FREGE_TASK_NAME).getOutcome()); - assertTrue(result.getOutput().contains("Frege rocks")); - } - - @Test - void given_frege_file_without_main_function() throws Exception { - String completionFr = "Completion.fr"; - String buildFileConfig = createFregeSection( - FREGE_BUILDER.version("'3.25.84'").release("'3.25alpha'") - .mainModule("'ch.fhnw.thga.Completion'").build()); - setupDefaultFregeProjectStructure(FREGE_COMPLETION_MODULE_CODE, completionFr, buildFileConfig); - - BuildResult result = runAndFailGradleTask(RUN_FREGE_TASK_NAME); - assertTrue(project.getTasks().getByName(RUN_FREGE_TASK_NAME) instanceof RunFregeTask); - assertEquals(FAILED, result.task(":" + RUN_FREGE_TASK_NAME).getOutcome()); - assertTrue(result.getOutput().contains("Main method not found")); - } - - @Test - void given_frege_file_with_main_function_and_main_module_command_line_option() throws Exception { - String fregeCode = String.join(NEW_LINE, "module ch.fhnw.thga.Main where", NEW_LINE, NEW_LINE, - " main = do", NEW_LINE, " println \"Frege rocks\"", NEW_LINE); - String mainFr = "Main.fr"; - String buildFileConfig = createFregeSection( - FREGE_BUILDER.version("'3.25.84'").release("'3.25alpha'").build()); - setupDefaultFregeProjectStructure(fregeCode, mainFr, buildFileConfig); - - BuildResult result = runGradleTask(RUN_FREGE_TASK_NAME, "--mainModule=ch.fhnw.thga.Main"); - assertTrue(project.getTasks().getByName(RUN_FREGE_TASK_NAME) instanceof RunFregeTask); - assertEquals(SUCCESS, result.task(":" + RUN_FREGE_TASK_NAME).getOutcome()); - assertTrue(result.getOutput().contains("Frege rocks")); - } - } - - - @Nested - @IndicativeSentencesGeneration( - separator = " -> ", - generator = DisplayNameGenerator.ReplaceUnderscores.class) - class Repl_frege_task_works - { - @Test - void given_minimal_build_file_config_with_replModule() throws Exception - { - String completionFr = "Completion.fr"; - String minimalReplModuleConfig = createFregeSection( - FREGE_BUILDER - .version("'3.25.84'") - .release("'3.25alpha'") - .replSource(String.format("'ch.fhnw.thga.Completion'")) - .build()); - setupDefaultFregeProjectStructure( - FREGE_COMPLETION_MODULE_CODE, - completionFr, - minimalReplModuleConfig); - - BuildResult result = runGradleTask(REPL_FREGE_TASK_NAME); - - assertTrue( - project.getTasks().getByName(REPL_FREGE_TASK_NAME) - instanceof ReplFregeTask); - assertEquals(SUCCESS, result.task(":" + REPL_FREGE_TASK_NAME).getOutcome()); - assertTrue(result.getOutput().contains("java -cp")); - assertTrue(result.getOutput().contains("frege3.25.84.jar")); - assertTrue(result.getOutput().contains("Completion.java")); - } - } - - @Nested - @IndicativeSentencesGeneration( - separator = " -> ", - generator = DisplayNameGenerator.ReplaceUnderscores.class) - class Repl_frege_task_fails - { - @Test - void given_minimal_build_file_config_without_repl_module() throws Exception - { - String completionFr = "Completion.fr"; - String minimalBuildFileConfig = createFregeSection( - FREGE_BUILDER - .version("'3.25.84'") - .release("'3.25alpha'") - .build()); - setupDefaultFregeProjectStructure( - FREGE_COMPLETION_MODULE_CODE, - completionFr, - minimalBuildFileConfig); - - BuildResult result = runAndFailGradleTask(REPL_FREGE_TASK_NAME); - - assertTrue( - project.getTasks().getByName(REPL_FREGE_TASK_NAME) - instanceof ReplFregeTask); - assertEquals(FAILED, result.task(":" + COMPILE_FREGE_TASK_NAME).getOutcome()); - } - }*/ -}
\ No newline at end of file diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java new file mode 100644 index 0000000..979d1d4 --- /dev/null +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/ReplFregeTaskFunctionalTest.java @@ -0,0 +1,102 @@ +package ch.fhnw.thga.gradleplugins; + +import static ch.fhnw.thga.gradleplugins.FregePlugin.REPL_FREGE_TASK_NAME; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.COMPLETION_FR; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask; +import static org.gradle.testkit.runner.TaskOutcome.FAILED; +import static org.gradle.testkit.runner.TaskOutcome.SUCCESS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.util.stream.Stream; + +import org.gradle.api.Project; +import org.gradle.testkit.runner.BuildResult; +import org.junit.jupiter.api.DisplayNameGenerator; +import org.junit.jupiter.api.IndicativeSentencesGeneration; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import ch.fhnw.thga.gradleplugins.fregeproject.FregeProjectBuilder; + +public class ReplFregeTaskFunctionalTest +{ + @Nested + @IndicativeSentencesGeneration( + generator = DisplayNameGenerator.ReplaceUnderscores.class) + class Repl_frege_task_works + { + @Test + void given_minimal_build_file_config_with_repl_module( + @TempDir File testProjectDir) + throws Exception + { + String replModuleConfig = createFregeSection( + FregeDTOBuilder + .builder() + .version("'3.25.84'") + .release("'3.25alpha'") + .replModule("'ch.fhnw.thga.Completion'") + .build() + ); + Project project = FregeProjectBuilder + .builder() + .projectRoot(testProjectDir) + .buildFile(replModuleConfig) + .fregeSourceFiles(() -> Stream.of(COMPLETION_FR)) + .build(); + + BuildResult result = runGradleTask(testProjectDir, REPL_FREGE_TASK_NAME); + + assertTrue( + project + .getTasks() + .getByName(REPL_FREGE_TASK_NAME) + instanceof ReplFregeTask); + assertEquals( + SUCCESS, + result.task(":" + REPL_FREGE_TASK_NAME).getOutcome()); + assertTrue(result.getOutput().contains("java -cp")); + assertTrue(result.getOutput().contains("frege3.25.84.jar")); + assertFalse(result.getOutput().contains("Completion.class")); + } + } + + @Nested + @IndicativeSentencesGeneration( + generator = DisplayNameGenerator.ReplaceUnderscores.class) + class Repl_frege_task_fails + { + @Test + void given_minimal_build_file_config_without_repl_module( + @TempDir File testProjectDir) + throws Exception + { + Project project = FregeProjectBuilder + .builder() + .projectRoot(testProjectDir) + .buildFile(MINIMAL_BUILD_FILE_CONFIG) + .fregeSourceFiles(() -> Stream.of(COMPLETION_FR)) + .build(); + + BuildResult result = runAndFailGradleTask(testProjectDir, REPL_FREGE_TASK_NAME); + + assertTrue( + project + .getTasks() + .getByName(REPL_FREGE_TASK_NAME) + instanceof ReplFregeTask + ); + assertEquals( + FAILED, + result.task(":" + REPL_FREGE_TASK_NAME).getOutcome() + ); + } + } +}
\ No newline at end of file diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java index c0c870a..c4d5bad 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/RunFregeTaskFunctionalTest.java @@ -6,6 +6,7 @@ import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.NEW_LINE; import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.createFregeSection; import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runAndFailGradleTask; import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.runGradleTask; +import static ch.fhnw.thga.gradleplugins.SharedFunctionalTestLogic.MINIMAL_BUILD_FILE_CONFIG; import static org.gradle.testkit.runner.TaskOutcome.FAILED; import static org.gradle.testkit.runner.TaskOutcome.SUCCESS; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -91,17 +92,10 @@ public class RunFregeTaskFunctionalTest @TempDir File testProjectDir) throws Exception { - String mainBuildConfig = createFregeSection( - FregeDTOBuilder - .builder() - .version("'3.25.84'") - .release("'3.25alpha'") - .build() - ); Project project = FregeProjectBuilder .builder() .projectRoot(testProjectDir) - .buildFile(mainBuildConfig) + .buildFile(MINIMAL_BUILD_FILE_CONFIG) .fregeSourceFiles(() -> Stream.of(MAIN_FR)) .build(); diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java index c98d7ac..51fa256 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/SharedFunctionalTestLogic.java @@ -3,6 +3,7 @@ package ch.fhnw.thga.gradleplugins; 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.GradleBuildFileConversionTest.createPluginsSection; +import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_SOURCE_DIR; import java.io.BufferedWriter; import java.io.File; @@ -15,9 +16,35 @@ import org.gradle.testfixtures.ProjectBuilder; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.GradleRunner; +import ch.fhnw.thga.gradleplugins.fregeproject.FregeSourceFile; + public class SharedFunctionalTestLogic { public static final String NEW_LINE = System.lineSeparator(); + public static final String MINIMAL_BUILD_FILE_CONFIG = createFregeSection( + FregeDTOBuilder + .builder() + .version("'3.25.84'") + .release("'3.25alpha'") + .build() + ); + public static final FregeSourceFile COMPLETION_FR = new FregeSourceFile( + String.format("%s/%s", + DEFAULT_RELATIVE_SOURCE_DIR, + "ch/fhnw/thga/Completion.fr"), + String.join + ( + NEW_LINE, + "module ch.fhnw.thga.Completion where", + NEW_LINE, + NEW_LINE, + " complete :: Int -> (Int, String)", + NEW_LINE, + " complete i = (i, \"Frege rocks\")", + NEW_LINE + ) + ); + static String createFregeSection(FregeDTO fregeDTO) { return String.format( diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java index d2c6aeb..0cb0746 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeProjectBuilder.java @@ -1,27 +1,23 @@ package ch.fhnw.thga.gradleplugins.fregeproject; +import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR; +import static ch.fhnw.thga.gradleplugins.FregePlugin.FREGE_PLUGIN_ID; +import static ch.fhnw.thga.gradleplugins.GradleBuildFileConversionTest.createPluginsSection; + import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.nio.file.CopyOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; -import java.util.List; import java.util.function.Supplier; import java.util.stream.Stream; import org.gradle.api.Project; import org.gradle.testfixtures.ProjectBuilder; -import ch.fhnw.thga.gradleplugins.FregeDTO; -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.GradleBuildFileConversionTest.createPluginsSection; -import static ch.fhnw.thga.gradleplugins.FregeExtension.DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR; - public final class FregeProjectBuilder implements ProjectRoot, BuildFile, Build { private static final String LATEST_COMPILER_VERSION = "3.25.84"; @@ -82,12 +78,6 @@ public final class FregeProjectBuilder implements ProjectRoot, BuildFile, Build throw new RuntimeException(e.getMessage(), e.getCause()); } } - - private static File appendToFile(File destination, String content) throws IOException - { - writeFile(destination, System.lineSeparator() + content, true); - return destination; - } private File setupLocalFregeCompilerInDefaultPath() throws IOException { diff --git a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java index c161dbd..858f6d4 100644 --- a/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java +++ b/src/functionalTest/java/ch/fhnw/thga/gradleplugins/fregeproject/FregeSourceFile.java @@ -7,8 +7,8 @@ public class FregeSourceFile public FregeSourceFile(String modulePath, String sourceCode) { - this.modulePath = modulePath; - this.sourceCode = sourceCode; + this.modulePath = modulePath; + this.sourceCode = sourceCode; } public String getFregeModulePath() diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java index cfcd393..18a9500 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregeExtension.java @@ -9,7 +9,8 @@ import org.gradle.api.file.ProjectLayout; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; -public abstract class FregeExtension { +public abstract class FregeExtension +{ public static final String DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR = "lib"; public static final String DEFAULT_RELATIVE_OUTPUT_DIR = "classes/main/frege"; public static final String DEFAULT_RELATIVE_SOURCE_DIR = "src/main/frege"; @@ -29,10 +30,11 @@ public abstract class FregeExtension { public abstract ListProperty<String> getCompilerFlags(); - public abstract Property<String> getReplSource(); + public abstract Property<String> getReplModule(); @Inject - public FregeExtension(ProjectLayout projectLayout) { + public FregeExtension(ProjectLayout projectLayout) + { getCompilerDownloadDir() .convention(projectLayout.getProjectDirectory().dir(DEFAULT_RELATIVE_COMPILER_DOWNLOAD_DIR)); diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java index 957dc83..9b725ac 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/FregePlugin.java @@ -68,8 +68,8 @@ public class FregePlugin implements Plugin<Project> { compileTask.getFregeCompileItem().set(task.getMainModule()); return compileTask; - }) - .get()); + } + )); task.getFregeCompilerJar().set( setupFregeCompilerTask.get().getFregeCompilerOutputPath()); task.getFregeOutputDir().set(extension.getOutputDir()); @@ -82,14 +82,14 @@ public class FregePlugin implements Plugin<Project> ReplFregeTask.class, task -> { - task.getReplSource().set(extension.getReplSource()); + task.getReplModule().set(extension.getReplModule()); task.dependsOn(compileFregeTask.map( compileTask -> { - compileTask.getFregeCompileItem().set(task.getReplSource()); + compileTask.getFregeCompileItem().set(task.getReplModule()); return compileTask; - }) - .get()); + } + )); task.getFregeCompilerJar().set( setupFregeCompilerTask.get().getFregeCompilerOutputPath()); task.getFregeOutputDir().set(extension.getOutputDir()); diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java index 7903d7e..67af55e 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/ReplFregeTask.java @@ -1,7 +1,9 @@ package ch.fhnw.thga.gradleplugins; +import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.extractClassNameFromFregeModuleName; import org.gradle.api.DefaultTask; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.FileTree; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; @@ -25,15 +27,29 @@ public abstract class ReplFregeTask extends DefaultTask { public abstract DirectoryProperty getFregeOutputDir(); @Input - @Option(option = "replSource", - description = "The filename which you want to load into the repl, e.g. 'myFregeFile.fr'") - public abstract Property<String> getReplSource(); + @Option(option = "replModule", + description = "The full name of the module which you want to load into the repl, e.g. 'my.mod.Name'") + public abstract Property<String> getReplModule(); @Internal public final Provider<String> getReplClassName() { - return getReplSource() - .map(replSource -> replSource.substring(replSource.lastIndexOf("."))); + return getReplModule() + .map(replSource -> extractClassNameFromFregeModuleName(replSource)); + } + + @Internal + public final Provider<FileTree> getClasspathWithoutReplClassFile() + { + return getFregeOutputDir() + .map(outDir -> outDir.getAsFileTree()) + .map(tree -> tree.matching(pattern -> pattern.exclude("**/*.java"))) + .map(tree -> tree.matching(pattern -> pattern.exclude( + String.format( + "**/%s.class", + getReplClassName().get() + ) + ))); } @TaskAction @@ -45,7 +61,7 @@ public abstract class ReplFregeTask extends DefaultTask { getProject(), getFregeDependencies(), getFregeCompilerJar(), - getFregeOutputDir()) + getClasspathWithoutReplClassFile()) .get().getAsPath(), REPL_MAIN_CLASS)); } diff --git a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java index 57af617..e6191a3 100644 --- a/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java +++ b/src/main/java/ch/fhnw/thga/gradleplugins/SharedTaskLogic.java @@ -5,7 +5,8 @@ import org.gradle.api.file.FileCollection; import org.gradle.api.provider.Provider; import org.gradle.api.provider.Property; -public final class SharedTaskLogic { +public final class SharedTaskLogic +{ private SharedTaskLogic() {}; public static final Provider<FileCollection> setupClasspath( @@ -19,4 +20,9 @@ public final class SharedTaskLogic { : project.files(depsClasspath, paths); }); } + + public static final String extractClassNameFromFregeModuleName(String moduleName) + { + return moduleName.substring(moduleName.lastIndexOf(".") + 1); + } } diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java index df070a2..d379013 100644 --- a/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java +++ b/src/test/java/ch/fhnw/thga/gradleplugins/Builder.java @@ -15,7 +15,7 @@ public interface Builder { Builder compilerFlags(String compilerFlags); - Builder replSource(String replSource); + Builder replModule(String replModule); FregeDTO build(); } diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java index e092eac..bea1e81 100644 --- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java +++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTO.java @@ -14,7 +14,7 @@ public class FregeDTO { public final String outputDir; public final String mainModule; public final String compilerFlags; - public final String replSource; + public final String replModule; public FregeDTO( String version, @@ -24,7 +24,7 @@ public class FregeDTO { String outputDir, String mainModule, String compilerFlags, - String replSource) { + String replModule) { this.version = version; this.release = release; this.compilerDownloadDir = compilerDownloadDir; @@ -32,7 +32,7 @@ public class FregeDTO { this.outputDir = outputDir; this.mainModule = mainModule; this.compilerFlags = compilerFlags; - this.replSource = replSource; + this.replModule = replModule; } public String getVersion() { @@ -63,8 +63,8 @@ public class FregeDTO { return compilerFlags; } - public String getReplSource() { - return replSource; + public String getReplModule() { + return replModule; } private String getFieldValue(Field field) { diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java index d7fe9f1..58e8396 100644 --- a/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java +++ b/src/test/java/ch/fhnw/thga/gradleplugins/FregeDTOBuilder.java @@ -8,7 +8,7 @@ public final class FregeDTOBuilder implements Builder { private String outputDir = ""; private String mainModule = ""; private String compilerFlags = ""; - private String replSource = ""; + private String replModule = ""; private FregeDTOBuilder() {} @@ -65,9 +65,9 @@ public final class FregeDTOBuilder implements Builder { } @Override - public Builder replSource(String replSource) + public Builder replModule(String replModule) { - this.replSource = replSource; + this.replModule = replModule; return this; } @@ -80,6 +80,6 @@ public final class FregeDTOBuilder implements Builder { outputDir, mainModule, compilerFlags, - replSource); + replModule); } } diff --git a/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java b/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java index 6f10d70..bb353a8 100644 --- a/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java +++ b/src/test/java/ch/fhnw/thga/gradleplugins/SharedTaskLogicTest.java @@ -1,14 +1,52 @@ package ch.fhnw.thga.gradleplugins; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static ch.fhnw.thga.gradleplugins.SharedTaskLogic.extractClassNameFromFregeModuleName; + import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; +import net.jqwik.api.Example; +import net.jqwik.api.ForAll; +import net.jqwik.api.Property; + @TestInstance(Lifecycle.PER_CLASS) public class SharedTaskLogicTest { - @Test + @Example void given_valid_frege_module_name_then_can_extract_class_name() { + assertEquals( + extractClassNameFromFregeModuleName("ch.fhnw.thga.Completion"), + "Completion" + ); + } + + @Example + void given_empty_frege_module_name_then_returns_empty_string() + { + assertEquals( + extractClassNameFromFregeModuleName(""), + "" + ); + } + + @Example + void module_name_without_a_package_equals_class_name() + { + assertEquals( + extractClassNameFromFregeModuleName("Completion"), + "Completion" + ); + } + + @Property + void class_name_is_the_suffix_of_the_full_module_name( + @ForAll String aString) + { + String expectedFregeClassName = "Completion"; + assertEquals( + extractClassNameFromFregeModuleName(String.join(".", expectedFregeClassName)), + expectedFregeClassName); } }
\ No newline at end of file |