From 22db49a88be4194a8f5ae368d53db91835e27da2 Mon Sep 17 00:00:00 2001 From: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> Date: Sat, 24 Jun 2023 17:16:20 +0200 Subject: [PATCH 1/5] Updated shell library. Signed-off-by: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> --- build.gradle.kts | 2 +- .../kscripting/kscript/KscriptHandler.kt | 2 +- .../github/kscripting/kscript/cache/Cache.kt | 1 + .../kscripting/kscript/code/Templates.kt | 2 +- .../kscript/creator/BootstrapCreator.kt | 2 +- .../kscript/creator/DeprecatedInfoCreator.kt | 2 +- .../kscript/creator/JarArtifactCreator.kt | 1 + .../kscripting/kscript/model/Content.kt | 1 - .../github/kscripting/kscript/model/Script.kt | 2 -- .../kscript/model/ScriptAnnotation.kt | 2 -- .../kscripting/kscript/model/ScriptContext.kt | 11 ++++++++ .../kscript/model/ScriptLocation.kt | 12 +++++++++ .../kscripting/kscript/model/ScriptNode.kt | 2 -- .../kscripting/kscript/model/ScriptSource.kt | 3 +++ .../kscripting/kscript/model/ScriptType.kt | 9 +++++++ .../kscripting/kscript/parser/LineParser.kt | 2 +- .../kscripting/kscript/parser/Parser.kt | 2 +- .../kscript/resolver/ScriptResolver.kt | 3 +++ .../kscript/resolver/SectionResolver.kt | 4 +-- .../kscripting/kscript/util/Executor.kt | 27 ++++++++++--------- .../kscripting/kscript/util/FileUtils.kt | 3 +-- .../kscripting/kscript/util/ScriptUtils.kt | 2 +- .../kscripting/kscript/util/ShellUtils.kt | 9 ++++--- .../kscript/code/GradleTemplatesTest.kt | 6 ++--- .../kscript/parser/LineParserTest.kt | 6 ++--- .../kscript/resolver/ScriptResolverTest.kt | 3 +++ 26 files changed, 79 insertions(+), 42 deletions(-) create mode 100644 src/main/kotlin/io/github/kscripting/kscript/model/ScriptContext.kt create mode 100644 src/main/kotlin/io/github/kscripting/kscript/model/ScriptLocation.kt create mode 100644 src/main/kotlin/io/github/kscripting/kscript/model/ScriptSource.kt create mode 100644 src/main/kotlin/io/github/kscripting/kscript/model/ScriptType.kt diff --git a/build.gradle.kts b/build.gradle.kts index aaf0720f..f18eab18 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -303,7 +303,7 @@ dependencies { implementation("com.konghq:unirest-java:3.14.2") implementation("net.igsoft:tablevis:0.6.0") - implementation("io.github.kscripting:shell:0.5.2") + implementation("io.github.kscripting:shell:0.6.0-SNAPSHOT") implementation("org.slf4j:slf4j-nop:2.0.7") diff --git a/src/main/kotlin/io/github/kscripting/kscript/KscriptHandler.kt b/src/main/kotlin/io/github/kscripting/kscript/KscriptHandler.kt index bcadedb4..3b2ca40f 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/KscriptHandler.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/KscriptHandler.kt @@ -14,7 +14,7 @@ import io.github.kscripting.kscript.util.FileUtils.getArtifactsRecursively import io.github.kscripting.kscript.util.Logger.info import io.github.kscripting.kscript.util.Logger.infoMsg import io.github.kscripting.kscript.util.Logger.warnMsg -import io.github.kscripting.shell.model.ScriptType +import io.github.kscripting.kscript.model.ScriptType import java.net.URI class KscriptHandler( diff --git a/src/main/kotlin/io/github/kscripting/kscript/cache/Cache.kt b/src/main/kotlin/io/github/kscripting/kscript/cache/Cache.kt index db6bf69f..c05aa38e 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/cache/Cache.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/cache/Cache.kt @@ -2,6 +2,7 @@ package io.github.kscripting.kscript.cache import io.github.kscripting.kscript.creator.JarArtifact import io.github.kscripting.kscript.model.Content +import io.github.kscripting.kscript.model.ScriptType import io.github.kscripting.shell.model.* import org.apache.commons.codec.digest.DigestUtils import org.apache.commons.io.FileUtils diff --git a/src/main/kotlin/io/github/kscripting/kscript/code/Templates.kt b/src/main/kotlin/io/github/kscripting/kscript/code/Templates.kt index b5c90287..5f2a8835 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/code/Templates.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/code/Templates.kt @@ -2,7 +2,7 @@ package io.github.kscripting.kscript.code import io.github.kscripting.kscript.model.KotlinOpt import io.github.kscripting.kscript.model.PackageName -import io.github.kscripting.shell.model.ScriptType +import io.github.kscripting.kscript.model.ScriptType import org.intellij.lang.annotations.Language import java.time.ZonedDateTime diff --git a/src/main/kotlin/io/github/kscripting/kscript/creator/BootstrapCreator.kt b/src/main/kotlin/io/github/kscripting/kscript/creator/BootstrapCreator.kt index 63b02863..4245f0d7 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/creator/BootstrapCreator.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/creator/BootstrapCreator.kt @@ -2,8 +2,8 @@ package io.github.kscripting.kscript.creator import io.github.kscripting.kscript.code.Templates import io.github.kscripting.kscript.model.Script +import io.github.kscripting.kscript.model.ScriptSource import io.github.kscripting.kscript.util.Logger.infoMsg -import io.github.kscripting.shell.model.* import java.io.File class BootstrapCreator { diff --git a/src/main/kotlin/io/github/kscripting/kscript/creator/DeprecatedInfoCreator.kt b/src/main/kotlin/io/github/kscripting/kscript/creator/DeprecatedInfoCreator.kt index 09f6208d..7c95571b 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/creator/DeprecatedInfoCreator.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/creator/DeprecatedInfoCreator.kt @@ -1,7 +1,7 @@ package io.github.kscripting.kscript.creator import io.github.kscripting.kscript.model.DeprecatedItem -import io.github.kscripting.shell.model.* +import io.github.kscripting.kscript.model.ScriptLocation import net.igsoft.tablevis.TableBuilder import net.igsoft.tablevis.printer.text.TextTablePrinter import net.igsoft.tablevis.style.text.BoxTextTableStyleSet diff --git a/src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt b/src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt index 3dfd73c9..5f14de87 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt @@ -2,6 +2,7 @@ package io.github.kscripting.kscript.creator import io.github.kscripting.kscript.code.Templates import io.github.kscripting.kscript.model.Script +import io.github.kscripting.kscript.model.ScriptType import io.github.kscripting.kscript.util.Executor import io.github.kscripting.kscript.util.FileUtils import io.github.kscripting.shell.model.* diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/Content.kt b/src/main/kotlin/io/github/kscripting/kscript/model/Content.kt index 2ab000b6..43b454a6 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/model/Content.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/model/Content.kt @@ -1,7 +1,6 @@ package io.github.kscripting.kscript.model import io.github.kscripting.shell.model.OsPath -import io.github.kscripting.shell.model.ScriptType import java.net.URI data class Content( diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/Script.kt b/src/main/kotlin/io/github/kscripting/kscript/model/Script.kt index 5ee6f435..3776870f 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/model/Script.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/model/Script.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.model -import io.github.kscripting.shell.model.ScriptLocation - data class Script( val scriptLocation: ScriptLocation, diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptAnnotation.kt b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptAnnotation.kt index 55ff0a39..7684dbfb 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptAnnotation.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptAnnotation.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.model -import io.github.kscripting.shell.model.ScriptLocation - sealed interface ScriptAnnotation @JvmInline diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptContext.kt b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptContext.kt new file mode 100644 index 00000000..f14d35df --- /dev/null +++ b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptContext.kt @@ -0,0 +1,11 @@ +package io.github.kscripting.kscript.model + +import io.github.kscripting.shell.model.OsPath +import io.github.kscripting.shell.model.OsType + +data class ScriptContext( + val osType: OsType, + val workingDir: OsPath, + val executorDir: OsPath, + val scriptLocation: ScriptLocation +) diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptLocation.kt b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptLocation.kt new file mode 100644 index 00000000..76cb3645 --- /dev/null +++ b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptLocation.kt @@ -0,0 +1,12 @@ +package io.github.kscripting.kscript.model + +import java.net.URI + +data class ScriptLocation( + val level: Int, + val scriptSource: ScriptSource, + val scriptType: ScriptType, + val sourceUri: URI?, + val sourceContextUri: URI, + val scriptName: String //without Kotlin extension (but possibly with other extensions) +) diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptNode.kt b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptNode.kt index e8dfcad4..7e9da65d 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptNode.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptNode.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.model -import io.github.kscripting.shell.model.ScriptLocation - data class ScriptNode( val scriptLocation: ScriptLocation, val sections: List
, diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptSource.kt b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptSource.kt new file mode 100644 index 00000000..ab7878bc --- /dev/null +++ b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptSource.kt @@ -0,0 +1,3 @@ +package io.github.kscripting.kscript.model + +enum class ScriptSource { FILE, HTTP, STD_INPUT, OTHER_FILE, PARAMETER } diff --git a/src/main/kotlin/io/github/kscripting/kscript/model/ScriptType.kt b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptType.kt new file mode 100644 index 00000000..bd01fefe --- /dev/null +++ b/src/main/kotlin/io/github/kscripting/kscript/model/ScriptType.kt @@ -0,0 +1,9 @@ +package io.github.kscripting.kscript.model + +enum class ScriptType(val extension: String) { + KT(".kt"), KTS(".kts"); + + companion object { + fun findByExtension(name: String): ScriptType? = values().find { type -> name.endsWith(type.extension, true) } + } +} diff --git a/src/main/kotlin/io/github/kscripting/kscript/parser/LineParser.kt b/src/main/kotlin/io/github/kscripting/kscript/parser/LineParser.kt index c336f825..97151709 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/parser/LineParser.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/parser/LineParser.kt @@ -1,7 +1,7 @@ package io.github.kscripting.kscript.parser import io.github.kscripting.kscript.model.* -import io.github.kscripting.shell.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptLocation @Suppress("UNUSED_PARAMETER") object LineParser { diff --git a/src/main/kotlin/io/github/kscripting/kscript/parser/Parser.kt b/src/main/kotlin/io/github/kscripting/kscript/parser/Parser.kt index c7cfe37e..a8c6d529 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/parser/Parser.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/parser/Parser.kt @@ -2,7 +2,7 @@ package io.github.kscripting.kscript.parser import io.github.kscripting.kscript.model.Code import io.github.kscripting.kscript.model.Section -import io.github.kscripting.shell.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptLocation class Parser { private val annotationParsers = listOf( diff --git a/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt b/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt index 353c1d07..44868e88 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt @@ -1,6 +1,9 @@ package io.github.kscripting.kscript.resolver import io.github.kscripting.kscript.model.* +import io.github.kscripting.kscript.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptSource +import io.github.kscripting.kscript.model.ScriptType import io.github.kscripting.kscript.parser.LineParser.extractValues import io.github.kscripting.kscript.util.ScriptUtils import io.github.kscripting.kscript.util.UriUtils diff --git a/src/main/kotlin/io/github/kscripting/kscript/resolver/SectionResolver.kt b/src/main/kotlin/io/github/kscripting/kscript/resolver/SectionResolver.kt index 08811162..8cecea1b 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/resolver/SectionResolver.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/resolver/SectionResolver.kt @@ -3,8 +3,8 @@ package io.github.kscripting.kscript.resolver import io.github.kscripting.kscript.model.* import io.github.kscripting.kscript.parser.Parser import io.github.kscripting.kscript.util.UriUtils -import io.github.kscripting.shell.model.ScriptLocation -import io.github.kscripting.shell.model.ScriptSource +import io.github.kscripting.kscript.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptSource import java.net.URI class SectionResolver( diff --git a/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt b/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt index 89656ccd..985faded 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt @@ -17,10 +17,7 @@ class Executor(private val commandResolver: CommandResolver) { val command = commandResolver.getKotlinJreVersion() return ShellExecutor.evalAndGobble( - commandResolver.osConfig.osType, - command, - null, - ShellUtils::environmentAdjuster + command, commandResolver.osConfig.osType, null, ShellUtils::environmentAdjuster ).stdout } @@ -33,7 +30,10 @@ class Executor(private val commandResolver: CommandResolver) { devMsg("JAR compile command: $command") val processResult = ShellExecutor.evalAndGobble( - commandResolver.osConfig.osType, command, envAdjuster = ShellUtils::environmentAdjuster, waitTimeMinutes = 30 + command, + commandResolver.osConfig.osType, + envAdjuster = ShellUtils::environmentAdjuster, + waitTimeMinutes = 30 ) devMsg("Script compilation result:\n$processResult") @@ -50,8 +50,8 @@ class Executor(private val commandResolver: CommandResolver) { devMsg("Kotlin execute command: $command") val processResult = ShellExecutor.eval( - commandResolver.osConfig.osType, command, + commandResolver.osConfig.osType, envAdjuster = ShellUtils::environmentAdjuster, waitTimeMinutes = Int.MAX_VALUE, inheritInput = true @@ -59,7 +59,7 @@ class Executor(private val commandResolver: CommandResolver) { devMsg("Script execution result:\n$processResult") - if (processResult.exitCode != 0) { + if (processResult != 0) { throw IllegalStateException("Execution of scriplet failed:\n$processResult") } } @@ -73,8 +73,8 @@ class Executor(private val commandResolver: CommandResolver) { devMsg("REPL Kotlin command: $command") val processResult = ShellExecutor.eval( - commandResolver.osConfig.osType, command, + commandResolver.osConfig.osType, envAdjuster = ShellUtils::environmentAdjuster, waitTimeMinutes = Int.MAX_VALUE, inheritInput = true @@ -86,7 +86,9 @@ class Executor(private val commandResolver: CommandResolver) { fun runGradleInIdeaProject(projectPath: OsPath) { if (isInPath(commandResolver.osConfig.osType, commandResolver.osConfig.gradleCommand)) { // Create gradle wrapper - ShellExecutor.evalAndGobble(commandResolver.osConfig.osType, "gradle wrapper", workingDirectory = projectPath) + ShellExecutor.evalAndGobble( + "gradle wrapper", commandResolver.osConfig.osType, workingDirectory = projectPath + ) } else { warnMsg("Could not find '${commandResolver.osConfig.gradleCommand}' in your PATH. You must set the command used to launch your intellij as 'KSCRIPT_COMMAND_GRADLE' env property") } @@ -95,9 +97,7 @@ class Executor(private val commandResolver: CommandResolver) { val command = commandResolver.executeIdea(projectPath) devMsg("Idea execute command: $command") - val processResult = ShellExecutor.evalAndGobble( - commandResolver.osConfig.osType, command - ) + val processResult = ShellExecutor.evalAndGobble(command, commandResolver.osConfig.osType) devMsg("Script execution result:\n$processResult") @@ -117,7 +117,8 @@ class Executor(private val commandResolver: CommandResolver) { val command = commandResolver.createPackage() devMsg("Create package command: $command") - val result = ShellExecutor.evalAndGobble(commandResolver.osConfig.osType, command, workingDirectory = projectPath) + val result = + ShellExecutor.evalAndGobble(command, commandResolver.osConfig.osType, workingDirectory = projectPath) if (result.exitCode != 0) { throw IllegalStateException("Packaging for path: '$projectPath' failed:$result") diff --git a/src/main/kotlin/io/github/kscripting/kscript/util/FileUtils.kt b/src/main/kotlin/io/github/kscripting/kscript/util/FileUtils.kt index e5e490c9..97c552b1 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/util/FileUtils.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/util/FileUtils.kt @@ -1,11 +1,10 @@ package io.github.kscripting.kscript.util +import io.github.kscripting.kscript.model.ScriptType import io.github.kscripting.kscript.util.Logger.warnMsg import io.github.kscripting.shell.model.* import java.io.IOException import java.nio.file.Files -import kotlin.io.path.createDirectories -import kotlin.io.path.exists object FileUtils { fun createFile(path: OsPath, content: String): OsPath { diff --git a/src/main/kotlin/io/github/kscripting/kscript/util/ScriptUtils.kt b/src/main/kotlin/io/github/kscripting/kscript/util/ScriptUtils.kt index 93a8b25e..a250bc64 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/util/ScriptUtils.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/util/ScriptUtils.kt @@ -5,7 +5,7 @@ import io.github.kscripting.kscript.model.ImportName import io.github.kscripting.kscript.model.PackageName import io.github.kscripting.kscript.model.ScriptNode import io.github.kscripting.kscript.resolver.ResolutionContext -import io.github.kscripting.shell.model.ScriptType +import io.github.kscripting.kscript.model.ScriptType import org.apache.commons.codec.digest.DigestUtils import java.net.URI diff --git a/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt b/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt index b4adbf7c..54534c3d 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt @@ -15,7 +15,7 @@ object ShellUtils { } fun guessPosixKotlinHome(osType: OsType): String? { - val kotlinHome = ShellExecutor.evalAndGobble(osType, "KOTLIN_RUNNER=1 JAVACMD=echo kotlinc").stdout.run { + val kotlinHome = ShellExecutor.evalAndGobble("KOTLIN_RUNNER=1 JAVACMD=echo kotlinc", osType).stdout.run { "kotlin.home=([^\\s]*)".toRegex().find(this)?.groups?.get(1)?.value } ?: return null @@ -59,9 +59,10 @@ object ShellUtils { return null } - fun which(osType: OsType, command: String, envAdjuster: EnvAdjuster = {}): List = ShellExecutor.evalAndGobble( - osType, "${if (osType == OsType.WINDOWS) "where" else "which"} $command", null, envAdjuster - ).stdout.trim().lines() + fun which(osType: OsType, command: String, envAdjuster: EnvAdjuster = {}): List = + ShellExecutor.evalAndGobble( + "${if (osType == OsType.WINDOWS) "where" else "which"} $command", osType, null, envAdjuster + ).stdout.trim().lines() fun isInPath(osType: OsType, command: String, envAdjuster: EnvAdjuster = {}): Boolean { val paths = which(osType, command, envAdjuster) diff --git a/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt b/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt index 2f3ca696..5a0e8b07 100644 --- a/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt +++ b/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt @@ -3,9 +3,9 @@ package io.github.kscripting.kscript.code import assertk.assertThat import assertk.assertions.isEqualTo import io.github.kscripting.kscript.model.* -import io.github.kscripting.shell.model.ScriptLocation -import io.github.kscripting.shell.model.ScriptSource -import io.github.kscripting.shell.model.ScriptType +import io.github.kscripting.kscript.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptSource +import io.github.kscripting.kscript.model.ScriptType import org.junit.jupiter.api.Test import java.net.URI diff --git a/src/test/kotlin/io/github/kscripting/kscript/parser/LineParserTest.kt b/src/test/kotlin/io/github/kscripting/kscript/parser/LineParserTest.kt index 36687b22..14abd68f 100644 --- a/src/test/kotlin/io/github/kscripting/kscript/parser/LineParserTest.kt +++ b/src/test/kotlin/io/github/kscripting/kscript/parser/LineParserTest.kt @@ -10,9 +10,9 @@ import io.github.kscripting.kscript.parser.LineParser.parseEntry import io.github.kscripting.kscript.parser.LineParser.parseImport import io.github.kscripting.kscript.parser.LineParser.parseKotlinOpts import io.github.kscripting.kscript.parser.LineParser.parseRepository -import io.github.kscripting.shell.model.ScriptLocation -import io.github.kscripting.shell.model.ScriptSource -import io.github.kscripting.shell.model.ScriptType +import io.github.kscripting.kscript.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptSource +import io.github.kscripting.kscript.model.ScriptType import org.junit.jupiter.api.Test import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.Arguments diff --git a/src/test/kotlin/io/github/kscripting/kscript/resolver/ScriptResolverTest.kt b/src/test/kotlin/io/github/kscripting/kscript/resolver/ScriptResolverTest.kt index 85da3204..7ca5aecf 100644 --- a/src/test/kotlin/io/github/kscripting/kscript/resolver/ScriptResolverTest.kt +++ b/src/test/kotlin/io/github/kscripting/kscript/resolver/ScriptResolverTest.kt @@ -7,6 +7,9 @@ import assertk.assertions.isEqualTo import assertk.assertions.prop import io.github.kscripting.kscript.cache.Cache import io.github.kscripting.kscript.model.* +import io.github.kscripting.kscript.model.ScriptLocation +import io.github.kscripting.kscript.model.ScriptSource +import io.github.kscripting.kscript.model.ScriptType import io.github.kscripting.kscript.parser.Parser import io.github.kscripting.shell.model.* import org.junit.jupiter.api.Test From 3ef27332222dcf5b25d58ffbd5ae106b4984f3f7 Mon Sep 17 00:00:00 2001 From: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> Date: Sat, 24 Jun 2023 20:26:03 +0200 Subject: [PATCH 2/5] Moving to tests from Shell Signed-off-by: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> --- build.gradle.kts | 1 + .../kscript/integration/AnnotationTest.kt | 45 ++++++--- .../integration/BootstrapHeaderTest.kt | 22 +++-- .../kscript/integration/CliReplTest.kt | 4 +- .../integration/CustomInterpretersTest.kt | 13 +-- .../integration/DeprecatedReportTest.kt | 13 ++- .../kscript/integration/EnvironmentTest.kt | 6 +- .../kscript/integration/IdeaTest.kt | 19 ++-- .../kscript/integration/KtSupportTest.kt | 44 ++++++--- .../kscript/integration/MiscTest.kt | 27 +++--- .../kscript/integration/PackagingTest.kt | 11 +-- .../kscript/integration/ResolverTest.kt | 11 +-- .../integration/ScriptInputModesTest.kt | 23 +++-- .../kscript/integration/SimpleTest.kt | 6 +- .../kscript/integration/SupportApiTest.kt | 8 +- .../kscript/integration/TestBase.kt | 24 ++++- .../integration/tools/TestAssertion.kt | 56 ----------- .../kscript/integration/tools/TestContext.kt | 94 ------------------- .../kscript/integration/tools/TestMatcher.kt | 49 ---------- .../kscript/resolver/ScriptResolver.kt | 2 +- 20 files changed, 171 insertions(+), 307 deletions(-) delete mode 100644 src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestAssertion.kt delete mode 100644 src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestContext.kt delete mode 100644 src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestMatcher.kt diff --git a/build.gradle.kts b/build.gradle.kts index f18eab18..8d3004be 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -304,6 +304,7 @@ dependencies { implementation("net.igsoft:tablevis:0.6.0") implementation("io.github.kscripting:shell:0.6.0-SNAPSHOT") + implementation("io.github.kscripting:shell:0.6.0-SNAPSHOT:test") implementation("org.slf4j:slf4j-nop:2.0.7") diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt index a00f264d..b4277f8d 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt @@ -1,10 +1,9 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.apache.commons.io.FileUtils import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -15,28 +14,48 @@ class AnnotationTest : TestBase { @Tag("posix") @Tag("windows") fun `There are some dependencies which are not jar, but maybe pom, aar and others - make sure they work, too`() { - verify("kscript ${resolvePath("$projectDir/test/resources/depends_on_with_type.kts")}", 0, "getBigDecimal(1L): 1\n", any()) + verify( + "kscript ${projectPath / "test/resources/depends_on_with_type.kts"}", + 0, + "getBigDecimal(1L): 1\n", + any() + ) } @Test @Tag("posix") @Tag("windows") fun `Make sure that DependsOn is parsed correctly`() { - verify("kscript ${resolvePath("$projectDir/test/resources/depends_on_annot.kts")}", 0, "kscript with annotations rocks!\n", any()) + verify( + "kscript ${projectPath / "test/resources/depends_on_annot.kts"}", + 0, + "kscript with annotations rocks!\n", + any() + ) } @Test @Tag("posix") @Tag("windows") fun `Make sure that DependsOnMaven is parsed correctly`() { - verify("kscript ${resolvePath("$projectDir/test/resources/depends_on_maven_annot.kts")}", 0, "kscript with annotations rocks!\n", any()) + verify( + "kscript ${projectPath / "test/resources/depends_on_maven_annot.kts"}", + 0, + "kscript with annotations rocks!\n", + any() + ) } @Test @Tag("posix") @Tag("windows") fun `Make sure that dynamic versions are matched properly`() { - verify("kscript ${resolvePath("$projectDir/test/resources/depends_on_dynamic.kts")}", 0, "dynamic kscript rocks!\n", any()) + verify( + "kscript ${projectPath / "test/resources/depends_on_dynamic.kts"}", + 0, + "dynamic kscript rocks!\n", + any() + ) } @Test @@ -44,18 +63,18 @@ class AnnotationTest : TestBase { @Tag("windows") fun `Make sure that MavenRepository is parsed correctly`() { verify( - "kscript ${resolvePath("$projectDir/test/resources/custom_mvn_repo_annot.kts")}", + "kscript ${projectPath / "test/resources/custom_mvn_repo_annot.kts"}", 0, "kscript with annotations rocks!\n", startsWith("[kscript] Adding repository: Repository(id=, url=http://maven.imagej.net/content/repositories/releases, user=, password=)\n") ) verify( - "kscript ${resolvePath("$projectDir/test/resources/illegal_depends_on_arg.kts")}", + "kscript ${projectPath / "test/resources/illegal_depends_on_arg.kts"}", 1, "", "[kscript] [ERROR] Artifact locators must be provided as separate annotation arguments and not as comma-separated list: [com.squareup.moshi:moshi:1.5.0,com.squareup.moshi:moshi-adapters:1.5.0]\n\n" ) - verify("kscript $projectDir/test/resources/script_with_compile_flags.kts", 0, "hoo_ray\n", any()) + verify("kscript ${projectPath / "test/resources/script_with_compile_flags.kts"}", 0, " hoo_ray \n ", any()) } @Test @@ -68,7 +87,7 @@ class AnnotationTest : TestBase { } verify( - "kscript ${resolvePath("$projectDir/test/resources/depends_on_klaxon.kts")}", + "kscript ${projectPath / "test/resources/depends_on_klaxon.kts"}", 0, "Successfully resolved klaxon\n", startsWith("[kscript] Resolving com.beust:klaxon:5.5...\n") diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt index 065b56ee..c14c10f2 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt @@ -1,11 +1,10 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.contains -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.copyToTestPath -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath -import io.github.kscripting.kscript.integration.tools.TestContext.testDir +import io.github.kscripting.shell.integration.tools.TestAssertion.contains +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext +import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -16,14 +15,19 @@ class BootstrapHeaderTest : TestBase { //TODO: Doesn't work on msys and cygwin for some reason fun `Test adding bootstrap header`() { // ensure script works as is - val testFile = resolvePath("$testDir/echo_stdin_args.kts") + val testFile = testPath / "echo_stdin_args.kts" verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar\n") // add bootstrap header verify("kscript --add-bootstrap-header '$testFile'", 0, "", contains("echo_stdin_args.kts updated")) // ensure adding it again raises an error - verify("kscript --add-bootstrap-header '$testFile'", 1, "", startsWith("[kscript] [ERROR] Bootstrap header already detected:")) + verify( + "kscript --add-bootstrap-header '$testFile'", + 1, + "", + startsWith("[kscript] [ERROR] Bootstrap header already detected:") + ) // ensure scripts works with header, including stdin verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar\n") @@ -34,7 +38,7 @@ class BootstrapHeaderTest : TestBase { companion object { init { - copyToTestPath("test/resources/echo_stdin_args.kts") + TestContext.copyFile("test/resources/echo_stdin_args.kts", testPath) } } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt index 969285e6..e5f89632 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt @@ -1,7 +1,7 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt index 961e1729..be9761ce 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt @@ -1,9 +1,10 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestContext.copyToExecutablePath -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.copyFile +import io.github.kscripting.shell.integration.tools.TestContext.execPath +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -17,12 +18,12 @@ class CustomInterpretersTest : TestBase { @Test @Tag("posix") fun `Execute mydsl test with deps`() { - verify("$projectDir/test/resources/custom_dsl/mydsl_test_with_deps.kts", 0, "foobar\n", any()) + verify("$projectPath/test/resources/custom_dsl/mydsl_test_with_deps.kts", 0, "foobar\n", any()) } companion object { init { - copyToExecutablePath("test/resources/custom_dsl/mydsl") + copyFile("test/resources/custom_dsl/mydsl", execPath) } } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt index 08efd453..b7563050 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt @@ -1,10 +1,9 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.contains -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath +import io.github.kscripting.shell.integration.tools.TestAssertion.contains +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -14,7 +13,7 @@ class DeprecatedReportTest : TestBase { @Tag("windows") fun `Make sure that for deprecated features warn is generated`() { verify( - "kscript ${resolvePath("$projectDir/test/resources/deprecated_report.kt")}", + "kscript ${projectPath / "test/resources/deprecated_report.kt"}", 0, "made it!\n", startsWith("[kscript] [WARN] There are deprecated features in scripts. Use --report option to print full report.") @@ -26,7 +25,7 @@ class DeprecatedReportTest : TestBase { @Tag("windows") fun `Assert that report with deprecated features is generated`() { verify( - "kscript --report ${resolvePath("$projectDir/test/resources/deprecated_report.kt")}", + "kscript --report ${projectPath / "test/resources/deprecated_report.kt"}", 0, "", contains("@file:DependsOn(\"org.apache.commons:commons-lang3:3.12.0\")") diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt index 0d3ab77e..94cf11d6 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt @@ -1,7 +1,7 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -18,7 +18,7 @@ class EnvironmentTest : TestBase { @Test @Tag("posix") fun `Run script that tries to find out its own filename via environment variable`() { - val path = "$projectDir/test/resources/uses_self_file_name.kts" + val path = (projectPath / "test/resources/uses_self_file_name.kts").toString() verify(path, 0, "Usage: uses_self_file_name.kts [-ae] [--foo] file+\n") } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt index 66992a3e..2b81f8cd 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt @@ -1,10 +1,10 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.copyToExecutablePath -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.copyFile +import io.github.kscripting.shell.integration.tools.TestContext.execPath +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -14,7 +14,9 @@ class IdeaTest : TestBase { @Tag("macos") //TODO: On MSys and Cygwin test doesn't work, and is accomplished with timeout fun `Temp projects with include symlinks`() { - val result = verify("kscript --idea ${resolvePath("$projectDir/test/resources/includes/include_variations.kts")}", 0, any(), any()) + val result = verify( + "kscript --idea ${projectPath / "test/resources/includes/include_variations.kts"}", 0, any(), any() + ) val ideaDir = result.stderr.trim().lines().last().removePrefix("[kscript] ") verify("cd $ideaDir && gradle build", 0, any(), any()) } @@ -24,14 +26,15 @@ class IdeaTest : TestBase { @Tag("macos") //TODO: On MSys and Cygwin test doesn't work, and is accomplished with timeout fun `Support diamond-shaped include schemes (see #133)`() { - val result = verify("kscript --idea ${resolvePath("$projectDir/test/resources/includes/diamond.kts")}", 0, any(), any()) + val result = + verify("kscript --idea ${projectPath / "test/resources/includes/diamond.kts"}", 0, any(), any()) val ideaDir = result.stderr.trim().lines().last().removePrefix("[kscript] ") verify("cd $ideaDir && gradle build", 0, any(), any()) } companion object { init { - copyToExecutablePath("test/resources/idea") + copyFile("test/resources/idea", execPath) } } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt index dc895b11..2ac0cbb2 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt @@ -1,9 +1,8 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -11,14 +10,19 @@ class KtSupportTest : TestBase { @Test @Tag("posix") fun `Run kt via interpreter mode`() { - verify(resolvePath("$projectDir/test/resources/kt_tests/simple_app.kt").stringPath(), 0, "main was called\n", any()) + verify((projectPath / "test/resources/kt_tests/simple_app.kt").stringPath(), 0, "main was called\n", any()) } @Test @Tag("posix") @Tag("windows") fun `Run kt via interpreter mode with dependencies`() { - verify("kscript ${resolvePath("$projectDir/test/resources/kt_tests/main_with_deps.kt")}", 0, "made it!\n", "[kscript] Resolving log4j:log4j:1.2.14...\n") + verify( + "kscript ${projectPath / "test/resources/kt_tests/main_with_deps.kt"}", + 0, + "made it!\n", + "[kscript] Resolving log4j:log4j:1.2.14...\n" + ) } @Test @@ -28,21 +32,39 @@ class KtSupportTest : TestBase { @Tag("windows") //TODO: Additional new lines are in stdout for cygwin fun `Test misc entry point with or without package configurations (no cygwin)`() { - verify("kscript ${resolvePath("$projectDir/test/resources/kt_tests/default_entry_nopckg.kt")}", 0, "main was called\n", any()) - verify("kscript ${resolvePath("$projectDir/test/resources/kt_tests/default_entry_withpckg.kt")}", 0, "main was called\n", any()) + verify( + "kscript ${projectPath / "test/resources/kt_tests/default_entry_nopckg.kt"}", + 0, + "main was called\n", + any() + ) + verify( + "kscript ${projectPath / "test/resources/kt_tests/default_entry_withpckg.kt"}", + 0, + "main was called\n", + any() + ) } @Test @Tag("posix") @Tag("windows") fun `Test misc entry point with or without package configurations`() { - verify("kscript ${resolvePath("$projectDir/test/resources/kt_tests/custom_entry_nopckg.kt")}", 0, "foo companion was called\n") - verify("kscript ${resolvePath("$projectDir/test/resources/kt_tests/custom_entry_withpckg.kt")}", 0, "foo companion was called\n") + verify( + "kscript ${projectPath / "test/resources/kt_tests/custom_entry_nopckg.kt"}", + 0, + "foo companion was called\n" + ) + verify( + "kscript ${projectPath / "test/resources/kt_tests/custom_entry_withpckg.kt"}", + 0, + "foo companion was called\n" + ) } @Test @Tag("posix") fun `Also make sure that kts in package can be run via kscript`() { - verify(resolvePath("$projectDir/test/resources/script_in_pckg.kts").stringPath(), 0, "I live in a package!\n", any()) + verify((projectPath / "test/resources/script_in_pckg.kts").stringPath(), 0, "I live in a package!\n", any()) } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt index 30d53c79..c86c1fa9 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt @@ -1,11 +1,10 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.contains -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath -import io.github.kscripting.kscript.integration.tools.TestContext.testDir +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.contains +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath +import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -49,7 +48,7 @@ class MiscTest : TestBase { @Test @Tag("posix") fun `Prevent regression of #181`() { - verify("""echo "println(123)" > $testDir/123foo.kts; kscript $testDir/123foo.kts""", 0, "123\n") + verify("""echo "println(123)" > $testPath/123foo.kts; kscript $testPath/123foo.kts""", 0, "123\n") } @Test @@ -58,19 +57,19 @@ class MiscTest : TestBase { @Tag("msys") //TODO: @Tag("cygwin") - doesn't work on cygwin fun `Prevent regression of #185`() { - verify("source $projectDir/test/resources/home_dir_include.sh $testDir", 0, "42\n") + verify("source $projectPath/test/resources/home_dir_include.sh $testPath", 0, "42\n") } @Test @Tag("posix") fun `Prevent regression of #173`() { - verify("source $projectDir/test/resources/compiler_opts_with_includes.sh $testDir", 0, "hello42\n", any()) + verify("source $projectPath/test/resources/compiler_opts_with_includes.sh $testPath", 0, "hello42\n", any()) } @Test @Tag("posix") fun `Ensure relative includes with in shebang mode`() { - verify("$projectDir/test/resources/includes/shebang_mode_includes", 0, "include_1\n") + verify("$projectPath/test/resources/includes/shebang_mode_includes", 0, "include_1\n") } @Test @@ -78,19 +77,19 @@ class MiscTest : TestBase { @Tag("windows") fun `Ensure that compilation errors are not cached #349`() { //first run (not yet cached) - verify("kscript $projectDir/test/resources/invalid_script.kts", 1, "", contains("error: expecting ')'")) + verify("kscript $projectPath/test/resources/invalid_script.kts", 1, "", contains("error: expecting ')'")) //real test - verify("kscript $projectDir/test/resources/invalid_script.kts", 1, "", contains("error: expecting ')'")) + verify("kscript $projectPath/test/resources/invalid_script.kts", 1, "", contains("error: expecting ')'")) } @Test @Tag("posix") @Tag("windows") fun `Test local jar dir referenced in ENV variable`() { - val shellPath = resolvePath("$projectDir/test/resources/config/") + val shellPath = projectPath / "test/resources/config/" verify( - "kscript ${shellPath.resolve("script_with_local_jars.kts")}", + "kscript ${shellPath / "script_with_local_jars.kts"}", 0, "I am living in Test1 class...\nAnd I come from Test2 class...\n", "" diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt index f296e794..448b8f5e 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt @@ -1,10 +1,9 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -26,7 +25,7 @@ class PackagingTest : TestBase { //TODO: doesn't work on msys, cygwin, windows fun `Packaging of simple script`() { val result = - verify("kscript --package ${resolvePath("$projectDir/test/resources/package_example.kts")}", 0, "", any()) + verify("kscript --package ${projectPath / "test/resources/package_example.kts"}", 0, "", any()) val command = result.stderr.trim().lines().last().removePrefix("[kscript] ") verify("$command argument", 0, "package_me_args_1_mem_536870912\n") } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt index 790e9e0a..554f0027 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt @@ -1,9 +1,8 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.io.File @@ -15,7 +14,7 @@ class ResolverTest : TestBase { fun `It should run kscript and resolve dependencies`() { // The first time artifact resolution is started because the cache is cleaned... verify( - "kscript ${resolvePath("$projectDir/test/resources/depends_on_annot.kts")}", + "kscript ${projectPath / "test/resources/depends_on_annot.kts"}", 0, "kscript with annotations rocks!\n", startsWith("[kscript] Resolving log4j:log4j:1.2.14") @@ -32,7 +31,7 @@ class ResolverTest : TestBase { // The second time it is because of removing artifact from cache... verify( - "kscript ${resolvePath("$projectDir/test/resources/depends_on_annot.kts")}", + "kscript ${projectPath / "test/resources/depends_on_annot.kts"}", 0, "kscript with annotations rocks!\n", startsWith("[kscript] Resolving log4j:log4j:1.2.14") diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt index fbdaf2ac..ad011f8f 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt @@ -1,10 +1,9 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.projectDir -import io.github.kscripting.kscript.integration.tools.TestContext.resolvePath -import io.github.kscripting.kscript.integration.tools.TestContext.testDir +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.projectPath +import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -12,7 +11,7 @@ class ScriptInputModesTest : TestBase { @Test @Tag("posix") fun `Make sure that scripts can be piped into kscript`() { - verify("source $projectDir/test/resources/direct_script_arg.sh", 0, "kotlin rocks\n", "") + verify("source ${projectPath / "test/resources/direct_script_arg.sh"}", 0, "kotlin rocks\n", "") } @Test @@ -58,7 +57,7 @@ class ScriptInputModesTest : TestBase { @Test @Tag("posix") fun `Make sure that heredoc is accepted as argument`() { - verify("source ${projectDir}/test/resources/here_doc_test.sh", 0, "hello kotlin\n") + verify("source ${projectPath / "test/resources/here_doc_test.sh"}", 0, "hello kotlin\n") } @Test @@ -66,13 +65,13 @@ class ScriptInputModesTest : TestBase { @Tag("macos") //Command substitution doesn't work on msys and cygwin fun `Make sure that command substitution works as expected`() { - verify("source ${projectDir}/test/resources/cmd_subst_test.sh", 0, "command substitution works as well\n") + verify("source ${projectPath / "test/resources/cmd_subst_test.sh"}", 0, "command substitution works as well\n") } @Test @Tag("posix") fun `Make sure that it runs with local bash script files`() { - verify("source ${projectDir}/test/resources/local_script_file.sh $testDir", 0, "kscript rocks!\n") + verify("source ${projectPath / "test/resources/local_script_file.sh"} $testPath", 0, "kscript rocks!\n") } @Test @@ -80,7 +79,7 @@ class ScriptInputModesTest : TestBase { @Tag("windows") fun `Make sure that it runs with local script files`() { verify( - "kscript ${resolvePath("${projectDir}/test/resources/multi_line_deps.kts")}", + "kscript ${projectPath / "test/resources/multi_line_deps.kts"}", 0, "kscript is cool!\n", "[kscript] Resolving com.offbytwo:docopt:0.6.0.20150202...\n[kscript] Resolving log4j:log4j:1.2.14...\n" @@ -91,7 +90,7 @@ class ScriptInputModesTest : TestBase { @Tag("posix") @Tag("windows") fun `Scripts with dashes in the file name should work as well`() { - verify("kscript ${resolvePath("$projectDir/test/resources/dash-test.kts")}", 0, "dash alarm!\n") + verify("kscript ${projectPath / "test/resources/dash-test.kts"}", 0, "dash alarm!\n") } @Test @@ -99,7 +98,7 @@ class ScriptInputModesTest : TestBase { @Tag("windows") fun `Scripts with additional dots in the file name should work as well`() { //We also test inner uppercase letters in file name here by using .*T*est - verify("kscript ${resolvePath("$projectDir/test/resources/dot.Test.kts")}", 0, "dot alarm!\n") + verify("kscript ${projectPath / "test/resources/dot.Test.kts"}", 0, "dot alarm!\n") } @Test diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt index b489a674..36117a3d 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt @@ -1,8 +1,8 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.contains -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestAssertion.contains +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt index bb8525f2..1252271a 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt @@ -1,9 +1,9 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestAssertion.any -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.integration.tools.TestAssertion.verify -import io.github.kscripting.kscript.integration.tools.TestContext.nl +import io.github.kscripting.shell.integration.tools.TestAssertion.any +import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith +import io.github.kscripting.shell.integration.tools.TestAssertion.verify +import io.github.kscripting.shell.integration.tools.TestContext.nl import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt index 9c3ded3e..32969fbf 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt @@ -1,6 +1,8 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.kscript.integration.tools.TestContext +import io.github.kscripting.shell.integration.tools.TestContext +import io.github.kscripting.kscript.util.ShellUtils +import io.github.kscripting.shell.ShellExecutor import org.junit.jupiter.api.BeforeAll interface TestBase { @@ -8,9 +10,25 @@ interface TestBase { @BeforeAll @JvmStatic fun setUp() { - TestContext.clearCache() - TestContext.printPaths() + clearCache() + printPaths() println("[nl] - new line; [bs] - backspace") } + + //TODO: in kscript I have to call it in runProcess + //ShellUtils.environmentAdjuster(map) + + private fun printPaths() { + val kscriptPath = ShellUtils.which(TestContext.osType, "kscript", TestContext::adjustEnv) + println("kscript path: $kscriptPath") + val kotlincPath = ShellUtils.which(TestContext.osType, "kotlinc", TestContext::adjustEnv) + println("kotlinc path: $kotlincPath") + } + + private fun clearCache() { + print("Clearing kscript cache... ") + ShellExecutor.eval("kscript --clear-cache", TestContext.osType, null, TestContext::adjustEnv) + println("done.") + } } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestAssertion.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestAssertion.kt deleted file mode 100644 index fdc918e1..00000000 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestAssertion.kt +++ /dev/null @@ -1,56 +0,0 @@ -package io.github.kscripting.kscript.integration.tools - -import io.github.kscripting.kscript.integration.tools.TestContext.runProcess -import io.github.kscripting.shell.model.GobbledProcessResult -import io.github.kscripting.shell.process.EnvAdjuster - -object TestAssertion { - fun geq(value: T) = GenericEquals(value) - - fun any() = AnyMatch() - fun eq(string: String, ignoreCase: Boolean = false) = Equals(string, ignoreCase) - fun startsWith(string: String, ignoreCase: Boolean = false) = StartsWith(string, ignoreCase) - fun contains(string: String, ignoreCase: Boolean = false) = Contains(string, ignoreCase) - - fun verify( - command: String, - exitCode: Int = 0, - stdOut: TestMatcher, - stdErr: String = "", - envAdjuster: EnvAdjuster = {} - ): GobbledProcessResult = verify(command, exitCode, stdOut, eq(stdErr), envAdjuster) - - fun verify( - command: String, - exitCode: Int = 0, - stdOut: String, - stdErr: TestMatcher, - envAdjuster: EnvAdjuster = {} - ): GobbledProcessResult = verify(command, exitCode, eq(stdOut), stdErr, envAdjuster) - - fun verify( - command: String, - exitCode: Int = 0, - stdOut: String = "", - stdErr: String = "", - envAdjuster: EnvAdjuster = {} - ): GobbledProcessResult = verify(command, exitCode, eq(stdOut), eq(stdErr), envAdjuster) - - fun verify( - command: String, - exitCode: Int = 0, - stdOut: TestMatcher, - stdErr: TestMatcher, - envAdjuster: EnvAdjuster = {} - ): GobbledProcessResult { - val processResult = runProcess(command, envAdjuster) - val extCde = geq(exitCode) - - extCde.checkAssertion("ExitCode", processResult.exitCode) - stdOut.checkAssertion("StdOut", processResult.stdout) - stdErr.checkAssertion("StdErr", processResult.stderr) - println() - - return processResult - } -} diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestContext.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestContext.kt deleted file mode 100644 index d3c41529..00000000 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestContext.kt +++ /dev/null @@ -1,94 +0,0 @@ -package io.github.kscripting.kscript.integration.tools - -import io.github.kscripting.kscript.util.ShellUtils -import io.github.kscripting.kscript.util.ShellUtils.which -import io.github.kscripting.shell.ShellExecutor -import io.github.kscripting.shell.model.* -import io.github.kscripting.shell.process.EnvAdjuster - -object TestContext { - private val osType: OsType = OsType.findOrThrow(System.getProperty("osType")) - private val nativeType = if (osType.isPosixHostedOnWindows()) OsType.WINDOWS else osType - - private val projectPath: OsPath = OsPath.createOrThrow(nativeType, System.getProperty("projectPath")) - private val execPath: OsPath = projectPath.resolve("build/kscript/bin") - private val testPath: OsPath = projectPath.resolve("build/tmp/test") - private val pathEnvName = if (osType.isWindowsLike()) "Path" else "PATH" - private val systemPath: String = System.getenv()[pathEnvName]!! - - private val pathSeparator: String = if (osType.isWindowsLike() || osType.isPosixHostedOnWindows()) ";" else ":" - private val envPath: String = "${execPath.convert(osType)}$pathSeparator$systemPath" - - val nl: String = System.getProperty("line.separator") - val projectDir: String = projectPath.convert(osType).stringPath() - val testDir: String = testPath.convert(osType).stringPath() - - init { - println("osType : $osType") - println("nativeType : $nativeType") - println("projectDir : $projectDir") - println("testDir : $testDir") - println("execDir : ${execPath.convert(osType)}") - println("Kotlin version : ${ShellExecutor.evalAndGobble(osType, "kotlin -version", null, ::adjustEnv)}") - - testPath.createDirectories() - } - - fun resolvePath(path: String): OsPath { - return OsPath.createOrThrow(osType, path) - } - - fun runProcess(command: String, envAdjuster: EnvAdjuster): GobbledProcessResult { - //In MSYS all quotes should be single quotes, otherwise content is interpreted e.g. backslashes. - //(MSYS bash interpreter is also replacing double quotes into the single quotes: see: bash -xc 'kscript "println(1+1)"') - val newCommand = when { - osType.isPosixHostedOnWindows() -> command.replace('"', '\'') - else -> command - } - - fun internalEnvAdjuster(map: MutableMap) { - ShellUtils.environmentAdjuster(map) - map[pathEnvName] = envPath - envAdjuster(map) - } - - val result = ShellExecutor.evalAndGobble(osType, newCommand, null, ::internalEnvAdjuster) - println(result) - - return result - } - - fun copyToExecutablePath(source: String) { - val sourceFile = projectPath.resolve(source).toNativeFile() - val targetFile = execPath.resolve(sourceFile.name).toNativeFile() - - sourceFile.copyTo(targetFile, overwrite = true) - targetFile.setExecutable(true) - } - - fun copyToTestPath(source: String) { - val sourceFile = projectPath.resolve(source).toNativeFile() - val targetFile = testPath.resolve(sourceFile.name).toNativeFile() - - sourceFile.copyTo(targetFile, overwrite = true) - targetFile.setExecutable(true) //Needed if the file is kotlin script - } - - fun printPaths() { - val kscriptPath = which(osType, "kscript", ::adjustEnv) - println("kscript path: $kscriptPath") - val kotlincPath = which(osType, "kotlinc", ::adjustEnv) - println("kotlinc path: $kotlincPath") - } - - fun clearCache() { - print("Clearing kscript cache... ") - ShellExecutor.eval(osType, "kscript --clear-cache", null, ::adjustEnv) - println("done.") - } - - private fun adjustEnv(map: MutableMap) { - map[pathEnvName] = envPath - ShellUtils.environmentAdjuster(map) - } -} diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestMatcher.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestMatcher.kt deleted file mode 100644 index 4941aff7..00000000 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/tools/TestMatcher.kt +++ /dev/null @@ -1,49 +0,0 @@ -package io.github.kscripting.kscript.integration.tools - -import io.github.kscripting.kscript.integration.tools.TestContext.nl -import org.opentest4j.AssertionFailedError - -abstract class TestMatcher(protected val expectedValue: T, private val expressionName: String) { - abstract fun matches(value: T): Boolean - - fun checkAssertion(assertionName: String, value: T) { - if (matches(value)) { - return - } - - throw AssertionFailedError( - "$nl$nl$assertionName: expected that value '${ - whitespaceCharsToSymbols(value.toString()) - }' $expressionName '${ - whitespaceCharsToSymbols(expectedValue.toString()) - }'$nl$nl" - ) - } -} - -class GenericEquals(expectedValue: T) : TestMatcher(expectedValue, "is equal to") { - override fun matches(value: T): Boolean = (value == expectedValue) -} - -class AnyMatch : TestMatcher("", "has any value") { - override fun matches(value: String): Boolean = true -} - -class Equals(private val expectedString: String, private val ignoreCase: Boolean) : - TestMatcher(expectedString, "is equal to") { - override fun matches(value: String): Boolean = value.equals(normalize(expectedString), ignoreCase) -} - -class StartsWith(private val expectedString: String, private val ignoreCase: Boolean) : - TestMatcher(expectedString, "starts with") { - override fun matches(value: String): Boolean = value.startsWith(normalize(expectedString), ignoreCase) -} - -class Contains(private val expectedString: String, private val ignoreCase: Boolean) : - TestMatcher(expectedString, "contains") { - override fun matches(value: String): Boolean = value.contains(normalize(expectedString), ignoreCase) -} - -private fun normalize(string: String) = string.replace("\n", nl) - -private fun whitespaceCharsToSymbols(string: String): String = string.replace("\\", "[bs]").lines().joinToString("[nl]") diff --git a/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt b/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt index 44868e88..57c5137f 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt @@ -68,7 +68,7 @@ class ScriptResolver( val filePath = inputOutputResolver.tryToCreateShellFilePath(string) if (filePath != null) { - val scriptType = ScriptType.findByExtension(filePath.leaf) + val scriptType = ScriptType.findByExtension(filePath.leaf ?: "") if (inputOutputResolver.isReadable(filePath)) { if (scriptType != null) { From 13b714f41d3911d53c9bc527c2425527f6a36b28 Mon Sep 17 00:00:00 2001 From: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> Date: Sat, 24 Jun 2023 22:20:46 +0200 Subject: [PATCH 3/5] Updates to tests. Signed-off-by: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> --- .../kscript/integration/AnnotationTest.kt | 23 +++++------ .../integration/BootstrapHeaderTest.kt | 9 ++--- .../kscript/integration/CliReplTest.kt | 2 - .../integration/CustomInterpretersTest.kt | 6 +-- .../integration/DeprecatedReportTest.kt | 5 +-- .../kscript/integration/EnvironmentTest.kt | 5 +-- .../kscript/integration/IdeaTest.kt | 7 ++-- .../kscript/integration/KtSupportTest.kt | 18 ++++----- .../kscript/integration/MiscTest.kt | 15 +++----- .../kscript/integration/PackagingTest.kt | 12 +++--- .../kscript/integration/ResolverTest.kt | 6 +-- .../integration/ScriptInputModesTest.kt | 38 +++++++++---------- .../kscript/integration/SimpleTest.kt | 7 +--- .../kscript/integration/SupportApiTest.kt | 11 ++---- .../kscript/integration/TestBase.kt | 22 +++++++---- .../kscript/resolver/ScriptResolver.kt | 2 +- .../kscripting/kscript/util/Executor.kt | 2 +- .../kscripting/kscript/util/ShellUtils.kt | 2 +- .../kscript/code/GradleTemplatesTest.kt | 9 +++-- 19 files changed, 89 insertions(+), 112 deletions(-) diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt index b4277f8d..e87e84ab 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/AnnotationTest.kt @@ -1,8 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.apache.commons.io.FileUtils import org.junit.jupiter.api.Tag @@ -17,7 +14,7 @@ class AnnotationTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_with_type.kts"}", 0, - "getBigDecimal(1L): 1\n", + "getBigDecimal(1L): 1[nl]", any() ) } @@ -29,7 +26,7 @@ class AnnotationTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_annot.kts"}", 0, - "kscript with annotations rocks!\n", + "kscript with annotations rocks![nl]", any() ) } @@ -41,7 +38,7 @@ class AnnotationTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_maven_annot.kts"}", 0, - "kscript with annotations rocks!\n", + "kscript with annotations rocks![nl]", any() ) } @@ -53,7 +50,7 @@ class AnnotationTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_dynamic.kts"}", 0, - "dynamic kscript rocks!\n", + "dynamic kscript rocks![nl]", any() ) } @@ -65,16 +62,16 @@ class AnnotationTest : TestBase { verify( "kscript ${projectPath / "test/resources/custom_mvn_repo_annot.kts"}", 0, - "kscript with annotations rocks!\n", - startsWith("[kscript] Adding repository: Repository(id=, url=http://maven.imagej.net/content/repositories/releases, user=, password=)\n") + "kscript with annotations rocks![nl]", + startsWith("[kscript] Adding repository: Repository(id=, url=http://maven.imagej.net/content/repositories/releases, user=, password=)[nl]") ) verify( "kscript ${projectPath / "test/resources/illegal_depends_on_arg.kts"}", 1, "", - "[kscript] [ERROR] Artifact locators must be provided as separate annotation arguments and not as comma-separated list: [com.squareup.moshi:moshi:1.5.0,com.squareup.moshi:moshi-adapters:1.5.0]\n\n" + "[kscript] [ERROR] Artifact locators must be provided as separate annotation arguments and not as comma-separated list: [com.squareup.moshi:moshi:1.5.0,com.squareup.moshi:moshi-adapters:1.5.0][nl][nl]" ) - verify("kscript ${projectPath / "test/resources/script_with_compile_flags.kts"}", 0, " hoo_ray \n ", any()) + verify("kscript ${projectPath / "test/resources/script_with_compile_flags.kts"}", 0, "hoo_ray[nl]", any()) } @Test @@ -89,8 +86,8 @@ class AnnotationTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_klaxon.kts"}", 0, - "Successfully resolved klaxon\n", - startsWith("[kscript] Resolving com.beust:klaxon:5.5...\n") + "Successfully resolved klaxon[nl]", + startsWith("[kscript] Resolving com.beust:klaxon:5.5...[nl]") ) } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt index c14c10f2..8744108a 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/BootstrapHeaderTest.kt @@ -1,8 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.contains -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag @@ -16,7 +13,7 @@ class BootstrapHeaderTest : TestBase { fun `Test adding bootstrap header`() { // ensure script works as is val testFile = testPath / "echo_stdin_args.kts" - verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar\n") + verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar[nl]") // add bootstrap header verify("kscript --add-bootstrap-header '$testFile'", 0, "", contains("echo_stdin_args.kts updated")) @@ -30,10 +27,10 @@ class BootstrapHeaderTest : TestBase { ) // ensure scripts works with header, including stdin - verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar\n") + verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar[nl]") // ensure scripts works with header invoked with explicit `kscript` - verify("echo stdin | kscript '$testFile' --foo bar", 0, "stdin | script --foo bar\n") + verify("echo stdin | kscript '$testFile' --foo bar", 0, "stdin | script --foo bar[nl]") } companion object { diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt index e5f89632..7582c200 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/CliReplTest.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt index be9761ce..d5426107 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/CustomInterpretersTest.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.copyFile import io.github.kscripting.shell.integration.tools.TestContext.execPath import io.github.kscripting.shell.integration.tools.TestContext.projectPath @@ -12,13 +10,13 @@ class CustomInterpretersTest : TestBase { @Test @Tag("posix") fun `Execute mydsl as interpreter`() { - verify("mydsl \"println(foo)\"", 0, "bar\n", any()) + verify("mydsl \"println(foo)\"", 0, "bar[nl]", any()) } @Test @Tag("posix") fun `Execute mydsl test with deps`() { - verify("$projectPath/test/resources/custom_dsl/mydsl_test_with_deps.kts", 0, "foobar\n", any()) + verify((projectPath / "test/resources/custom_dsl/mydsl_test_with_deps.kts").stringPath(), 0, "foobar[nl]", any()) } companion object { diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt index b7563050..d2d055f1 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/DeprecatedReportTest.kt @@ -1,8 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.contains -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -15,7 +12,7 @@ class DeprecatedReportTest : TestBase { verify( "kscript ${projectPath / "test/resources/deprecated_report.kt"}", 0, - "made it!\n", + "made it![nl]", startsWith("[kscript] [WARN] There are deprecated features in scripts. Use --report option to print full report.") ) } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt index 94cf11d6..a023f2f6 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/EnvironmentTest.kt @@ -1,6 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -10,7 +9,7 @@ class EnvironmentTest : TestBase { @Tag("posix") @Tag("windows") fun `Make sure that KOTLIN_HOME can be guessed from kotlinc correctly`() { - verify("kscript \"println(99)\"", 0, "99\n") { env -> env.remove("KOTLIN_HOME") } + verify("kscript \"println(99)\"", 0, "99[nl]") { env -> env.remove("KOTLIN_HOME") } } //TODO: test what happens if kotlin/kotlinc/java/gradle/idea is not in PATH @@ -19,6 +18,6 @@ class EnvironmentTest : TestBase { @Tag("posix") fun `Run script that tries to find out its own filename via environment variable`() { val path = (projectPath / "test/resources/uses_self_file_name.kts").toString() - verify(path, 0, "Usage: uses_self_file_name.kts [-ae] [--foo] file+\n") + verify(path, 0, "Usage: uses_self_file_name.kts [-ae] [--foo] file+[nl]") } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt index 2b81f8cd..3feb85fe 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/IdeaTest.kt @@ -1,10 +1,9 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.copyFile import io.github.kscripting.shell.integration.tools.TestContext.execPath import io.github.kscripting.shell.integration.tools.TestContext.projectPath +import io.github.kscripting.shell.util.Sanitizer import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -15,7 +14,7 @@ class IdeaTest : TestBase { //TODO: On MSys and Cygwin test doesn't work, and is accomplished with timeout fun `Temp projects with include symlinks`() { val result = verify( - "kscript --idea ${projectPath / "test/resources/includes/include_variations.kts"}", 0, any(), any() + "kscript --idea ${projectPath / "test/resources/includes/include_variations.kts"}", 0, any(), any(), outputSanitizer = Sanitizer.EMPTY_SANITIZER ) val ideaDir = result.stderr.trim().lines().last().removePrefix("[kscript] ") verify("cd $ideaDir && gradle build", 0, any(), any()) @@ -27,7 +26,7 @@ class IdeaTest : TestBase { //TODO: On MSys and Cygwin test doesn't work, and is accomplished with timeout fun `Support diamond-shaped include schemes (see #133)`() { val result = - verify("kscript --idea ${projectPath / "test/resources/includes/diamond.kts"}", 0, any(), any()) + verify("kscript --idea ${projectPath / "test/resources/includes/diamond.kts"}", 0, any(), any(), outputSanitizer = Sanitizer.EMPTY_SANITIZER) val ideaDir = result.stderr.trim().lines().last().removePrefix("[kscript] ") verify("cd $ideaDir && gradle build", 0, any(), any()) } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt index 2ac0cbb2..45f6b093 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/KtSupportTest.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -10,7 +8,7 @@ class KtSupportTest : TestBase { @Test @Tag("posix") fun `Run kt via interpreter mode`() { - verify((projectPath / "test/resources/kt_tests/simple_app.kt").stringPath(), 0, "main was called\n", any()) + verify((projectPath / "test/resources/kt_tests/simple_app.kt").stringPath(), 0, "main was called[nl]", any()) } @Test @@ -20,8 +18,8 @@ class KtSupportTest : TestBase { verify( "kscript ${projectPath / "test/resources/kt_tests/main_with_deps.kt"}", 0, - "made it!\n", - "[kscript] Resolving log4j:log4j:1.2.14...\n" + "made it![nl]", + "[kscript] Resolving log4j:log4j:1.2.14...[nl]" ) } @@ -35,13 +33,13 @@ class KtSupportTest : TestBase { verify( "kscript ${projectPath / "test/resources/kt_tests/default_entry_nopckg.kt"}", 0, - "main was called\n", + "main was called[nl]", any() ) verify( "kscript ${projectPath / "test/resources/kt_tests/default_entry_withpckg.kt"}", 0, - "main was called\n", + "main was called[nl]", any() ) } @@ -53,18 +51,18 @@ class KtSupportTest : TestBase { verify( "kscript ${projectPath / "test/resources/kt_tests/custom_entry_nopckg.kt"}", 0, - "foo companion was called\n" + "foo companion was called[nl]" ) verify( "kscript ${projectPath / "test/resources/kt_tests/custom_entry_withpckg.kt"}", 0, - "foo companion was called\n" + "foo companion was called[nl]" ) } @Test @Tag("posix") fun `Also make sure that kts in package can be run via kscript`() { - verify((projectPath / "test/resources/script_in_pckg.kts").stringPath(), 0, "I live in a package!\n", any()) + verify((projectPath / "test/resources/script_in_pckg.kts").stringPath(), 0, "I live in a package![nl]", any()) } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt index c86c1fa9..a21626c2 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/MiscTest.kt @@ -1,8 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.contains -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag @@ -13,7 +10,7 @@ class MiscTest : TestBase { @Tag("posix") @Tag("windows") fun `Clearing cache test`() { - verify("kscript --clear-cache", 0, "", "Cleaning up cache...\n") + verify("kscript --clear-cache", 0, "", "Cleaning up cache...[nl]") } @Test @@ -48,7 +45,7 @@ class MiscTest : TestBase { @Test @Tag("posix") fun `Prevent regression of #181`() { - verify("""echo "println(123)" > $testPath/123foo.kts; kscript $testPath/123foo.kts""", 0, "123\n") + verify("""echo "println(123)" > $testPath/123foo.kts; kscript $testPath/123foo.kts""", 0, "123[nl]") } @Test @@ -57,19 +54,19 @@ class MiscTest : TestBase { @Tag("msys") //TODO: @Tag("cygwin") - doesn't work on cygwin fun `Prevent regression of #185`() { - verify("source $projectPath/test/resources/home_dir_include.sh $testPath", 0, "42\n") + verify("source $projectPath/test/resources/home_dir_include.sh $testPath", 0, "42[nl]") } @Test @Tag("posix") fun `Prevent regression of #173`() { - verify("source $projectPath/test/resources/compiler_opts_with_includes.sh $testPath", 0, "hello42\n", any()) + verify("source $projectPath/test/resources/compiler_opts_with_includes.sh $testPath", 0, "hello42[nl]", any()) } @Test @Tag("posix") fun `Ensure relative includes with in shebang mode`() { - verify("$projectPath/test/resources/includes/shebang_mode_includes", 0, "include_1\n") + verify("$projectPath/test/resources/includes/shebang_mode_includes", 0, "include_1[nl]") } @Test @@ -91,7 +88,7 @@ class MiscTest : TestBase { verify( "kscript ${shellPath / "script_with_local_jars.kts"}", 0, - "I am living in Test1 class...\nAnd I come from Test2 class...\n", + "I am living in Test1 class...[nl]And I come from Test2 class...[nl]", "" ) { env -> env["KSCRIPT_DIRECTORY_ARTIFACTS"] = shellPath.resolve("jars").stringPath() diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt index 448b8f5e..d8b00aa0 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/PackagingTest.kt @@ -1,9 +1,7 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath +import io.github.kscripting.shell.util.Sanitizer import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -25,9 +23,9 @@ class PackagingTest : TestBase { //TODO: doesn't work on msys, cygwin, windows fun `Packaging of simple script`() { val result = - verify("kscript --package ${projectPath / "test/resources/package_example.kts"}", 0, "", any()) + verify("kscript --package ${projectPath / "test/resources/package_example.kts"}", 0, "", any(), outputSanitizer = Sanitizer.EMPTY_SANITIZER) val command = result.stderr.trim().lines().last().removePrefix("[kscript] ") - verify("$command argument", 0, "package_me_args_1_mem_536870912\n") + verify("$command argument", 0, "package_me_args_1_mem_536870912[nl]") } @Test @@ -35,8 +33,8 @@ class PackagingTest : TestBase { @Tag("macos") //TODO: doesn't work on msys, cygwin, windows fun `Packaging provided source code and execution with arguments`() { - val result = verify("""kscript --package "println(args.size)"""", 0, "", any()) + val result = verify("""kscript --package "println(args.size)"""", 0, "", any(), outputSanitizer = Sanitizer.EMPTY_SANITIZER) val command = result.stderr.trim().lines().last().removePrefix("[kscript] ") - verify("$command three arg uments", 0, "3\n") + verify("$command three arg uments", 0, "3[nl]") } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt index 554f0027..c5a3c5ec 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/ResolverTest.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -16,7 +14,7 @@ class ResolverTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_annot.kts"}", 0, - "kscript with annotations rocks!\n", + "kscript with annotations rocks![nl]", startsWith("[kscript] Resolving log4j:log4j:1.2.14") ) @@ -33,7 +31,7 @@ class ResolverTest : TestBase { verify( "kscript ${projectPath / "test/resources/depends_on_annot.kts"}", 0, - "kscript with annotations rocks!\n", + "kscript with annotations rocks![nl]", startsWith("[kscript] Resolving log4j:log4j:1.2.14") ) } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt index ad011f8f..14977e82 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/ScriptInputModesTest.kt @@ -1,7 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.projectPath import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag @@ -11,7 +9,7 @@ class ScriptInputModesTest : TestBase { @Test @Tag("posix") fun `Make sure that scripts can be piped into kscript`() { - verify("source ${projectPath / "test/resources/direct_script_arg.sh"}", 0, "kotlin rocks\n", "") + verify("source ${projectPath / "test/resources/direct_script_arg.sh"}", 0, "kotlin rocks[nl]", "") } @Test @@ -25,7 +23,7 @@ class ScriptInputModesTest : TestBase { @Tag("posix") @Tag("windows") fun `Provide script as direct argument`() { - verify("""kscript "println(1+1)"""", 0, "2\n", "") + verify("""kscript "println(1+1)"""", 0, "2[nl]", "") } @Test @@ -34,30 +32,30 @@ class ScriptInputModesTest : TestBase { @Tag("windows") //TODO: Doesn't work on msys, cygwin as during test execution " is replaced with '. It causes syntax error in Kotlin. fun `Use dashed arguments`() { - verify("""kscript "println(args.joinToString(\"\"))" --arg u ments""", 0, "--arguments\n", "") + verify("""kscript "println(args.joinToString(\"\"))" --arg u ments""", 0, "--arguments[nl]", "") verify("""kscript -s "print(args.joinToString(\"\"))" --arg u ments""", 0, "--arguments", "") } @Test @Tag("posix") fun `Provide script via stidin`() { - verify("echo 'println(1+1)' | kscript -", 0, "2\n") + verify("echo 'println(1+1)' | kscript -", 0, "2[nl]") //stdin and further switch (to avoid regressions of #94) - verify("echo 'println(1+3)' | kscript - --foo", 0, "4\n") + verify("echo 'println(1+3)' | kscript - --foo", 0, "4[nl]") } @Test @Tag("windows") fun `Provide script via stidin (windows version without quotes)`() { - verify("echo println(1+1) | kscript -", 0, "2\n") + verify("echo println(1+1) | kscript -", 0, "2[nl]") //stdin and further switch (to avoid regressions of #94) - verify("echo println(1+3) | kscript - --foo", 0, "4\n") + verify("echo println(1+3) | kscript - --foo", 0, "4[nl]") } @Test @Tag("posix") fun `Make sure that heredoc is accepted as argument`() { - verify("source ${projectPath / "test/resources/here_doc_test.sh"}", 0, "hello kotlin\n") + verify("source ${projectPath / "test/resources/here_doc_test.sh"}", 0, "hello kotlin[nl]") } @Test @@ -65,13 +63,13 @@ class ScriptInputModesTest : TestBase { @Tag("macos") //Command substitution doesn't work on msys and cygwin fun `Make sure that command substitution works as expected`() { - verify("source ${projectPath / "test/resources/cmd_subst_test.sh"}", 0, "command substitution works as well\n") + verify("source ${projectPath / "test/resources/cmd_subst_test.sh"}", 0, "command substitution works as well[nl]") } @Test @Tag("posix") fun `Make sure that it runs with local bash script files`() { - verify("source ${projectPath / "test/resources/local_script_file.sh"} $testPath", 0, "kscript rocks!\n") + verify("source ${projectPath / "test/resources/local_script_file.sh"} $testPath", 0, "kscript rocks![nl]") } @Test @@ -81,8 +79,8 @@ class ScriptInputModesTest : TestBase { verify( "kscript ${projectPath / "test/resources/multi_line_deps.kts"}", 0, - "kscript is cool!\n", - "[kscript] Resolving com.offbytwo:docopt:0.6.0.20150202...\n[kscript] Resolving log4j:log4j:1.2.14...\n" + "kscript is cool![nl]", + "[kscript] Resolving com.offbytwo:docopt:0.6.0.20150202...[nl][kscript] Resolving log4j:log4j:1.2.14...[nl]" ) } @@ -90,7 +88,7 @@ class ScriptInputModesTest : TestBase { @Tag("posix") @Tag("windows") fun `Scripts with dashes in the file name should work as well`() { - verify("kscript ${projectPath / "test/resources/dash-test.kts"}", 0, "dash alarm!\n") + verify("kscript ${projectPath / "test/resources/dash-test.kts"}", 0, "dash alarm![nl]") } @Test @@ -98,7 +96,7 @@ class ScriptInputModesTest : TestBase { @Tag("windows") fun `Scripts with additional dots in the file name should work as well`() { //We also test inner uppercase letters in file name here by using .*T*est - verify("kscript ${projectPath / "test/resources/dot.Test.kts"}", 0, "dot alarm!\n") + verify("kscript ${projectPath / "test/resources/dot.Test.kts"}", 0, "dot alarm![nl]") } @Test @@ -107,9 +105,9 @@ class ScriptInputModesTest : TestBase { fun `Make sure that it runs with remote URLs`() { verify( "kscript https://raw.githubusercontent.com/kscripting/kscript/master/test/resources/url_test.kts", - 0, "I came from the internet\n", any() + 0, "I came from the internet[nl]", any() ) - verify("kscript https://git.io/fxHBv", 0, "main was called\n", any()) + verify("kscript https://git.io/fxHBv", 0, "main was called[nl]", any()) } @Test @@ -117,10 +115,10 @@ class ScriptInputModesTest : TestBase { @Tag("windows") fun `Missing script gives always error on execution`() { verify( - "kscript i_do_not_exist.kts", 1, "", "[kscript] [ERROR] Could not read script from 'i_do_not_exist.kts'\n\n" + "kscript i_do_not_exist.kts", 1, "", "[kscript] [ERROR] Could not read script from 'i_do_not_exist.kts'[nl][nl]" ) verify( - "kscript i_do_not_exist.kts", 1, "", "[kscript] [ERROR] Could not read script from 'i_do_not_exist.kts'\n\n" + "kscript i_do_not_exist.kts", 1, "", "[kscript] [ERROR] Could not read script from 'i_do_not_exist.kts'[nl][nl]" ) } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt index 36117a3d..140eeed3 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/SimpleTest.kt @@ -1,8 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.contains -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -11,14 +8,14 @@ class SimpleTest : TestBase { @Tag("posix") @Tag("windows") fun `Providing source code works`() { - verify("kscript \"println(1+1)\"", 0, "2\n") + verify("kscript \"println(1+1)\"", 0, "2[nl]") } @Test @Tag("posix") @Tag("windows") fun `Debugging information is printed`() { - verify("kscript -d \"println(1+1)\"", 0, "2\n", contains("Debugging information for KScript")) + verify("kscript -d \"println(1+1)\"", 0, "2[nl]", contains("Debugging information for KScript")) } @Test diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt index 1252271a..8ddaf7a5 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/SupportApiTest.kt @@ -1,8 +1,5 @@ package io.github.kscripting.kscript.integration -import io.github.kscripting.shell.integration.tools.TestAssertion.any -import io.github.kscripting.shell.integration.tools.TestAssertion.startsWith -import io.github.kscripting.shell.integration.tools.TestAssertion.verify import io.github.kscripting.shell.integration.tools.TestContext.nl import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -11,12 +8,12 @@ class SupportApiTest : TestBase { @Test @Tag("posix") fun `Make sure that one-liners include support-api`() { - verify("""echo "foo${nl}bar" | kscript -t "stdin.print()"""", 0, "foo\nbar\n", any()) - verify("""echo "foo${nl}bar" | kscript -t "lines.print()"""", 0, "foo\nbar\n", any()) - verify("""echo 'foo${nl}bar' | kscript -t 'lines.print()'""", 0, "foo\nbar\n", any()) + verify("""echo "foo${nl}bar" | kscript -t "stdin.print()"""", 0, "foo[nl]bar[nl]", any()) + verify("""echo "foo${nl}bar" | kscript -t "lines.print()"""", 0, "foo[nl]bar[nl]", any()) + verify("""echo 'foo${nl}bar' | kscript -t 'lines.print()'""", 0, "foo[nl]bar[nl]", any()) verify( """echo 'foo${nl}bar' | kscript -s --text 'lines.split().select(1,2,-3)'""", 1, "", - startsWith("[ERROR] Can not mix positive and negative selections\n") + startsWith("[ERROR] Can not mix positive and negative selections[nl]") ) } } diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt index 32969fbf..a3f0136c 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt @@ -3,10 +3,13 @@ package io.github.kscripting.kscript.integration import io.github.kscripting.shell.integration.tools.TestContext import io.github.kscripting.kscript.util.ShellUtils import io.github.kscripting.shell.ShellExecutor +import io.github.kscripting.shell.integration.tools.ShellTestBase +import io.github.kscripting.shell.integration.tools.ShellTestCompanionBase +import io.github.kscripting.shell.process.EnvAdjuster import org.junit.jupiter.api.BeforeAll -interface TestBase { - companion object { +interface TestBase : ShellTestBase { + companion object : ShellTestCompanionBase() { @BeforeAll @JvmStatic fun setUp() { @@ -15,19 +18,24 @@ interface TestBase { println("[nl] - new line; [bs] - backspace") } - //TODO: in kscript I have to call it in runProcess - //ShellUtils.environmentAdjuster(map) + override fun commonEnvAdjuster(specificEnvAdjuster: EnvAdjuster): EnvAdjuster { + return { map -> + map[TestContext.pathEnvName] = TestContext.envPath + specificEnvAdjuster(map) + ShellUtils.environmentAdjuster(map) + } + } private fun printPaths() { - val kscriptPath = ShellUtils.which(TestContext.osType, "kscript", TestContext::adjustEnv) + val kscriptPath = ShellUtils.which(TestContext.osType, "kscript", commonEnvAdjuster()) println("kscript path: $kscriptPath") - val kotlincPath = ShellUtils.which(TestContext.osType, "kotlinc", TestContext::adjustEnv) + val kotlincPath = ShellUtils.which(TestContext.osType, "kotlinc", commonEnvAdjuster()) println("kotlinc path: $kotlincPath") } private fun clearCache() { print("Clearing kscript cache... ") - ShellExecutor.eval("kscript --clear-cache", TestContext.osType, null, TestContext::adjustEnv) + ShellExecutor.eval("kscript --clear-cache", TestContext.osType, null, envAdjuster = commonEnvAdjuster()) println("done.") } } diff --git a/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt b/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt index 57c5137f..44868e88 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/resolver/ScriptResolver.kt @@ -68,7 +68,7 @@ class ScriptResolver( val filePath = inputOutputResolver.tryToCreateShellFilePath(string) if (filePath != null) { - val scriptType = ScriptType.findByExtension(filePath.leaf ?: "") + val scriptType = ScriptType.findByExtension(filePath.leaf) if (inputOutputResolver.isReadable(filePath)) { if (scriptType != null) { diff --git a/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt b/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt index 985faded..0d96ba80 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/util/Executor.kt @@ -17,7 +17,7 @@ class Executor(private val commandResolver: CommandResolver) { val command = commandResolver.getKotlinJreVersion() return ShellExecutor.evalAndGobble( - command, commandResolver.osConfig.osType, null, ShellUtils::environmentAdjuster + command, commandResolver.osConfig.osType, null, envAdjuster = ShellUtils::environmentAdjuster ).stdout } diff --git a/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt b/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt index 54534c3d..30361d23 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/util/ShellUtils.kt @@ -61,7 +61,7 @@ object ShellUtils { fun which(osType: OsType, command: String, envAdjuster: EnvAdjuster = {}): List = ShellExecutor.evalAndGobble( - "${if (osType == OsType.WINDOWS) "where" else "which"} $command", osType, null, envAdjuster + "${if (osType == OsType.WINDOWS) "where" else "which"} $command", osType, null, envAdjuster = envAdjuster ).stdout.trim().lines() fun isInPath(osType: OsType, command: String, envAdjuster: EnvAdjuster = {}): Boolean { diff --git a/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt b/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt index 5a0e8b07..9d0ed22d 100644 --- a/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt +++ b/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt @@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test import java.net.URI class GradleTemplatesTest { + private val kotlinVersion = KotlinVersion.CURRENT @Test fun `Create Idea script without any Gradle additions`() { @@ -36,7 +37,7 @@ class GradleTemplatesTest { assertThat(scriptText).isEqualTo( """ |plugins { - | id("org.jetbrains.kotlin.jvm") version "1.7.21" + | id("org.jetbrains.kotlin.jvm") version "$kotlinVersion" |} | |repositories { @@ -47,7 +48,7 @@ class GradleTemplatesTest { | |dependencies { | implementation("org.jetbrains.kotlin:kotlin-stdlib") - | implementation("org.jetbrains.kotlin:kotlin-script-runtime:1.7.21") + | implementation("org.jetbrains.kotlin:kotlin-script-runtime:$kotlinVersion") | implementation("io.github.kscripting:kscript-annotations:1.5.0") |} | @@ -87,7 +88,7 @@ class GradleTemplatesTest { assertThat(scriptText).isEqualTo( """ |plugins { - | id("org.jetbrains.kotlin.jvm") version "1.7.21" + | id("org.jetbrains.kotlin.jvm") version "$kotlinVersion" |} | |repositories { @@ -111,7 +112,7 @@ class GradleTemplatesTest { | |dependencies { | implementation("org.jetbrains.kotlin:kotlin-stdlib") - | implementation("org.jetbrains.kotlin:kotlin-script-runtime:1.7.21") + | implementation("org.jetbrains.kotlin:kotlin-script-runtime:$kotlinVersion") | implementation("io.github.kscripting:kscript-annotations:1.5.0") |} | From 4c4f8891fa98c819a32af35c75f2915b4c4b0ccd Mon Sep 17 00:00:00 2001 From: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> Date: Sat, 24 Jun 2023 23:37:37 +0200 Subject: [PATCH 4/5] Updates to tests. Signed-off-by: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> --- .../kotlin/io/github/kscripting/kscript/integration/TestBase.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt index a3f0136c..de2055bd 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt @@ -20,7 +20,7 @@ interface TestBase : ShellTestBase { override fun commonEnvAdjuster(specificEnvAdjuster: EnvAdjuster): EnvAdjuster { return { map -> - map[TestContext.pathEnvName] = TestContext.envPath + map[TestContext.pathEnvVariableName] = TestContext.pathEnvVariableCalculatedPath specificEnvAdjuster(map) ShellUtils.environmentAdjuster(map) } From 164f0b3638b61eb82b75146df39987fe21b42450 Mon Sep 17 00:00:00 2001 From: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:38:48 +0200 Subject: [PATCH 5/5] Use gradle wrapper for execution of tests Signed-off-by: Marcin Kuszczak <1508798+aartiPl@users.noreply.github.com> --- .github/workflows/build.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7e3d9bb4..491ba4c5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,11 +41,6 @@ jobs: with: version: 1.7.21 - - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - with: - gradle-version: 8.0.2 - - name: Install dependencies for ${{ runner.os }} shell: bash run: | @@ -64,23 +59,25 @@ jobs: echo "OsType: $OSTYPE" - gradle clean assemble test || { echo 'Compilation or Unit tests failed' ; exit 1; } + chmod +x ./gradlew + + ./gradlew clean assemble test || { echo 'Compilation or Unit tests failed' ; exit 1; } if [[ "$OSTYPE" == "linux"* ]]; then echo "Linux test..." - gradle -DosType=$OSTYPE -DincludeTags='posix | linux' integrationTest + ./gradlew -DosType=$OSTYPE -DincludeTags='posix | linux' integrationTest elif [[ "$OSTYPE" == "darwin"* ]]; then echo "MacOs test..." - gradle -DosType=$OSTYPE -DincludeTags='posix | macos' integrationTest + ./gradlew -DosType=$OSTYPE -DincludeTags='posix | macos' integrationTest elif [[ "$OSTYPE" == "cygwin" ]]; then echo "Cygwin test..." - gradle -DosType=$OSTYPE -DincludeTags='posix | cygwin' integrationTest + ./gradlew -DosType=$OSTYPE -DincludeTags='posix | cygwin' integrationTest elif [[ "$OSTYPE" == "msys" ]]; then echo "MSys test..." - gradle -DosType=$OSTYPE -DincludeTags='posix | msys' integrationTest + ./gradlew -DosType=$OSTYPE -DincludeTags='posix | msys' integrationTest elif [[ "$OSTYPE" == "freebsd"* ]]; then echo "FreeBsd test..." - gradle -DosType=$OSTYPE -DincludeTags='posix' integrationTest + ./gradlew -DosType=$OSTYPE -DincludeTags='posix' integrationTest else echo "Unknown OS" exit 1 @@ -91,7 +88,7 @@ jobs: shell: cmd run: | echo "Windows test..." - gradle -DosType=windows -DincludeTags="windows" clean assemble test integrationTest + .\gradlew -DosType=windows -DincludeTags="windows" clean assemble test integrationTest - name: Install Cygwin (only Windows) if: matrix.variant == 'cygwin' @@ -105,5 +102,5 @@ jobs: echo "Cygwin test..." echo "Changing directory to $GITHUB_WORKSPACE ..." cd $GITHUB_WORKSPACE - gradle clean assemble test || { echo 'Compilation or Unit tests failed' ; exit 1; } - gradle -DosType=$OSTYPE -DincludeTags='posix | cygwin' integrationTest + ./gradlew clean assemble test || { echo 'Compilation or Unit tests failed' ; exit 1; } + ./gradlew -DosType=$OSTYPE -DincludeTags='posix | cygwin' integrationTest