[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:
anastasiia.spaseeva
2020-02-19 19:15:58 +03:00
committed by Victor Petukhov
parent 4301744d2d
commit 35de6a3f6e
27 changed files with 2803 additions and 74 deletions
@@ -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
}
]
}
}
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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"
}
@@ -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
}
]
}
}
}