diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 23d15a54..b98a2918 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,7 +42,7 @@ jobs: version: 1.7.21 - name: Setup Gradle - uses: gradle/gradle-build-action@v2.4.2 + uses: gradle/gradle-build-action@v2 with: gradle-version: 8.0.2 @@ -64,23 +64,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 +93,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 +107,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 diff --git a/build.gradle.kts b/build.gradle.kts index 91893b3c..38e7862f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -303,7 +303,8 @@ 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("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..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,10 +1,6 @@ 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.TestContext.projectPath import org.apache.commons.io.FileUtils import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -15,28 +11,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[nl]", + 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![nl]", + 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![nl]", + 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![nl]", + any() + ) } @Test @@ -44,18 +60,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") + "kscript with annotations rocks![nl]", + startsWith("[kscript] Adding repository: Repository(id=, url=http://maven.imagej.net/content/repositories/releases, user=, password=)[nl]") ) 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" + "[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 $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[nl]", any()) } @Test @@ -68,10 +84,10 @@ 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") + "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 065b56ee..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,11 +1,7 @@ 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.TestContext +import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -16,25 +12,30 @@ 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") - verify("echo stdin | '$testFile' --foo bar", 0, "stdin | script --foo bar\n") + val testFile = testPath / "echo_stdin_args.kts" + 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")) // 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") + 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 { 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..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.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.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..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,9 +1,8 @@ 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.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 @@ -11,18 +10,18 @@ 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("$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").stringPath(), 0, "foobar[nl]", 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..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,10 +1,6 @@ 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.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -14,9 +10,9 @@ 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", + "made it![nl]", startsWith("[kscript] [WARN] There are deprecated features in scripts. Use --report option to print full report.") ) } @@ -26,7 +22,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..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,7 +1,6 @@ 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.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 @@ -18,7 +17,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" - verify(path, 0, "Usage: uses_self_file_name.kts [-ae] [--foo] file+\n") + val path = (projectPath / "test/resources/uses_self_file_name.kts").toString() + 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 66992a3e..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.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.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 @@ -14,7 +13,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(), outputSanitizer = Sanitizer.EMPTY_SANITIZER + ) val ideaDir = result.stderr.trim().lines().last().removePrefix("[kscript] ") verify("cd $ideaDir && gradle build", 0, any(), any()) } @@ -24,14 +25,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(), outputSanitizer = Sanitizer.EMPTY_SANITIZER) 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..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,9 +1,6 @@ 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.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -11,14 +8,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[nl]", 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![nl]", + "[kscript] Resolving log4j:log4j:1.2.14...[nl]" + ) } @Test @@ -28,21 +30,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[nl]", + any() + ) + verify( + "kscript ${projectPath / "test/resources/kt_tests/default_entry_withpckg.kt"}", + 0, + "main was called[nl]", + 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[nl]" + ) + verify( + "kscript ${projectPath / "test/resources/kt_tests/custom_entry_withpckg.kt"}", + 0, + "foo companion was called[nl]" + ) } @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![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 30d53c79..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,11 +1,7 @@ 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.TestContext.projectPath +import io.github.kscripting.shell.integration.tools.TestContext.testPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -14,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 @@ -49,7 +45,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[nl]") } @Test @@ -58,19 +54,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[nl]") } @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[nl]", 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[nl]") } @Test @@ -78,21 +74,21 @@ 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", + "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 f296e794..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,10 +1,7 @@ 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.TestContext.projectPath +import io.github.kscripting.shell.util.Sanitizer import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test @@ -26,9 +23,9 @@ 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(), 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 @@ -36,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 790e9e0a..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,9 +1,6 @@ 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.TestContext.projectPath import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test import java.io.File @@ -15,9 +12,9 @@ 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", + "kscript with annotations rocks![nl]", startsWith("[kscript] Resolving log4j:log4j:1.2.14") ) @@ -32,9 +29,9 @@ 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", + "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 fbdaf2ac..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,10 +1,7 @@ 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.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 +9,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[nl]", "") } @Test @@ -26,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 @@ -35,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 ${projectDir}/test/resources/here_doc_test.sh", 0, "hello kotlin\n") + verify("source ${projectPath / "test/resources/here_doc_test.sh"}", 0, "hello kotlin[nl]") } @Test @@ -66,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 ${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[nl]") } @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![nl]") } @Test @@ -80,10 +77,10 @@ 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" + "kscript is cool![nl]", + "[kscript] Resolving com.offbytwo:docopt:0.6.0.20150202...[nl][kscript] Resolving log4j:log4j:1.2.14...[nl]" ) } @@ -91,7 +88,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![nl]") } @Test @@ -99,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 ${resolvePath("$projectDir/test/resources/dot.Test.kts")}", 0, "dot alarm!\n") + verify("kscript ${projectPath / "test/resources/dot.Test.kts"}", 0, "dot alarm![nl]") } @Test @@ -108,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 @@ -118,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 b489a674..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.kscript.integration.tools.TestAssertion.contains -import io.github.kscripting.kscript.integration.tools.TestAssertion.startsWith -import io.github.kscripting.kscript.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 bb8525f2..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,9 +1,6 @@ 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.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 9c3ded3e..de2055bd 100644 --- a/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt +++ b/src/integration/kotlin/io/github/kscripting/kscript/integration/TestBase.kt @@ -1,16 +1,42 @@ 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 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() { - TestContext.clearCache() - TestContext.printPaths() + clearCache() + printPaths() println("[nl] - new line; [bs] - backspace") } + + override fun commonEnvAdjuster(specificEnvAdjuster: EnvAdjuster): EnvAdjuster { + return { map -> + map[TestContext.pathEnvVariableName] = TestContext.pathEnvVariableCalculatedPath + specificEnvAdjuster(map) + ShellUtils.environmentAdjuster(map) + } + } + + private fun printPaths() { + val kscriptPath = ShellUtils.which(TestContext.osType, "kscript", commonEnvAdjuster()) + println("kscript path: $kscriptPath") + 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, envAdjuster = commonEnvAdjuster()) + 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 <T : Any> 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<String>, - stdErr: String = "", - envAdjuster: EnvAdjuster = {} - ): GobbledProcessResult = verify(command, exitCode, stdOut, eq(stdErr), envAdjuster) - - fun verify( - command: String, - exitCode: Int = 0, - stdOut: String, - stdErr: TestMatcher<String>, - 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<String>, - stdErr: TestMatcher<String>, - 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<String, String>) { - 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<String, String>) { - 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<T>(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<T : Any>(expectedValue: T) : TestMatcher<T>(expectedValue, "is equal to") { - override fun matches(value: T): Boolean = (value == expectedValue) -} - -class AnyMatch : TestMatcher<String>("", "has any value") { - override fun matches(value: String): Boolean = true -} - -class Equals(private val expectedString: String, private val ignoreCase: Boolean) : - TestMatcher<String>(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<String>(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<String>(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/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 d64cfbea..5b35e60f 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 4813f9a2..b9d0fabb 100644 --- a/src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt +++ b/src/main/kotlin/io/github/kscripting/kscript/creator/JarArtifactCreator.kt @@ -3,6 +3,7 @@ package io.github.kscripting.kscript.creator import io.github.kscripting.kscript.code.Templates import io.github.kscripting.kscript.model.CompilerOpt 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.OsPath 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<Section>, 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..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,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, envAdjuster = 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..30361d23 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<String> = 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<String> = + ShellExecutor.evalAndGobble( + "${if (osType == OsType.WINDOWS) "where" else "which"} $command", osType, null, envAdjuster = 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..9d0ed22d 100644 --- a/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt +++ b/src/test/kotlin/io/github/kscripting/kscript/code/GradleTemplatesTest.kt @@ -3,13 +3,14 @@ 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 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") |} | 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 4a855231..4f590c9a 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