Add tests to check collection literals with varargs

This commit is contained in:
Mikhail Zarechenskiy
2017-03-27 16:23:48 +03:00
parent ae2b4f5ff2
commit b46205f60b
8 changed files with 193 additions and 0 deletions
@@ -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"
}
@@ -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() {}
@@ -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
}
@@ -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");
@@ -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");