a036e41809
^KT-59057 Merge-request: KT-MR-10748 Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
109 lines
5.1 KiB
Kotlin
Vendored
109 lines
5.1 KiB
Kotlin
Vendored
// TARGET_BACKEND: JS
|
|
|
|
// Don't test other backends because they don't support overriding and calling interface methods with default arguments
|
|
|
|
// MODULE: InterfaceModule
|
|
// FILE: MyInterface.kt
|
|
interface MyInterface {
|
|
fun test() = 1
|
|
fun testWithDefault(x: Int = 1) = x
|
|
}
|
|
|
|
interface MyInterface2 : MyInterface
|
|
|
|
// MODULE: OpenClassModule(InterfaceModule)
|
|
// FILE: MyOpenClass.kt
|
|
open class MyOpenClass : MyInterface
|
|
|
|
open class MyOpenClass2 : MyInterface2
|
|
|
|
open class MyOpenClass3 : MyOpenClass()
|
|
|
|
// MODULE: OpenClassWithOverrideModule(InterfaceModule)
|
|
// FILE: MyOpenClassWithOverrideModule.kt
|
|
open class MyOpenClassWithOverride : MyInterface {
|
|
override fun test() = super.test() + 1
|
|
override fun testWithDefault(x: Int) = super.testWithDefault() + 1
|
|
}
|
|
|
|
open class MyOpenClassWithOverride2 : MyInterface2, MyOpenClassWithOverride()
|
|
|
|
open class MyOpenClassWithOverride3 : MyOpenClassWithOverride2() {
|
|
override fun test() = super.test() + 1
|
|
override fun testWithDefault(x: Int) = super.testWithDefault(x) + 1
|
|
}
|
|
|
|
// MODULE: main(InterfaceModule, OpenClassModule, OpenClassWithOverrideModule)
|
|
// FILE: classes.kt
|
|
class MyFinalClass : MyOpenClass()
|
|
class MyFinalClass2 : MyOpenClass2()
|
|
class MyFinalClass3 : MyOpenClass3()
|
|
class MyFinalClassI : MyInterface, MyOpenClass()
|
|
|
|
class MyFinalClassWithOverride : MyOpenClassWithOverride()
|
|
class MyFinalClassWithOverride2 : MyOpenClassWithOverride2()
|
|
class MyFinalClassWithOverride3 : MyOpenClassWithOverride3()
|
|
class MyFinalClassWithOverrideI : MyInterface, MyOpenClassWithOverride()
|
|
|
|
// FILE: main.kt
|
|
fun asInterface(i: MyInterface): MyInterface = i
|
|
fun asInterface2(i: MyInterface2): MyInterface2 = i
|
|
|
|
fun box(): String {
|
|
if (asInterface(MyFinalClass()).test() != 1) return "Fail MyOpenClass 1"
|
|
if (MyFinalClass().test() != 1) return "Fail MyOpenClass 2"
|
|
|
|
if (asInterface(MyFinalClass()).testWithDefault() != 1) return "Fail MyOpenClass 3"
|
|
if (MyFinalClass().testWithDefault() != 1) return "Fail MyOpenClass 4"
|
|
|
|
if (asInterface(MyFinalClass2()).test() != 1) return "Fail MyFinalClass2 1"
|
|
if (asInterface2(MyFinalClass2()).test() != 1) return "Fail MyFinalClass2 2"
|
|
if (MyFinalClass2().test() != 1) return "Fail MyFinalClass2 3"
|
|
|
|
if (asInterface(MyFinalClass2()).testWithDefault() != 1) return "Fail MyFinalClass2 4"
|
|
if (asInterface2(MyFinalClass2()).testWithDefault() != 1) return "Fail MyFinalClass2 5"
|
|
if (MyFinalClass2().testWithDefault() != 1) return "Fail MyFinalClass2 6"
|
|
|
|
if (asInterface(MyFinalClass3()).test() != 1) return "Fail MyFinalClass3 1"
|
|
if (MyFinalClass3().test() != 1) return "Fail MyFinalClass3 2"
|
|
|
|
if (asInterface(MyFinalClass3()).testWithDefault() != 1) return "Fail MyFinalClass3 3"
|
|
if (MyFinalClass3().testWithDefault() != 1) return "Fail MyFinalClass3 4"
|
|
|
|
if (asInterface(MyFinalClassI()).test() != 1) return "Fail MyFinalClassI 1"
|
|
if (MyFinalClassI().test() != 1) return "Fail MyFinalClassI 2"
|
|
|
|
if (asInterface(MyFinalClassI()).testWithDefault() != 1) return "Fail MyFinalClassI 3"
|
|
if (MyFinalClassI().testWithDefault() != 1) return "Fail MyFinalClassI 4"
|
|
|
|
if (asInterface(MyFinalClassWithOverride()).test() != 2) return "Fail MyFinalClassWithOverride 1"
|
|
if (MyFinalClassWithOverride().test() != 2) return "Fail MyFinalClassWithOverride 2"
|
|
|
|
if (asInterface(MyFinalClassWithOverride()).testWithDefault() != 2) return "Fail MyFinalClassWithOverride 3"
|
|
if (MyFinalClassWithOverride().testWithDefault(1) != 2) return "Fail MyFinalClassWithOverride 4"
|
|
|
|
if (asInterface(MyFinalClassWithOverride2()).test() != 2) return "Fail MyFinalClassWithOverride2 1"
|
|
if (asInterface2(MyFinalClassWithOverride2()).test() != 2) return "Fail MyFinalClassWithOverride2 2"
|
|
if (MyFinalClassWithOverride2().test() != 2) return "Fail MyFinalClassWithOverride2 3"
|
|
|
|
if (asInterface(MyFinalClassWithOverride2()).testWithDefault() != 2) return "Fail MyFinalClassWithOverride2 4"
|
|
if (asInterface2(MyFinalClassWithOverride2()).testWithDefault() != 2) return "Fail MyFinalClassWithOverride2 5"
|
|
if (MyFinalClassWithOverride2().testWithDefault(1) != 2) return "Fail MyFinalClassWithOverride2 6"
|
|
|
|
if (asInterface(MyFinalClassWithOverride3()).test() != 3) return "Fail MyFinalClassWithOverride3 1"
|
|
if (asInterface2(MyFinalClassWithOverride3()).test() != 3) return "Fail MyFinalClassWithOverride3 2"
|
|
if (MyFinalClassWithOverride3().test() != 3) return "Fail MyFinalClassWithOverride3 3"
|
|
|
|
if (asInterface(MyFinalClassWithOverride3()).testWithDefault() != 3) return "Fail MyFinalClassWithOverride3 4"
|
|
if (asInterface2(MyFinalClassWithOverride3()).testWithDefault() != 3) return "Fail MyFinalClassWithOverride3 5"
|
|
if (MyFinalClassWithOverride3().testWithDefault(1) != 3) return "Fail MyFinalClassWithOverride3 6"
|
|
|
|
if (asInterface(MyFinalClassWithOverrideI()).test() != 2) return "Fail MyFinalClassWithOverrideI 1"
|
|
if (MyFinalClassWithOverrideI().test() != 2) return "Fail MyFinalClassWithOverrideI 2"
|
|
|
|
if (asInterface(MyFinalClassWithOverrideI()).testWithDefault() != 2) return "Fail MyFinalClassWithOverrideI 3"
|
|
if (MyFinalClassWithOverrideI().testWithDefault(1) != 2) return "Fail MyFinalClassWithOverrideI 4"
|
|
|
|
return "OK"
|
|
}
|