Add tests for compilation against abi classes

This commit is contained in:
Alexey Tsvetkov
2018-12-03 16:28:34 +03:00
parent 8992ee6280
commit 9dd09151f0
16 changed files with 252 additions and 5 deletions
@@ -0,0 +1,11 @@
package app
import lib.*
fun runAppAndReturnOk(): String {
val i = getInterface()
val value = i.getInt()
if (value != 10) error("getInterface().getInt() is '$value', but is expected to be '10'")
return "OK"
}
@@ -0,0 +1,10 @@
package lib
interface Interface {
fun getInt(): Int
}
fun getInterface(): Interface =
object : Interface {
override fun getInt(): Int = 10
}
+40
View File
@@ -0,0 +1,40 @@
package app
import lib.*
fun useI(i: I) {
i.iProperty
i.iMethod()
}
fun useA(a: A) {
a.iProperty
a.iMethod()
a.aProperty
a.aMethod()
a.aInlineMethod()
A.aConst
}
fun useB(b: B) {
b.iProperty
b.iMethod()
b.aProperty
b.aMethod()
b.aInlineMethod()
b.bProperty
b.bMethod()
b.bInlineMethod()
B.bConst
}
fun runAppAndReturnOk(): String {
useI(A())
useA(A())
useB(B())
return "OK"
}
@@ -0,0 +1,29 @@
package lib
interface I {
val iProperty: Int
fun iMethod(): Int
}
open class A : I {
override val iProperty: Int = 0
override fun iMethod(): Int = 10
val aProperty: Int = 20
fun aMethod(): Int = 30
inline fun aInlineMethod(): Int = 40
companion object {
const val aConst: Int = 50
}
}
class B : A() {
val bProperty: Int = 60
fun bMethod(): Int = 70
inline fun bInlineMethod(): Int = 80
companion object {
const val bConst: Int = 90
}
}
+10
View File
@@ -0,0 +1,10 @@
package app
import lib.*
fun runAppAndReturnOk(): String {
if (Object.z != 3) error("lib.Object.z is ${Object.z}, but '3' was expected")
if (z != 3) error("lib.z is $z, but '3' was expected")
return "OK"
}
@@ -0,0 +1,7 @@
package lib
object Object {
val x = 1
val y = 2
val z = x + y
}
@@ -0,0 +1,5 @@
package lib
val x = 1
val y = 2
val z = x + y
@@ -0,0 +1,10 @@
package app
import lib.*
fun runAppAndReturnOk(): String {
val a = A.create(10)
if (a.x != 20) error("a.x is '${a.x}', but is expected to be '20'")
return "OK"
}
@@ -0,0 +1,7 @@
package lib
class A private constructor(val x: Int) {
companion object {
fun create(x: Int): A = A(x * 2)
}
}
@@ -0,0 +1,14 @@
package app
import lib.*
fun runAppAndReturnOk(): String {
if (prop != 1) error("prop is '$prop', but is expected to be '1'")
val funcValue = func()
if (funcValue != 2) error("func() is '$funcValue', but is expected to be '2'")
val inlineFuncValue = inlineFunc()
if (inlineFuncValue != 3) error("inlineFunc() is '$inlineFuncValue', but is expected to be '3'")
if (constant != 4) error("constant is '$constant', but is expected to be '4'")
return "OK"
}
@@ -0,0 +1,6 @@
package lib
val prop: Int = 1
fun func(): Int = 2
inline fun inlineFunc(): Int = 3
const val constant: Int = 4