Fix SamWithReceiver tests for scripts, add tests...
that use new script definition and ability to load annotations from script definition
This commit is contained in:
@@ -17,7 +17,8 @@ dependencies {
|
|||||||
testCompile(project(":compiler:cli"))
|
testCompile(project(":compiler:cli"))
|
||||||
testCompile(projectTests(":compiler:tests-common"))
|
testCompile(projectTests(":compiler:tests-common"))
|
||||||
testCompile(commonDep("junit:junit"))
|
testCompile(commonDep("junit:junit"))
|
||||||
|
testCompileOnly(project(":kotlin-compiler"))
|
||||||
|
testCompile(project(":kotlin-scripting-jvm-host-unshaded"))
|
||||||
testRuntimeOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
testRuntimeOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||||
|
|
||||||
Platform[192].orHigher {
|
Platform[192].orHigher {
|
||||||
|
|||||||
+73
@@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2017 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.samWithReceiver
|
||||||
|
|
||||||
|
import com.intellij.mock.MockProject
|
||||||
|
import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
|
import org.jetbrains.kotlin.scripting.compiler.plugin.impl.ScriptJvmCompilerFromEnvironment
|
||||||
|
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||||
|
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||||
|
import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource
|
||||||
|
import org.junit.Assert
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.script.experimental.annotations.KotlinScript
|
||||||
|
import kotlin.script.experimental.api.ResultWithDiagnostics
|
||||||
|
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||||
|
import kotlin.script.experimental.api.compilerOptions
|
||||||
|
import kotlin.script.experimental.api.fileExtension
|
||||||
|
import kotlin.script.experimental.host.toScriptSource
|
||||||
|
import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration
|
||||||
|
import kotlin.script.experimental.jvmhost.createJvmScriptDefinitionFromTemplate
|
||||||
|
|
||||||
|
abstract class AbstractSamWithReceiverScriptNewDefTest : AbstractDiagnosticsTest() {
|
||||||
|
|
||||||
|
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
|
||||||
|
val def = ScriptDefinition.FromTemplate(
|
||||||
|
defaultJvmScriptingHostConfiguration,
|
||||||
|
ScriptForSamWithReceiversNewDef::class
|
||||||
|
)
|
||||||
|
environment.configuration.add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, def)
|
||||||
|
// need to make a single script compilation to process definition options before registering SamWithReceiver component
|
||||||
|
val scriptCompiler = ScriptJvmCompilerFromEnvironment(environment)
|
||||||
|
val res = scriptCompiler.compile("42".toScriptSource("\$init"), ScriptForSamWithReceiversNewDefCompilationConfiguration)
|
||||||
|
Assert.assertTrue(res is ResultWithDiagnostics.Success<*>)
|
||||||
|
SamWithReceiverComponentRegistrar().registerProjectComponents(environment.project as MockProject, environment.configuration)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun analyzeAndCheck(testDataFile: File, files: List<TestFile>) {
|
||||||
|
val definition = createJvmScriptDefinitionFromTemplate<ScriptForSamWithReceiversNewDef>()
|
||||||
|
val scriptCompiler = ScriptJvmCompilerFromEnvironment(environment)
|
||||||
|
val (scripts, regular) = files.partition {
|
||||||
|
it.ktFile?.virtualFile?.extension == definition.compilationConfiguration[ScriptCompilationConfiguration.fileExtension]
|
||||||
|
}
|
||||||
|
super.analyzeAndCheck(testDataFile, files)
|
||||||
|
for (file in scripts) {
|
||||||
|
val res = scriptCompiler.compile(KtFileScriptSource(file.ktFile!!), ScriptForSamWithReceiversNewDefCompilationConfiguration)
|
||||||
|
val x = res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@KotlinScript(compilationConfiguration = ScriptForSamWithReceiversNewDefCompilationConfiguration::class)
|
||||||
|
abstract class ScriptForSamWithReceiversNewDef
|
||||||
|
|
||||||
|
object ScriptForSamWithReceiversNewDefCompilationConfiguration : ScriptCompilationConfiguration(
|
||||||
|
{
|
||||||
|
compilerOptions("-P", "plugin:org.jetbrains.kotlin.samWithReceiver:annotation=SamWithReceiver1")
|
||||||
|
}
|
||||||
|
)
|
||||||
+2
-1
@@ -29,12 +29,13 @@ import kotlin.script.templates.ScriptTemplateDefinition
|
|||||||
abstract class AbstractSamWithReceiverScriptTest : AbstractDiagnosticsTest() {
|
abstract class AbstractSamWithReceiverScriptTest : AbstractDiagnosticsTest() {
|
||||||
|
|
||||||
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
|
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
|
||||||
StorageComponentContainerContributor.registerExtension(environment.project, CliSamWithReceiverComponentContributor(emptyList()))
|
|
||||||
val def = ScriptDefinition.FromLegacy(
|
val def = ScriptDefinition.FromLegacy(
|
||||||
defaultJvmScriptingHostConfiguration,
|
defaultJvmScriptingHostConfiguration,
|
||||||
KotlinScriptDefinitionFromAnnotatedTemplate(ScriptForSamWithReceivers::class, emptyMap())
|
KotlinScriptDefinitionFromAnnotatedTemplate(ScriptForSamWithReceivers::class, emptyMap())
|
||||||
)
|
)
|
||||||
environment.configuration.add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, def)
|
environment.configuration.add(ScriptingConfigurationKeys.SCRIPT_DEFINITIONS, def)
|
||||||
|
val anns = def.annotationsForSamWithReceivers
|
||||||
|
StorageComponentContainerContributor.registerExtension(environment.project, CliSamWithReceiverComponentContributor(anns))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 org.jetbrains.kotlin.samWithReceiver;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("plugins/sam-with-receiver/sam-with-receiver-cli/testData/script")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public class SamWithReceiverScriptNewDefTestGenerated extends AbstractSamWithReceiverScriptNewDefTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInScript() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/sam-with-receiver/sam-with-receiver-cli/testData/script"), Pattern.compile("^(.+)\\.kts$"), null, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("samConversionSimple.kts")
|
||||||
|
public void testSamConversionSimple() throws Exception {
|
||||||
|
runTest("plugins/sam-with-receiver/sam-with-receiver-cli/testData/script/samConversionSimple.kts");
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-4
@@ -1,4 +1,4 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE
|
// !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE,-UNUSED_ANONYMOUS_PARAMETER
|
||||||
|
|
||||||
// FILE: SamWithReceiver1.java
|
// FILE: SamWithReceiver1.java
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@@ -11,15 +11,19 @@ public @interface SamWithReceiver1 {
|
|||||||
// FILE: Sam.java
|
// FILE: Sam.java
|
||||||
@SamWithReceiver1
|
@SamWithReceiver1
|
||||||
public interface Sam {
|
public interface Sam {
|
||||||
void run(String a);
|
void run(String a, String b);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FILE: Exec.java
|
// FILE: Exec.java
|
||||||
public class Exec {
|
public class Exec {
|
||||||
void exec(Sam sam) {}
|
void exec(Sam sam) { sam.run("a", "b") }
|
||||||
}
|
}
|
||||||
|
|
||||||
// FILE: test.kts
|
// FILE: test.kts
|
||||||
val e = Exec()
|
val e = Exec()
|
||||||
|
|
||||||
e.exec { System.out.println(this) }
|
e.exec <!TYPE_MISMATCH!>{ <!EXPECTED_PARAMETERS_NUMBER_MISMATCH!>a, <!CANNOT_INFER_PARAMETER_TYPE!>b<!><!> -> System.out.println(a) }<!>
|
||||||
|
e.exec { b ->
|
||||||
|
val a: String = this
|
||||||
|
System.out.println(a)
|
||||||
|
}
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ public open class Exec {
|
|||||||
@SamWithReceiver1 public interface Sam {
|
@SamWithReceiver1 public interface Sam {
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public abstract fun run(/*0*/ a: kotlin.String!): kotlin.Unit
|
public abstract fun run(/*0*/ a: kotlin.String!, /*1*/ b: kotlin.String!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user