Add tests to check collection literals with varargs
This commit is contained in:
+42
@@ -0,0 +1,42 @@
|
||||
// WITH_REFLECT
|
||||
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
import java.util.Arrays
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.KFunction0
|
||||
|
||||
inline fun <reified T> test(kFunction: KFunction0<Unit>, test: T.() -> Unit) {
|
||||
val annotation = kFunction.annotations.single() as T
|
||||
annotation.test()
|
||||
}
|
||||
|
||||
fun check(b: Boolean, message: String) {
|
||||
if (!b) throw RuntimeException(message)
|
||||
}
|
||||
|
||||
@Suppress("UNSUPPORTED_FEATURE")
|
||||
annotation class Foo(vararg val a: String = ["a", "b"])
|
||||
|
||||
@Suppress("UNSUPPORTED_FEATURE")
|
||||
annotation class Bar(vararg val a: KClass<*> = [Int::class])
|
||||
|
||||
@Suppress("UNSUPPORTED_FEATURE")
|
||||
@Foo(*["/"])
|
||||
fun test1() {}
|
||||
|
||||
@Suppress("UNSUPPORTED_FEATURE")
|
||||
@Bar(*[Long::class, String::class])
|
||||
fun test2() {}
|
||||
|
||||
fun box(): String {
|
||||
test<Foo>(::test1) {
|
||||
check(a.contentEquals(arrayOf("/")), "Fail 1: ${a.joinToString()}")
|
||||
}
|
||||
|
||||
test<Bar>(::test2) {
|
||||
check(a.contentEquals(arrayOf(Long::class, String::class)), "Fail 2: ${a.joinToString()}")
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
// !LANGUAGE: +ArrayLiteralsInAnnotations
|
||||
|
||||
annotation class Ann1(vararg val a: String = [])
|
||||
annotation class Ann2(vararg val a: Int = [1, 2])
|
||||
annotation class Ann3(vararg val a: Float = [1f])
|
||||
annotation class Ann4(vararg val a: String = ["/"])
|
||||
|
||||
annotation class Ann5(vararg val a: Ann4 = [])
|
||||
annotation class Ann6(vararg val a: Ann4 = [Ann4(*["a", "b"])])
|
||||
|
||||
annotation class Ann7(vararg val a: Long = [1L, <!NULL_FOR_NONNULL_TYPE!>null<!>, <!TYPE_MISMATCH!>""<!>])
|
||||
|
||||
@Ann1(*[])
|
||||
fun test1_0() {}
|
||||
|
||||
@Ann1(*["a", "b"])
|
||||
fun test1_1() {}
|
||||
|
||||
@Ann1(*<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>["a", 1, <!ANNOTATION_PARAMETER_MUST_BE_CONST!>null<!>]<!>)
|
||||
fun test1_2() {}
|
||||
|
||||
@Ann2(*[])
|
||||
fun test2() {}
|
||||
|
||||
@Ann3(a = *[0f, <!DIVISION_BY_ZERO!>1 / 0f<!>])
|
||||
fun test3() {}
|
||||
|
||||
@Ann5(Ann4(*["/"]))
|
||||
fun test5() {}
|
||||
|
||||
@Ann6(*[])
|
||||
fun test6() {}
|
||||
|
||||
annotation class AnnArray(val a: Array<String>)
|
||||
|
||||
@AnnArray(<!NON_VARARG_SPREAD!>*<!>["/"])
|
||||
fun testArray() {}
|
||||
|
||||
@Ann1(<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, TYPE_MISMATCH!>[""]<!>)
|
||||
fun testVararg() {}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
package
|
||||
|
||||
@Ann1(a = {}) public fun test1_0(): kotlin.Unit
|
||||
@Ann1(a = {"a", "b"}) public fun test1_1(): kotlin.Unit
|
||||
@Ann1(a = {"a", 1, null}) public fun test1_2(): kotlin.Unit
|
||||
@Ann2(a = {}) public fun test2(): kotlin.Unit
|
||||
@Ann3(a = {0.0.toFloat(), Infinity.toFloat()}) public fun test3(): kotlin.Unit
|
||||
@Ann5(a = {Ann4(a = {"/"})}) public fun test5(): kotlin.Unit
|
||||
@Ann6(a = {}) public fun test6(): kotlin.Unit
|
||||
@AnnArray(a = {"/"}) public fun testArray(): kotlin.Unit
|
||||
@Ann1(a = {{""}}) public fun testVararg(): kotlin.Unit
|
||||
|
||||
public final annotation class Ann1 : kotlin.Annotation {
|
||||
public constructor Ann1(/*0*/ vararg a: kotlin.String /*kotlin.Array<out kotlin.String>*/ = ...)
|
||||
public final val a: kotlin.Array<out kotlin.String>
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class Ann2 : kotlin.Annotation {
|
||||
public constructor Ann2(/*0*/ vararg a: kotlin.Int /*kotlin.IntArray*/ = ...)
|
||||
public final val a: kotlin.IntArray
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class Ann3 : kotlin.Annotation {
|
||||
public constructor Ann3(/*0*/ vararg a: kotlin.Float /*kotlin.FloatArray*/ = ...)
|
||||
public final val a: kotlin.FloatArray
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class Ann4 : kotlin.Annotation {
|
||||
public constructor Ann4(/*0*/ vararg a: kotlin.String /*kotlin.Array<out kotlin.String>*/ = ...)
|
||||
public final val a: kotlin.Array<out kotlin.String>
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class Ann5 : kotlin.Annotation {
|
||||
public constructor Ann5(/*0*/ vararg a: Ann4 /*kotlin.Array<out Ann4>*/ = ...)
|
||||
public final val a: kotlin.Array<out Ann4>
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class Ann6 : kotlin.Annotation {
|
||||
public constructor Ann6(/*0*/ vararg a: Ann4 /*kotlin.Array<out Ann4>*/ = ...)
|
||||
public final val a: kotlin.Array<out Ann4>
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class Ann7 : kotlin.Annotation {
|
||||
public constructor Ann7(/*0*/ vararg a: kotlin.Long /*kotlin.LongArray*/ = ...)
|
||||
public final val a: kotlin.LongArray
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final annotation class AnnArray : kotlin.Annotation {
|
||||
public constructor AnnArray(/*0*/ a: kotlin.Array<kotlin.String>)
|
||||
public final val a: kotlin.Array<kotlin.String>
|
||||
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 toString(): kotlin.String
|
||||
}
|
||||
+6
@@ -3914,6 +3914,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("collectionLiteralsWithVarargs.kt")
|
||||
public void testCollectionLiteralsWithVarargs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultAnnotationParameterValues.kt")
|
||||
public void testDefaultAnnotationParameterValues() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/defaultAnnotationParameterValues.kt");
|
||||
|
||||
@@ -3364,6 +3364,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("collectionLiteralsWithVarargs.kt")
|
||||
public void testCollectionLiteralsWithVarargs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/collectionLiterals/collectionLiteralsWithVarargs.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultValuesInAnnotation.kt")
|
||||
public void testDefaultValuesInAnnotation() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/collectionLiterals/defaultValuesInAnnotation.kt");
|
||||
|
||||
@@ -3914,6 +3914,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("collectionLiteralsWithVarargs.kt")
|
||||
public void testCollectionLiteralsWithVarargs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultAnnotationParameterValues.kt")
|
||||
public void testDefaultAnnotationParameterValues() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/defaultAnnotationParameterValues.kt");
|
||||
|
||||
@@ -3914,6 +3914,12 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("collectionLiteralsWithVarargs.kt")
|
||||
public void testCollectionLiteralsWithVarargs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("defaultAnnotationParameterValues.kt")
|
||||
public void testDefaultAnnotationParameterValues() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/defaultAnnotationParameterValues.kt");
|
||||
|
||||
+12
@@ -4587,6 +4587,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
|
||||
}
|
||||
|
||||
@TestMetadata("collectionLiteralsWithVarargs.kt")
|
||||
public void testCollectionLiteralsWithVarargs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/collectionLiteralsWithVarargs.kt");
|
||||
try {
|
||||
doTest(fileName);
|
||||
}
|
||||
catch (Throwable ignore) {
|
||||
return;
|
||||
}
|
||||
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultAnnotationParameterValues.kt")
|
||||
public void testDefaultAnnotationParameterValues() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/collectionLiterals/defaultAnnotationParameterValues.kt");
|
||||
|
||||
Reference in New Issue
Block a user