Add test for script flag in kotlin.Metadata
It passes at the moment because the test uses old backend, but the required behavior is not yet supported in JVM IR, and it'll need to be fixed.
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
class RandomClass
|
||||
|
||||
println()
|
||||
+18
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.codegen.CompilationException
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
import org.jetbrains.kotlin.script.loadScriptingPlugin
|
||||
import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
|
||||
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
|
||||
@@ -86,6 +87,23 @@ class ScriptTest : TestCase() {
|
||||
assertEqualsTrimmed("[(1, a)]", out)
|
||||
}
|
||||
|
||||
fun testMetadataFlag() {
|
||||
// Test that we're writing the flag to [Metadata.extraInt] that distinguishes scripts from other classes.
|
||||
|
||||
fun Class<*>.isFlagSet(): Boolean {
|
||||
val metadata = annotations.single { it.annotationClass.java.name == Metadata::class.java.name }
|
||||
val extraInt = metadata.javaClass.methods.single { it.name == JvmAnnotationNames.METADATA_EXTRA_INT_FIELD_NAME }
|
||||
return (extraInt(metadata) as Int) and JvmAnnotationNames.METADATA_SCRIPT_FLAG != 0
|
||||
}
|
||||
|
||||
val scriptClass = compileScript("metadata_flag.kts", StandardScriptDefinition)!!
|
||||
assertTrue("Script class SHOULD have the metadata flag set", scriptClass.isFlagSet())
|
||||
assertFalse(
|
||||
"Non-script class in a script should NOT have the metadata flag set",
|
||||
scriptClass.classLoader.loadClass("Metadata_flag\$RandomClass").isFlagSet()
|
||||
)
|
||||
}
|
||||
|
||||
private fun compileScript(
|
||||
scriptPath: String,
|
||||
scriptDefinition: KotlinScriptDefinition,
|
||||
|
||||
Reference in New Issue
Block a user