[Spec tests] Add tests for overload-resolution, building-the-overload-candidate-set-ocs, operator-call:
-properties available through the invoke convention are non-eligible for operator calls -smart casts and overload-resolution -candidate sets
This commit is contained in:
committed by
Victor Petukhov
parent
4301744d2d
commit
35de6a3f6e
+86
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"6": {
|
||||
"pos": {
|
||||
"4": [
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Extension callables, declared in the package scope, for for-loop operator iterator call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.4.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Star-imported extension callables for for-loop operator iterator call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.5.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Extension callables, declared in the package scope, for delegated properties call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.9.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
],
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Non-extension member callables for for-loop operator iterator call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.1.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Non-extension member callables for delegated properties call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.6.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
],
|
||||
"5": [
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Star-imported extension callables for delegated properties call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.10.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
],
|
||||
"3": [
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Explicitly imported extension callables for delegated properties call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.8.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Explicitly imported extension callables for for-loop operator iterator call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.3.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Local extension callables for for-loop operator iterator call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.2.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "local extension callables for delegated properties call",
|
||||
"path": "compiler/tests-spec/testData/codegen/box/linked/overload-resolution/building-the-overload-candidate-set-ocs/operator-call/p-2/pos/3.7.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Non-extension member callables for for-loop operator iterator call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var flag = false
|
||||
|
||||
class MyIterator(shouldBeCalled: Boolean = false) : CharIterator() {
|
||||
init {
|
||||
flag = shouldBeCalled
|
||||
}
|
||||
private var index = 0
|
||||
override fun nextChar(): Char { index++; return 'd'}
|
||||
override fun hasNext(): Boolean = index < 5
|
||||
}
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator()
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator()
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
import libPackage1.iterator
|
||||
import libPackage1.invoke
|
||||
import libPackage2.*
|
||||
|
||||
|
||||
class Iterable(iterator: Inv) {
|
||||
operator fun iterator(): CharIterator = MyIterator(true)
|
||||
}
|
||||
|
||||
class Inv(val c: Char) {
|
||||
operator fun invoke(): CharIterator = MyIterator()
|
||||
}
|
||||
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator()
|
||||
|
||||
fun box(): String {
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator()
|
||||
|
||||
for (i in Iterable(Inv('c'))) {
|
||||
println(i)
|
||||
}
|
||||
return if (flag)
|
||||
"OK"
|
||||
else "NOK"
|
||||
}
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 5
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 10
|
||||
* DESCRIPTION: Star-imported extension callables for delegated properties call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var isGetCalled = false
|
||||
var isSetCalled = false
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
isGetCalled = true
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {
|
||||
isSetCalled = true
|
||||
}
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
//import libPackage1.getValue
|
||||
//import libPackage1.setValue
|
||||
import libPackage2.*
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class Delegate {}
|
||||
|
||||
fun box() : String {
|
||||
class Test {
|
||||
var p: String by Delegate()
|
||||
}
|
||||
|
||||
val test = Test()
|
||||
assert(!isGetCalled && !isSetCalled)
|
||||
test.p = "NEW"
|
||||
if (isSetCalled && !isGetCalled) {
|
||||
isSetCalled = false
|
||||
val x = test.p
|
||||
if (!isSetCalled && isGetCalled)
|
||||
return "OK"
|
||||
}
|
||||
return "NOK"
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 2
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Local extension callables for for-loop operator iterator call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var flag = false
|
||||
|
||||
class MyIterator(shouldBeCalled: Boolean = false) : CharIterator() {
|
||||
init {
|
||||
flag = shouldBeCalled
|
||||
}
|
||||
private var index = 0
|
||||
override fun nextChar(): Char { index++; return 'd'}
|
||||
override fun hasNext(): Boolean = index < 5
|
||||
}
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator()
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator()
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
import libPackage1.iterator
|
||||
import libPackage1.invoke
|
||||
import libPackage2.*
|
||||
|
||||
|
||||
class Iterable(iterator: Inv) {
|
||||
/*operator fun iterator(): CharIterator = MyIterator()*/
|
||||
}
|
||||
|
||||
class Inv(val c: Char) {
|
||||
operator fun invoke(): CharIterator = MyIterator()
|
||||
}
|
||||
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator()
|
||||
|
||||
fun box(): String {
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator(true)
|
||||
|
||||
for (i in Iterable(Inv('c'))) {
|
||||
println(i)
|
||||
}
|
||||
return if (flag)
|
||||
"OK"
|
||||
else "NOK"
|
||||
}
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 3
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: Explicitly imported extension callables for for-loop operator iterator call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var flag = false
|
||||
|
||||
class MyIterator(shouldBeCalled: Boolean = false) : CharIterator() {
|
||||
init {
|
||||
flag = shouldBeCalled
|
||||
}
|
||||
private var index = 0
|
||||
override fun nextChar(): Char { index++; return 'd'}
|
||||
override fun hasNext(): Boolean = index < 5
|
||||
}
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator(true)
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator()
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
import libPackage1.iterator
|
||||
import libPackage1.invoke
|
||||
import libPackage2.*
|
||||
|
||||
|
||||
class Iterable(iterator: Inv) {
|
||||
/*operator fun iterator(): CharIterator = MyIterator()*/
|
||||
}
|
||||
|
||||
class Inv(val c: Char) {
|
||||
operator fun invoke(): CharIterator = MyIterator()
|
||||
}
|
||||
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator()
|
||||
|
||||
fun box(): String {
|
||||
/*operator fun Iterable.iterator(): CharIterator = MyIterator()*/
|
||||
|
||||
for (i in Iterable(Inv('c'))) {
|
||||
println(i)
|
||||
}
|
||||
return if (flag)
|
||||
"OK"
|
||||
else "NOK"
|
||||
}
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 4
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: Extension callables, declared in the package scope, for for-loop operator iterator call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var flag = false
|
||||
|
||||
class MyIterator(shouldBeCalled: Boolean = false) : CharIterator() {
|
||||
init {
|
||||
flag = shouldBeCalled
|
||||
}
|
||||
private var index = 0
|
||||
override fun nextChar(): Char { index++; return 'd'}
|
||||
override fun hasNext(): Boolean = index < 5
|
||||
}
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator(true)
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator()
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
/*import libPackage1.iterator
|
||||
import libPackage1.invoke*/
|
||||
import libPackage2.*
|
||||
|
||||
|
||||
class Iterable(iterator: Inv) {
|
||||
/*operator fun iterator(): CharIterator = MyIterator()*/
|
||||
}
|
||||
|
||||
class Inv(val c: Char) {
|
||||
operator fun invoke(): CharIterator = MyIterator()
|
||||
}
|
||||
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator(true)
|
||||
|
||||
fun box(): String {
|
||||
/*operator fun Iterable.iterator(): CharIterator = MyIterator()*/
|
||||
|
||||
for (i in Iterable(Inv('c'))) {
|
||||
println(i)
|
||||
}
|
||||
return if (flag)
|
||||
"OK"
|
||||
else "NOK"
|
||||
}
|
||||
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 4
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 5
|
||||
* DESCRIPTION: Star-imported extension callables for for-loop operator iterator call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var flag = false
|
||||
|
||||
class MyIterator(shouldBeCalled: Boolean = false) : CharIterator() {
|
||||
init {
|
||||
flag = shouldBeCalled
|
||||
}
|
||||
private var index = 0
|
||||
override fun nextChar(): Char { index++; return 'd'}
|
||||
override fun hasNext(): Boolean = index < 5
|
||||
}
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator(true)
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Iterable
|
||||
import testPack.Inv
|
||||
|
||||
operator fun Iterable.iterator() : CharIterator = MyIterator(true)
|
||||
operator fun Inv.invoke() : CharIterator = MyIterator()
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
/*import libPackage1.iterator
|
||||
import libPackage1.invoke*/
|
||||
import libPackage2.*
|
||||
|
||||
|
||||
class Iterable(iterator: Inv) {
|
||||
/*operator fun iterator(): CharIterator = MyIterator()*/
|
||||
}
|
||||
|
||||
class Inv(val c: Char) {
|
||||
operator fun invoke(): CharIterator = MyIterator()
|
||||
}
|
||||
|
||||
/*
|
||||
operator fun Iterable.iterator(): CharIterator = MyIterator(true)
|
||||
*/
|
||||
|
||||
fun box(): String {
|
||||
/*operator fun Iterable.iterator(): CharIterator = MyIterator()*/
|
||||
|
||||
for (i in Iterable(Inv('c'))) {
|
||||
println(i)
|
||||
}
|
||||
return if (flag)
|
||||
"OK"
|
||||
else "NOK"
|
||||
}
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: Non-extension member callables for delegated properties call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var isGetCalled = false
|
||||
var isSetCalled = false
|
||||
|
||||
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
import libPackage1.getValue
|
||||
import libPackage1.setValue
|
||||
import libPackage2.*
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class Delegate {
|
||||
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
isGetCalled = true
|
||||
return ""
|
||||
}
|
||||
|
||||
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
|
||||
isSetCalled = true
|
||||
}
|
||||
}
|
||||
|
||||
class Test {
|
||||
var p: String by Delegate()
|
||||
}
|
||||
|
||||
fun box() : String {
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
val test = Test()
|
||||
assert(!isGetCalled && !isSetCalled)
|
||||
test.p = "NEW"
|
||||
if (isSetCalled && !isGetCalled) {
|
||||
isSetCalled = false
|
||||
val x = test.p
|
||||
if (!isSetCalled && isGetCalled)
|
||||
return "OK"
|
||||
}
|
||||
return "NOK"
|
||||
}
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 2
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 7
|
||||
* DESCRIPTION: local extension callables for delegated properties call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var isGetCalled = false
|
||||
var isSetCalled = false
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
import libPackage1.getValue
|
||||
import libPackage1.setValue
|
||||
import libPackage2.*
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class Delegate {}
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
fun box() : String {
|
||||
class Test {
|
||||
var p: String by Delegate()
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
isGetCalled = true
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {
|
||||
isSetCalled = true
|
||||
}
|
||||
}
|
||||
|
||||
val test = Test()
|
||||
assert(!isGetCalled && !isSetCalled)
|
||||
test.p = "NEW"
|
||||
if (isSetCalled && !isGetCalled) {
|
||||
isSetCalled = false
|
||||
val x = test.p
|
||||
if (!isSetCalled && isGetCalled)
|
||||
return "OK"
|
||||
}
|
||||
return "NOK"
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 3
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 8
|
||||
* DESCRIPTION: Explicitly imported extension callables for delegated properties call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var isGetCalled = false
|
||||
var isSetCalled = false
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
isGetCalled = true
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {
|
||||
isSetCalled = true
|
||||
}
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
import libPackage1.getValue
|
||||
import libPackage1.setValue
|
||||
import libPackage2.*
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class Delegate {}
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {
|
||||
}
|
||||
|
||||
fun box() : String {
|
||||
class Test {
|
||||
var p: String by Delegate()
|
||||
}
|
||||
|
||||
val test = Test()
|
||||
assert(!isGetCalled && !isSetCalled)
|
||||
test.p = "NEW"
|
||||
if (isSetCalled && !isGetCalled) {
|
||||
isSetCalled = false
|
||||
val x = test.p
|
||||
if (!isSetCalled && isGetCalled)
|
||||
return "OK"
|
||||
}
|
||||
return "NOK"
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
/*
|
||||
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-268
|
||||
* PLACE: overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 2 -> sentence 3
|
||||
* RELEVANT PLACES: overload-resolution, building-the-overload-candidate-set-ocs, call-with-an-explicit-receiver -> paragraph 6 -> sentence 4
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 4 -> sentence 1
|
||||
* overload-resolution, building-the-overload-candidate-set-ocs, operator-call -> paragraph 3 -> sentence 1
|
||||
* NUMBER: 9
|
||||
* DESCRIPTION: Extension callables, declared in the package scope, for delegated properties call
|
||||
*/
|
||||
|
||||
// FILE: LibMyIterator.kt
|
||||
package libMyIteratorPackage
|
||||
|
||||
var isGetCalled = false
|
||||
var isSetCalled = false
|
||||
|
||||
// FILE: Lib1.kt
|
||||
package libPackage1
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Lib2.kt
|
||||
package libPackage2
|
||||
import libMyIteratorPackage.*
|
||||
import testPack.Delegate
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {}
|
||||
|
||||
// FILE: Test.kt
|
||||
package testPack
|
||||
import libMyIteratorPackage.*
|
||||
//import libPackage1.getValue
|
||||
//import libPackage1.setValue
|
||||
import libPackage2.*
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class Delegate {}
|
||||
|
||||
operator fun Delegate.getValue(thisRef: Any?, property: KProperty<*>): String {
|
||||
isGetCalled = true
|
||||
return ""
|
||||
}
|
||||
operator fun Delegate.setValue(thisRef: Any?, property: KProperty<*>, value: String) {
|
||||
isSetCalled = true
|
||||
}
|
||||
|
||||
fun box() : String {
|
||||
class Test {
|
||||
var p: String by Delegate()
|
||||
}
|
||||
|
||||
val test = Test()
|
||||
assert(!isGetCalled && !isSetCalled)
|
||||
test.p = "NEW"
|
||||
if (isSetCalled && !isGetCalled) {
|
||||
isSetCalled = false
|
||||
val x = test.p
|
||||
if (!isSetCalled && isGetCalled)
|
||||
return "OK"
|
||||
}
|
||||
return "NOK"
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"2": {
|
||||
"pos": {
|
||||
"3": [
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Extension callables, declared in the package scope, for for-loop operator iterator call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Star-imported extension callables for for-loop operator iterator call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Non-extension member callables for for-loop operator iterator call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Star-imported extension callables for delegated properties call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Explicitly imported extension callables for delegated properties call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Extension callables, declared in the package scope, for delegated properties call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Non-extension member callables for delegated properties call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Local extension callables for for-loop operator iterator call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "Explicitly imported extension callables for for-loop operator iterator call",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-268",
|
||||
"casesNumber": 0,
|
||||
"description": "local extension callables for delegated properties call",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user