[Spec tests] Fix test cases structure
This commit is contained in:
+52
-16
@@ -11,9 +11,10 @@
|
|||||||
* DESCRIPTION: Abstract classes may contain one or more abstract members, which should be implemented in a subtype of this abstract class
|
* DESCRIPTION: Abstract classes may contain one or more abstract members, which should be implemented in a subtype of this abstract class
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// FILE: TestCase1.kt
|
||||||
|
// TESTCASE NUMBER:1
|
||||||
<!REDUNDANT_MODIFIER!>open<!> abstract class Base {
|
package testPackCase1
|
||||||
|
<!REDUNDANT_MODIFIER!>open<!> abstract class Base {
|
||||||
|
|
||||||
abstract val a: Any
|
abstract val a: Any
|
||||||
abstract var b: Any
|
abstract var b: Any
|
||||||
@@ -24,22 +25,34 @@
|
|||||||
abstract fun foo()
|
abstract fun foo()
|
||||||
internal abstract fun boo(): Any
|
internal abstract fun boo(): Any
|
||||||
}
|
}
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
val impl = BaseImplCase2(1, "1", 1.0)
|
val impl = BaseImplCase1(1, "1", 1.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
class BaseImplCase2(
|
class BaseImplCase1(
|
||||||
override var a: Any, override
|
override var a: Any, override
|
||||||
<!VAR_OVERRIDDEN_BY_VAL!>val<!> b: Any, override var c: Any, override
|
<!VAR_OVERRIDDEN_BY_VAL!>val<!> b: Any, override var c: Any, override
|
||||||
|
|
||||||
<!VAR_OVERRIDDEN_BY_VAL!>val<!> d: Any = "5") : Base()
|
<!VAR_OVERRIDDEN_BY_VAL!>val<!> d: Any = "5") : Base()
|
||||||
{
|
{
|
||||||
override fun foo() {}
|
override fun foo() {}
|
||||||
override internal fun boo() {}
|
override internal fun boo() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase2.kt
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
package testPackCase2
|
||||||
|
<!REDUNDANT_MODIFIER!>open<!> abstract class Base {
|
||||||
|
|
||||||
|
abstract val a: Any
|
||||||
|
abstract var b: Any
|
||||||
|
internal abstract val c: Any
|
||||||
|
internal abstract var d: Any
|
||||||
|
|
||||||
|
|
||||||
|
abstract fun foo()
|
||||||
|
internal abstract fun boo(): Any
|
||||||
|
}
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
val impl = ImplBaseCase2()
|
val impl = ImplBaseCase2()
|
||||||
@@ -68,10 +81,22 @@ class ImplBaseCase2() : Base() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// FILE: TestCase.kt
|
||||||
* TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
* NOTE: property is not implemented
|
|
||||||
*/
|
package testPackCase3
|
||||||
|
<!REDUNDANT_MODIFIER!>open<!> abstract class Base {
|
||||||
|
|
||||||
|
abstract val a: Any
|
||||||
|
abstract var b: Any
|
||||||
|
internal abstract val c: Any
|
||||||
|
internal abstract var d: Any
|
||||||
|
|
||||||
|
|
||||||
|
abstract fun foo()
|
||||||
|
internal abstract fun boo(): Any
|
||||||
|
}
|
||||||
|
|
||||||
fun case3() {
|
fun case3() {
|
||||||
ImplBaseCase3()
|
ImplBaseCase3()
|
||||||
}
|
}
|
||||||
@@ -95,10 +120,21 @@ fun case3() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// FILE: TestCase.kt
|
||||||
* TESTCASE NUMBER: 4
|
// TESTCASE NUMBER: 4
|
||||||
* NOTE: function is not implemented
|
package testPackCase4
|
||||||
*/
|
<!REDUNDANT_MODIFIER!>open<!> abstract class Base {
|
||||||
|
|
||||||
|
abstract val a: Any
|
||||||
|
abstract var b: Any
|
||||||
|
internal abstract val c: Any
|
||||||
|
internal abstract var d: Any
|
||||||
|
|
||||||
|
|
||||||
|
abstract fun foo()
|
||||||
|
internal abstract fun boo(): Any
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fun case4() {
|
fun case4() {
|
||||||
ImplBaseCase4()
|
ImplBaseCase4()
|
||||||
@@ -125,4 +161,4 @@ fun case4() {
|
|||||||
* TESTCASE NUMBER: 5
|
* TESTCASE NUMBER: 5
|
||||||
* NOTE: incompatible modifiers final and abstract
|
* NOTE: incompatible modifiers final and abstract
|
||||||
*/
|
*/
|
||||||
<!INCOMPATIBLE_MODIFIERS!>final<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> class Case5() {}
|
<!INCOMPATIBLE_MODIFIERS!>final<!> <!INCOMPATIBLE_MODIFIERS!>abstract<!> class Case5() {}
|
||||||
+35
-9
@@ -11,7 +11,9 @@
|
|||||||
* DESCRIPTION: Abstract classes may contain abstract members, which should be implemented in an anonymous class that inherits from that abstract type
|
* DESCRIPTION: Abstract classes may contain abstract members, which should be implemented in an anonymous class that inherits from that abstract type
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
|
package testPackCase1
|
||||||
private abstract class Base {
|
private abstract class Base {
|
||||||
|
|
||||||
abstract val a: Any
|
abstract val a: Any
|
||||||
@@ -24,7 +26,6 @@ private abstract class Base {
|
|||||||
internal abstract fun boo(): Any
|
internal abstract fun boo(): Any
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
val impl = object : Base() {
|
val impl = object : Base() {
|
||||||
override var a: Any
|
override var a: Any
|
||||||
@@ -47,11 +48,26 @@ fun case1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
/*
|
/*
|
||||||
* TESTCASE NUMBER: 2
|
* TESTCASE NUMBER: 2
|
||||||
* NOTE: property is not implemented
|
* NOTE: property is not implemented
|
||||||
*/
|
*/
|
||||||
|
package testPackCase2
|
||||||
|
private abstract class Base {
|
||||||
|
|
||||||
|
abstract val a: Any
|
||||||
|
abstract var b: Any
|
||||||
|
internal abstract val c: Any
|
||||||
|
internal abstract var d: Any
|
||||||
|
|
||||||
|
|
||||||
|
abstract fun foo()
|
||||||
|
internal abstract fun boo(): Any
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
val impl = <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>object<!> : Base() {
|
val impl = <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>object<!> : Base() {
|
||||||
override var b: Any
|
override var b: Any
|
||||||
@@ -74,10 +90,20 @@ fun case2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
// FILE: TestCase.kt
|
||||||
* TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
* NOTE: function is not implemented
|
package testPackCase3
|
||||||
*/
|
private abstract class Base {
|
||||||
|
|
||||||
|
abstract val a: Any
|
||||||
|
abstract var b: Any
|
||||||
|
internal abstract val c: Any
|
||||||
|
internal abstract var d: Any
|
||||||
|
|
||||||
|
|
||||||
|
abstract fun foo()
|
||||||
|
internal abstract fun boo(): Any
|
||||||
|
}
|
||||||
|
|
||||||
fun case3() {
|
fun case3() {
|
||||||
val impl = <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>object<!> : Base() {
|
val impl = <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>object<!> : Base() {
|
||||||
|
|||||||
+22
-7
@@ -11,7 +11,9 @@
|
|||||||
* DESCRIPTION: attempt to implement abstract members with invalid types
|
* DESCRIPTION: attempt to implement abstract members with invalid types
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
|
package testPackCase1
|
||||||
abstract class Base {
|
abstract class Base {
|
||||||
abstract val a: CharSequence
|
abstract val a: CharSequence
|
||||||
abstract var b: CharSequence
|
abstract var b: CharSequence
|
||||||
@@ -34,9 +36,16 @@ class Case1 : Base() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TESTCASE NUMBER: 2
|
// FILE: TestCase.kt
|
||||||
*/
|
// TESTCASE NUMBER: 2
|
||||||
|
package testPackCase2
|
||||||
|
abstract class Base {
|
||||||
|
abstract val a: CharSequence
|
||||||
|
abstract var b: CharSequence
|
||||||
|
|
||||||
|
abstract fun foo(): CharSequence
|
||||||
|
}
|
||||||
|
|
||||||
class Case2(override val a: String, override var b: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>String<!>) : Base() {
|
class Case2(override val a: String, override var b: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>String<!>) : Base() {
|
||||||
override fun foo(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>CharSequence?<!> {
|
override fun foo(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>CharSequence?<!> {
|
||||||
@@ -44,10 +53,16 @@ class Case2(override val a: String, override var b: <!VAR_TYPE_MISMATCH_ON_OVERR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// FILE: TestCase.kt
|
||||||
* TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
* NOTE: abstract nested class members are not implemented
|
package testPackCase3
|
||||||
*/
|
abstract class Base {
|
||||||
|
abstract val a: CharSequence
|
||||||
|
abstract var b: CharSequence
|
||||||
|
|
||||||
|
abstract fun foo(): CharSequence
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class Case3 {
|
class Case3 {
|
||||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class ImplBase1<!> : MainClass.Base1() {}
|
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class ImplBase1<!> : MainClass.Base1() {}
|
||||||
|
|||||||
+3
-3
@@ -64,7 +64,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"specVersion": "0.1-213",
|
"specVersion": "0.1-213",
|
||||||
"casesNumber": 1,
|
"casesNumber": 3,
|
||||||
"description": "Abstract classes may contain abstract members, which should be implemented in an anonymous class that inherits from that abstract type",
|
"description": "Abstract classes may contain abstract members, which should be implemented in an anonymous class that inherits from that abstract type",
|
||||||
"path": "compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.2.kt",
|
"path": "compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.2.kt",
|
||||||
"unexpectedBehaviour": false,
|
"unexpectedBehaviour": false,
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"specVersion": "0.1-213",
|
"specVersion": "0.1-213",
|
||||||
"casesNumber": 1,
|
"casesNumber": 3,
|
||||||
"description": "attempt to implement abstract members with invalid types",
|
"description": "attempt to implement abstract members with invalid types",
|
||||||
"path": "compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.3.kt",
|
"path": "compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.3.kt",
|
||||||
"unexpectedBehaviour": false,
|
"unexpectedBehaviour": false,
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"specVersion": "0.1-213",
|
"specVersion": "0.1-213",
|
||||||
"casesNumber": 2,
|
"casesNumber": 4,
|
||||||
"description": "Abstract classes may contain one or more abstract members, which should be implemented in a subtype of this abstract class",
|
"description": "Abstract classes may contain one or more abstract members, which should be implemented in a subtype of this abstract class",
|
||||||
"path": "compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.1.kt",
|
"path": "compiler/tests-spec/testData/diagnostics/linked/declarations/classifier-declaration/class-declaration/abstract-classes/p-2/neg/1.1.kt",
|
||||||
"unexpectedBehaviour": false,
|
"unexpectedBehaviour": false,
|
||||||
|
|||||||
+5
-4
@@ -11,12 +11,11 @@
|
|||||||
* DESCRIPTION: check the type of jump expressions is Nothing and code placed on the left side of expression will never be executed
|
* DESCRIPTION: check the type of jump expressions is Nothing and code placed on the left side of expression will never be executed
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
var name: Any? = null
|
var name: Any? = null
|
||||||
val men = arrayListOf(Person("Phill"), Person(), Person("Bob"))
|
val men = arrayListOf(Person1("Phill"), Person1(), Person1("Bob"))
|
||||||
for (k in men) {
|
for (k in men) {
|
||||||
k.name
|
k.name
|
||||||
loop@ for (i in men) {
|
loop@ for (i in men) {
|
||||||
@@ -31,13 +30,13 @@ fun case1() {
|
|||||||
val a = 1
|
val a = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
class Person(var name: String? = null) {}
|
class Person1(var name: String? = null) {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
var name: Any? = null
|
var name: Any? = null
|
||||||
val men = arrayListOf(Person("Phill"), Person(), Person("Bob"))
|
val men = arrayListOf(Person2("Phill"), Person2(), Person2("Bob"))
|
||||||
for (k in men) {
|
for (k in men) {
|
||||||
loop@ for (i in men) {
|
loop@ for (i in men) {
|
||||||
i.name
|
i.name
|
||||||
@@ -51,6 +50,8 @@ fun case2() {
|
|||||||
val a = 1
|
val a = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Person2(var name: String? = null) {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
|
|
||||||
fun case3() {
|
fun case3() {
|
||||||
|
|||||||
+6
-2
@@ -42,11 +42,11 @@ fun case2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
interface Processable<T> {
|
interface ProcessableCase3<T> {
|
||||||
fun process(): T
|
fun process(): T
|
||||||
}
|
}
|
||||||
|
|
||||||
class Processor : Processable<Unit> {
|
class Processor : ProcessableCase3<Unit> {
|
||||||
override fun process() {
|
override fun process() {
|
||||||
val proc = "case 3"
|
val proc = "case 3"
|
||||||
}
|
}
|
||||||
@@ -58,6 +58,10 @@ fun case3() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 4
|
// TESTCASE NUMBER: 4
|
||||||
|
interface Processable<T> {
|
||||||
|
fun process(): T
|
||||||
|
}
|
||||||
|
|
||||||
fun case4() {
|
fun case4() {
|
||||||
val p2 = object : Processable<Unit> {
|
val p2 = object : Processable<Unit> {
|
||||||
override fun process() {
|
override fun process() {
|
||||||
|
|||||||
Vendored
+41
-15
@@ -14,28 +14,38 @@
|
|||||||
* HELPERS: checkType
|
* HELPERS: checkType
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class A(val a: Int) {
|
|
||||||
var isCompared = false
|
|
||||||
operator fun compareTo(other: A): Int = run {
|
|
||||||
isCompared = true
|
|
||||||
this.a - other.a
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
fun case1() {
|
fun case1() {
|
||||||
val a1 = A(-1)
|
val a1 = A1(-1)
|
||||||
val a2 = A(-3)
|
val a2 = A1(-3)
|
||||||
|
|
||||||
val x = a1 < a2
|
val x = a1 < a2
|
||||||
|
|
||||||
x checkType { check<Boolean>() }
|
x checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class A1(val a: Int) {
|
||||||
|
var isCompared = false
|
||||||
|
operator fun compareTo(other: A1): Int = run {
|
||||||
|
isCompared = true
|
||||||
|
this.a - other.a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
class A2(val a: Int) {
|
||||||
|
var isCompared = false
|
||||||
|
operator fun compareTo(other: A2): Int = run {
|
||||||
|
isCompared = true
|
||||||
|
this.a - other.a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
val a1 = A(-1)
|
val a1 = A2(-1)
|
||||||
val a2 = A(-3)
|
val a2 = A2(-3)
|
||||||
|
|
||||||
val x = a1 > a2
|
val x = a1 > a2
|
||||||
|
|
||||||
@@ -44,20 +54,36 @@ fun case2() {
|
|||||||
|
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
fun case3() {
|
fun case3() {
|
||||||
val a1 = A(-1)
|
val a1 = A3(-1)
|
||||||
val a2 = A(-3)
|
val a2 = A3(-3)
|
||||||
|
|
||||||
val x = a1 <= a2
|
val x = a1 <= a2
|
||||||
|
|
||||||
x checkType { check<Boolean>() }
|
x checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class A3(val a: Int) {
|
||||||
|
var isCompared = false
|
||||||
|
operator fun compareTo(other: A3): Int = run {
|
||||||
|
isCompared = true
|
||||||
|
this.a - other.a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 4
|
// TESTCASE NUMBER: 4
|
||||||
fun case4() {
|
fun case4() {
|
||||||
val a1 = A(-1)
|
val a1 = A4(-1)
|
||||||
val a2 = A(-3)
|
val a2 = A4(-3)
|
||||||
|
|
||||||
val x = a1 >= a2
|
val x = a1 >= a2
|
||||||
|
|
||||||
x checkType { check<Boolean>() }
|
x checkType { check<Boolean>() }
|
||||||
|
}
|
||||||
|
|
||||||
|
class A4(val a: Int) {
|
||||||
|
var isCompared = false
|
||||||
|
operator fun compareTo(other: A4): Int = run {
|
||||||
|
isCompared = true
|
||||||
|
this.a - other.a
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+7
@@ -13,6 +13,8 @@
|
|||||||
* HELPERS: checkType
|
* HELPERS: checkType
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// FILE: TestCases.kt
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
@@ -59,7 +61,12 @@ interface `true`{}
|
|||||||
interface `false`{}
|
interface `false`{}
|
||||||
|
|
||||||
|
|
||||||
|
// FILE: TestCase7.kt
|
||||||
// TESTCASE NUMBER: 7
|
// TESTCASE NUMBER: 7
|
||||||
|
package testPackCase7c
|
||||||
|
|
||||||
|
interface `true`{}
|
||||||
|
interface `false`{}
|
||||||
|
|
||||||
fun case7() {
|
fun case7() {
|
||||||
class `true` : `false`{}
|
class `true` : `false`{}
|
||||||
|
|||||||
+5
-2
@@ -13,7 +13,6 @@
|
|||||||
* DESCRIPTION: Value equality expressions always have type kotlin.Boolean as does the equals method in kotlin.Any
|
* DESCRIPTION: Value equality expressions always have type kotlin.Boolean as does the equals method in kotlin.Any
|
||||||
* HELPERS: checkType
|
* HELPERS: checkType
|
||||||
*/
|
*/
|
||||||
data class A(val a: Boolean)
|
|
||||||
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
@@ -22,12 +21,16 @@ fun case1() {
|
|||||||
x checkType { check<Boolean>() }
|
x checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class A(val a: Boolean)
|
||||||
|
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
fun case2() {
|
fun case2() {
|
||||||
val x = A(false) == A(false)
|
val x = A1(false) == A1(false)
|
||||||
x checkType { check<Boolean>() }
|
x checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class A1(val a: Boolean)
|
||||||
|
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
fun case3() {
|
fun case3() {
|
||||||
val x = true == false
|
val x = true == false
|
||||||
|
|||||||
Vendored
+5
-2
@@ -12,6 +12,8 @@
|
|||||||
* DESCRIPTION: check he type of jump expressions is the kotlin.Nothing
|
* DESCRIPTION: check he type of jump expressions is the kotlin.Nothing
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
@@ -27,14 +29,13 @@ fun case1() {
|
|||||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>s<!>
|
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>s<!>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Person(var name: String? = null) {}
|
class Person(var name: String? = null) {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
var name: Any? = null
|
var name: Any? = null
|
||||||
val men = arrayListOf(Person("Phill"), Person(), Person("Bob"))
|
val men = arrayListOf(Person2("Phill"), Person2(), Person2("Bob"))
|
||||||
for (k in men) {
|
for (k in men) {
|
||||||
loop@ for (i in men) {
|
loop@ for (i in men) {
|
||||||
val val1 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Nothing")!>continue@loop<!>
|
val val1 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Nothing")!>continue@loop<!>
|
||||||
@@ -45,6 +46,8 @@ fun case2() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Person2(var name: String? = null) {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
|
|
||||||
fun case3() {
|
fun case3() {
|
||||||
|
|||||||
+19
-8
@@ -11,14 +11,7 @@
|
|||||||
* NUMBER: 1
|
* NUMBER: 1
|
||||||
* DESCRIPTION: check unsafe prefix decrement expression call for an assignable expression
|
* DESCRIPTION: check unsafe prefix decrement expression call for an assignable expression
|
||||||
*/
|
*/
|
||||||
class A() {
|
|
||||||
var i = 0
|
|
||||||
|
|
||||||
operator fun dec(): A {
|
|
||||||
this.i--
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
|
|
||||||
@@ -32,6 +25,15 @@ class Case1() {
|
|||||||
var a: A = A()
|
var a: A = A()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class A() {
|
||||||
|
var i = 0
|
||||||
|
|
||||||
|
operator fun dec(): A {
|
||||||
|
this.i--
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
@@ -40,5 +42,14 @@ fun case2() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Case2() {
|
class Case2() {
|
||||||
val a = A()
|
val a = A2()
|
||||||
|
}
|
||||||
|
|
||||||
|
class A2() {
|
||||||
|
var i = 0
|
||||||
|
|
||||||
|
operator fun dec(): A2 {
|
||||||
|
this.i--
|
||||||
|
return this
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+17
-2
@@ -11,6 +11,12 @@
|
|||||||
* NUMBER: 1
|
* NUMBER: 1
|
||||||
* DESCRIPTION: check unsafe prefix increment expression call for an assignable expression
|
* DESCRIPTION: check unsafe prefix increment expression call for an assignable expression
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
|
// TESTCASE NUMBER: 1
|
||||||
|
package testPackCase1
|
||||||
|
|
||||||
class A() {
|
class A() {
|
||||||
var i = 0
|
var i = 0
|
||||||
|
|
||||||
@@ -20,8 +26,6 @@ class A() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
var b: Case1? = Case1()
|
var b: Case1? = Case1()
|
||||||
<!UNSAFE_CALL!>++<!>b?.a
|
<!UNSAFE_CALL!>++<!>b?.a
|
||||||
@@ -32,7 +36,18 @@ class Case1() {
|
|||||||
var a: A = A()
|
var a: A = A()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
package testPackCase2
|
||||||
|
|
||||||
|
class A() {
|
||||||
|
var i = 0
|
||||||
|
|
||||||
|
operator fun inc(): A {
|
||||||
|
this.i++
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
var b= Case2()
|
var b= Case2()
|
||||||
|
|||||||
+37
-7
@@ -11,15 +11,22 @@
|
|||||||
* NUMBER: 1
|
* NUMBER: 1
|
||||||
* DESCRIPTION: The type of the try-expression is the least upper bound of the types of the last expressions of the try body and the last expressions of all the catch blocks
|
* DESCRIPTION: The type of the try-expression is the least upper bound of the types of the last expressions of the try body and the last expressions of all the catch blocks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
|
// TESTCASE NUMBER: 1
|
||||||
|
package testPackCase1
|
||||||
|
|
||||||
fun throwExceptionA(b: Boolean) = run { if (b) throw ExcA() }
|
fun throwExceptionA(b: Boolean) = run { if (b) throw ExcA() }
|
||||||
|
|
||||||
|
class ExcA() : Exception()
|
||||||
|
class ExcB() : Exception()
|
||||||
|
|
||||||
open class A<T>(var data: T) {
|
open class A<T>(var data: T) {
|
||||||
fun foo(d: A<T>) {}
|
fun foo(d: A<T>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class B<T>(data: T) : A<T>(data)
|
class B<T>(data: T) : A<T>(data)
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
val tryVal: B<String> =
|
val tryVal: B<String> =
|
||||||
@@ -29,11 +36,24 @@ fun case1() {
|
|||||||
}<!> catch (e: Exception) {
|
}<!> catch (e: Exception) {
|
||||||
B("")
|
B("")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
package testPackCase2
|
||||||
|
|
||||||
|
fun throwExceptionA(b: Boolean) = run { if (b) throw ExcA() }
|
||||||
|
|
||||||
|
class ExcA() : Exception()
|
||||||
|
class ExcB() : Exception()
|
||||||
|
|
||||||
|
open class A<T>(var data: T) {
|
||||||
|
fun foo(d: A<T>) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B<T>(data: T) : A<T>(data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
val tryVal: A<String> =
|
val tryVal: A<String> =
|
||||||
@@ -45,10 +65,20 @@ fun case2() {
|
|||||||
}<!>
|
}<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* TESTCASE NUMBER: 3
|
// FILE: TestCase.kt
|
||||||
* ISSUES: KT-35494
|
// TESTCASE NUMBER: 3
|
||||||
*/
|
// ISSUES: KT-35494
|
||||||
|
package testPackCase3
|
||||||
|
|
||||||
|
fun throwExceptionA(b: Boolean) = run { if (b) throw ExcA() }
|
||||||
|
|
||||||
|
open class A<T>(var data: T) {
|
||||||
|
fun foo(d: A<T>) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B<T>(data: T) : A<T>(data)
|
||||||
|
|
||||||
fun case3() {
|
fun case3() {
|
||||||
val tryVal: A<Int> =
|
val tryVal: A<Int> =
|
||||||
try {
|
try {
|
||||||
|
|||||||
+64
-1
@@ -13,6 +13,13 @@
|
|||||||
* HELPERS: checkType
|
* HELPERS: checkType
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
|
// TESTCASE NUMBER: 1
|
||||||
|
package testPackCase1
|
||||||
|
import checkType
|
||||||
|
import check
|
||||||
|
|
||||||
class A(val a: Set<Any>) {
|
class A(val a: Set<Any>) {
|
||||||
operator fun contains(other: Any?): Boolean = run { this.a.contains(other) }
|
operator fun contains(other: Any?): Boolean = run { this.a.contains(other) }
|
||||||
|
|
||||||
@@ -27,7 +34,6 @@ class C() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
||||||
val c = C()
|
val c = C()
|
||||||
@@ -35,14 +41,52 @@ fun case1() {
|
|||||||
a checkType { check<Boolean>() }
|
a checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
package testPackCase2
|
||||||
|
import checkType
|
||||||
|
import check
|
||||||
|
|
||||||
|
class A(val a: Set<Any>) {
|
||||||
|
operator fun contains(other: Any?): Boolean = run { this.a.contains(other) }
|
||||||
|
|
||||||
|
fun throwException(b: Boolean): A { if (b) throw Exception() else return this }
|
||||||
|
}
|
||||||
|
|
||||||
|
class C() {
|
||||||
|
var isEvaluated: Boolean = false
|
||||||
|
fun foo(): C {
|
||||||
|
this.isEvaluated = true
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun case2() {
|
fun case2() {
|
||||||
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
||||||
val a = (null in b)
|
val a = (null in b)
|
||||||
a checkType { check<Boolean>() }
|
a checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
|
package testPackCase3
|
||||||
|
import checkType
|
||||||
|
import check
|
||||||
|
|
||||||
|
class A(val a: Set<Any>) {
|
||||||
|
operator fun contains(other: Any?): Boolean = run { this.a.contains(other) }
|
||||||
|
|
||||||
|
fun throwException(b: Boolean): A { if (b) throw Exception() else return this }
|
||||||
|
}
|
||||||
|
|
||||||
|
class C() {
|
||||||
|
var isEvaluated: Boolean = false
|
||||||
|
fun foo(): C {
|
||||||
|
this.isEvaluated = true
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun case3() {
|
fun case3() {
|
||||||
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
||||||
val x = ""
|
val x = ""
|
||||||
@@ -50,7 +94,26 @@ fun case3() {
|
|||||||
a checkType { check<Boolean>() }
|
a checkType { check<Boolean>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase.kt
|
||||||
// TESTCASE NUMBER: 4
|
// TESTCASE NUMBER: 4
|
||||||
|
package testPackCase4
|
||||||
|
import checkType
|
||||||
|
import check
|
||||||
|
|
||||||
|
class A(val a: Set<Any>) {
|
||||||
|
operator fun contains(other: Any?): Boolean = run { this.a.contains(other) }
|
||||||
|
|
||||||
|
fun throwException(b: Boolean): A { if (b) throw Exception() else return this }
|
||||||
|
}
|
||||||
|
|
||||||
|
class C() {
|
||||||
|
var isEvaluated: Boolean = false
|
||||||
|
fun foo(): C {
|
||||||
|
this.isEvaluated = true
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun case4(nothing: Nothing) {
|
fun case4(nothing: Nothing) {
|
||||||
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
val b = A(mutableSetOf(1, C(), 3, false, 2, "azaza"))
|
||||||
val a = (nothing in b)
|
val a = (nothing in b)
|
||||||
|
|||||||
+6
-6
@@ -15,6 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// TESTCASE NUMBER: 1
|
||||||
|
fun case1() {
|
||||||
|
var b = B(1)
|
||||||
|
b <!ASSIGN_OPERATOR_AMBIGUITY!>+=<!> 1
|
||||||
|
}
|
||||||
|
|
||||||
class B(var a: Int) {
|
class B(var a: Int) {
|
||||||
operator fun plus(value: Int): B {
|
operator fun plus(value: Int): B {
|
||||||
a= a + value
|
a= a + value
|
||||||
@@ -24,9 +30,3 @@ class B(var a: Int) {
|
|||||||
a= a + value
|
a= a + value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
fun case1() {
|
|
||||||
var b = B(1)
|
|
||||||
b <!ASSIGN_OPERATOR_AMBIGUITY!>+=<!> 1
|
|
||||||
}
|
|
||||||
+5
-6
@@ -15,6 +15,11 @@
|
|||||||
* DESCRIPTION: An operator assignment A+=B
|
* DESCRIPTION: An operator assignment A+=B
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TESTCASE NUMBER: 1
|
||||||
|
fun case1() {
|
||||||
|
val b = B(1)
|
||||||
|
b += 1
|
||||||
|
}
|
||||||
|
|
||||||
class B(var a: Int) {
|
class B(var a: Int) {
|
||||||
operator fun plus(value: Int): B {
|
operator fun plus(value: Int): B {
|
||||||
@@ -24,10 +29,4 @@ class B(var a: Int) {
|
|||||||
operator fun plusAssign(value: Int): Unit {
|
operator fun plusAssign(value: Int): Unit {
|
||||||
a= a + value
|
a= a + value
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
fun case1() {
|
|
||||||
val b = B(1)
|
|
||||||
b += 1
|
|
||||||
}
|
}
|
||||||
+13
-3
@@ -16,14 +16,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// FILE: TestCase1.kt
|
||||||
|
// TESTCASE NUMBER: 1
|
||||||
|
package testPackCase1
|
||||||
|
import checkSubtype
|
||||||
class NothingWrapper() {
|
class NothingWrapper() {
|
||||||
val data: Nothing = TODO()
|
val data: Nothing = TODO()
|
||||||
}
|
}
|
||||||
|
|
||||||
class CustomClass() {}
|
class CustomClass() {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
fun case1() {
|
fun case1() {
|
||||||
val wrapper: NothingWrapper = NothingWrapper()
|
val wrapper: NothingWrapper = NothingWrapper()
|
||||||
checkSubtype<Any>(wrapper.data)
|
checkSubtype<Any>(wrapper.data)
|
||||||
@@ -39,7 +41,16 @@ fun case1() {
|
|||||||
checkSubtype<CustomClass>(wrapper.data)
|
checkSubtype<CustomClass>(wrapper.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: TestCase2.kt
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
|
package testPackCase2
|
||||||
|
import checkSubtype
|
||||||
|
class NothingWrapper() {
|
||||||
|
val data: Nothing = TODO()
|
||||||
|
}
|
||||||
|
|
||||||
|
class CustomClass() {}
|
||||||
|
|
||||||
fun case2(wrapper: NothingWrapper) {
|
fun case2(wrapper: NothingWrapper) {
|
||||||
checkSubtype<MutableList<out Nothing>>(wrapper.data)
|
checkSubtype<MutableList<out Nothing>>(wrapper.data)
|
||||||
checkSubtype<MutableList<in String>>(wrapper.data)
|
checkSubtype<MutableList<in String>>(wrapper.data)
|
||||||
@@ -48,5 +59,4 @@ fun case2(wrapper: NothingWrapper) {
|
|||||||
checkSubtype<MutableList<Any?>>(wrapper.data)
|
checkSubtype<MutableList<Any?>>(wrapper.data)
|
||||||
|
|
||||||
checkSubtype<String>(wrapper.data)
|
checkSubtype<String>(wrapper.data)
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user