From 08b77bc916371b468074265c51b5ec344995d863 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 14 Oct 2019 15:07:13 +0200 Subject: [PATCH] Implement tests to sam-with-receiver support in new scripting API plus minor tests refactoring --- .../experimental/jvmhost/test/CachingTest.kt | 15 ++---- .../experimental/jvmhost/test/FeaturesTest.kt | 54 +++++++++++++++++++ .../jvmhost/test/ScriptingHostTest.kt | 8 +-- .../experimental/jvmhost/test/commonUtil.kt | 21 ++++++++ .../testData/samWithReceiver/Exec.java | 3 ++ .../testData/samWithReceiver/Sam.java | 4 ++ .../samWithReceiver/SamWithReceiver1.java | 6 +++ .../testData/samWithReceiver/test.samwr.kts | 5 ++ 8 files changed, 97 insertions(+), 19 deletions(-) create mode 100644 libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/FeaturesTest.kt create mode 100644 libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/commonUtil.kt create mode 100644 libraries/scripting/jvm-host-test/testData/samWithReceiver/Exec.java create mode 100644 libraries/scripting/jvm-host-test/testData/samWithReceiver/Sam.java create mode 100644 libraries/scripting/jvm-host-test/testData/samWithReceiver/SamWithReceiver1.java create mode 100644 libraries/scripting/jvm-host-test/testData/samWithReceiver/test.samwr.kts diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/CachingTest.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/CachingTest.kt index 4b4182f681c..0ebd6fadf00 100644 --- a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/CachingTest.kt +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/CachingTest.kt @@ -12,16 +12,16 @@ import org.junit.Test import java.io.File import java.io.ObjectInputStream import java.io.ObjectOutputStream -import java.nio.file.Files import java.security.MessageDigest import kotlin.script.experimental.api.* import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.host.with import kotlin.script.experimental.jvm.* -import kotlin.script.experimental.jvm.BasicJvmScriptEvaluator import kotlin.script.experimental.jvm.impl.KJvmCompiledScript import kotlin.script.experimental.jvm.util.KotlinJars -import kotlin.script.experimental.jvmhost.* +import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost +import kotlin.script.experimental.jvmhost.CompiledScriptJarsCache +import kotlin.script.experimental.jvmhost.JvmScriptCompiler class CachingTest : TestCase() { @@ -260,12 +260,3 @@ private fun File.readCompiledScript(scriptCompilationConfiguration: ScriptCompil private fun ByteArray.toHexString(): String = joinToString("", transform = { "%02x".format(it) }) -private fun withTempDir(keyName: String = "tmp", body: (File) -> R) { - val tempDir = Files.createTempDirectory(keyName).toFile() - try { - body(tempDir) - } finally { - tempDir.deleteRecursively() - } -} - diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/FeaturesTest.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/FeaturesTest.kt new file mode 100644 index 00000000000..b06add30868 --- /dev/null +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/FeaturesTest.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package kotlin.script.experimental.jvmhost.test + +import junit.framework.TestCase +import kotlinx.coroutines.runBlocking +import org.jetbrains.kotlin.scripting.definitions.annotationsForSamWithReceivers +import org.jetbrains.kotlin.test.KotlinTestUtils +import java.io.File +import kotlin.script.experimental.api.* +import kotlin.script.experimental.host.toScriptSource +import kotlin.script.experimental.jvm.JvmDependency +import kotlin.script.experimental.jvmhost.JvmScriptCompiler + +class FeaturesTest : TestCase() { + + fun testSamWithReceiver() { + withTempDir { tempDir -> + runBlocking { + val srcDir = File(TEST_DATA_DIR, "samWithReceiver") + val destDir = File(tempDir, "dest").also { it.mkdir() } + val javaRes = KotlinTestUtils.compileJavaFiles( + srcDir.listFiles { file: File -> file.extension == "java" }!!.toMutableList(), + mutableListOf("-d", destDir.absolutePath) + ) + assertTrue(javaRes) + + val baseConfig = ScriptCompilationConfiguration { + fileExtension("samwr.kts") + dependencies(JvmDependency(destDir)) + } + + JvmScriptCompiler()(File(srcDir, "test.samwr.kts").toScriptSource(), baseConfig).let { res -> + when (res) { + is ResultWithDiagnostics.Success -> fail("Expecting \"Unresolved reference\" error, got successful compilation") + is ResultWithDiagnostics.Failure -> + if (res.reports.none { it.message.contains("Unresolved reference") }) { + fail("Expecting \"Unresolved reference\" error, got:\n ${res.reports.joinToString("\n ")}") + } + } + } + val configWithSwr = baseConfig.with { + annotationsForSamWithReceivers("SamWithReceiver1") + } + JvmScriptCompiler()(File(srcDir, "test.samwr.kts").toScriptSource(), configWithSwr).onFailure { res -> + fail("Compilation failed:\n ${res.reports.joinToString("\n ")}") + } + } + } + } +} \ No newline at end of file diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt index f2e7932cdd9..bfabd3e5889 100644 --- a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/ScriptingHostTest.kt @@ -27,9 +27,7 @@ import kotlin.script.experimental.host.BasicScriptingHost import kotlin.script.experimental.host.FileBasedScriptSource import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration -import kotlin.script.experimental.jvm.dependenciesFromCurrentContext import kotlin.script.experimental.jvm.impl.KJvmCompiledScript -import kotlin.script.experimental.jvm.jvm import kotlin.script.experimental.jvm.updateClasspath import kotlin.script.experimental.jvm.util.KotlinJars import kotlin.script.experimental.jvm.util.classpathFromClass @@ -38,10 +36,6 @@ import kotlin.script.templates.standard.SimpleScriptTemplate class ScriptingHostTest : TestCase() { - companion object { - const val TEST_DATA_DIR = "libraries/scripting/jvm-host-test/testData" - } - @Test fun testSimpleUsage() { val greeting = "Hello from script!" @@ -461,7 +455,7 @@ internal fun ScriptCompilationConfiguration.Builder.makeSimpleConfigurationWithT updateClasspath(classpathFromClass()) // the lambda below should be in the classpath refineConfiguration { beforeCompiling { ctx -> - val importedScript = File(ScriptingHostTest.TEST_DATA_DIR, "importTest/helloWithVal.kts") + val importedScript = File(TEST_DATA_DIR, "importTest/helloWithVal.kts") if ((ctx.script as? FileBasedScriptSource)?.file?.canonicalFile == importedScript.canonicalFile) { ctx.compilationConfiguration } else { diff --git a/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/commonUtil.kt b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/commonUtil.kt new file mode 100644 index 00000000000..ba61b6aeb4b --- /dev/null +++ b/libraries/scripting/jvm-host-test/test/kotlin/script/experimental/jvmhost/test/commonUtil.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package kotlin.script.experimental.jvmhost.test + +import java.io.File +import java.nio.file.Files + +internal const val TEST_DATA_DIR = "libraries/scripting/jvm-host-test/testData" + +internal fun withTempDir(keyName: String = "tmp", body: (File) -> R) { + val tempDir = Files.createTempDirectory(keyName).toFile() + try { + body(tempDir) + } finally { + tempDir.deleteRecursively() + } +} + diff --git a/libraries/scripting/jvm-host-test/testData/samWithReceiver/Exec.java b/libraries/scripting/jvm-host-test/testData/samWithReceiver/Exec.java new file mode 100644 index 00000000000..ddb85631dc2 --- /dev/null +++ b/libraries/scripting/jvm-host-test/testData/samWithReceiver/Exec.java @@ -0,0 +1,3 @@ +public class Exec { + void exec(Sam sam) {} +} diff --git a/libraries/scripting/jvm-host-test/testData/samWithReceiver/Sam.java b/libraries/scripting/jvm-host-test/testData/samWithReceiver/Sam.java new file mode 100644 index 00000000000..90bee9e8ba0 --- /dev/null +++ b/libraries/scripting/jvm-host-test/testData/samWithReceiver/Sam.java @@ -0,0 +1,4 @@ +@SamWithReceiver1 +public interface Sam { + void run(String a); +} diff --git a/libraries/scripting/jvm-host-test/testData/samWithReceiver/SamWithReceiver1.java b/libraries/scripting/jvm-host-test/testData/samWithReceiver/SamWithReceiver1.java new file mode 100644 index 00000000000..baff2d201e2 --- /dev/null +++ b/libraries/scripting/jvm-host-test/testData/samWithReceiver/SamWithReceiver1.java @@ -0,0 +1,6 @@ +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface SamWithReceiver1 { +} \ No newline at end of file diff --git a/libraries/scripting/jvm-host-test/testData/samWithReceiver/test.samwr.kts b/libraries/scripting/jvm-host-test/testData/samWithReceiver/test.samwr.kts new file mode 100644 index 00000000000..8e9762b43c6 --- /dev/null +++ b/libraries/scripting/jvm-host-test/testData/samWithReceiver/test.samwr.kts @@ -0,0 +1,5 @@ +val e = Exec() + +e.exec { + this.substring(1) +}