Files
kotlin-fork/js/js.translator/testData/box/native/valueClass.kt
T
Sergej Jaskiewicz 887e91328f [JS IR] Allow value classes in external decls
Instances of value classes are passed unboxed, unless the instance is
nullable _and_ the value class wraps another nullable value.

#KT-43224 Fixed
2021-11-29 21:51:29 +00:00

1661 lines
80 KiB
Kotlin
Vendored

// DONT_TARGET_EXACT_BACKEND: JS
// DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: UNSUPPORTED_JS_INTEROP
// This test file verifies the boxing rules for value classes when instances of those classes are passed
// through language boundaries in external declarations.
package foo
data class Foo(val s: String)
external class NativeFoo(s: String) {
val s: String
override fun toString(): String
}
external fun describeValueOfProperty(o: dynamic, name: String): String
external fun nullifyTestProperties(o: dynamic): Unit
/* Value classes under test */
value class IntWrapper(val value: Int)
value class IntNWrapper(val value: Int?)
value class FooWrapper(val foo: Foo)
value class FooNWrapper(val fooN: Foo?)
value class NativeFooWrapper(val nativeFoo: NativeFoo)
value class NativeFooNWrapper(val nativeFooN: NativeFoo?)
external fun describeIntWrapper(x: IntWrapper): String
external fun describeIntWrapperN(x: IntWrapper?): String
external fun describeIntNWrapper(x: IntNWrapper): String
external fun describeIntNWrapperN(x: /*boxed*/ IntNWrapper?): String
external fun describeFooWrapper(x: FooWrapper): String
external fun describeFooWrapperN(x: FooWrapper?): String
external fun describeFooNWrapper(x: FooNWrapper): String
external fun describeFooNWrapperN(x: /*boxed*/ FooNWrapper?): String
external fun describeNativeFooWrapper(x: NativeFooWrapper): String
external fun describeNativeFooWrapperN(x: NativeFooWrapper?): String
external fun describeNativeFooNWrapper(x: NativeFooNWrapper): String
external fun describeNativeFooNWrapperN(x: /*boxed*/ NativeFooNWrapper?): String
fun testFreeFunctionsWithValueClassesInArgs() {
assertEquals("42 (number)", describeIntWrapper(IntWrapper(42)))
assertEquals("100 (number)", describeIntWrapperN(IntWrapper(100)))
assertEquals("null (object)", describeIntWrapperN(null))
assertEquals("42 (number)", describeIntNWrapper(IntNWrapper(42)))
assertEquals("null (object)", describeIntNWrapper(IntNWrapper(null)))
assertEquals("IntNWrapper(value=100) (object)", describeIntNWrapperN(IntNWrapper(100)))
assertEquals("IntNWrapper(value=null) (object)", describeIntNWrapperN(IntNWrapper(null)))
assertEquals("null (object)", describeIntNWrapperN(null))
assertEquals("Foo(s=hello) (object)", describeFooWrapper(FooWrapper(Foo("hello"))))
assertEquals("Foo(s=goodbye) (object)", describeFooWrapperN(FooWrapper(Foo("goodbye"))))
assertEquals("null (object)", describeFooWrapperN(null))
assertEquals("Foo(s=hello) (object)", describeFooNWrapper(FooNWrapper(Foo("hello"))))
assertEquals("null (object)", describeFooNWrapper(FooNWrapper(null)))
assertEquals("FooNWrapper(fooN=Foo(s=goodbye)) (object)", describeFooNWrapperN(FooNWrapper(Foo("goodbye"))))
assertEquals("FooNWrapper(fooN=null) (object)", describeFooNWrapperN(FooNWrapper(null)))
assertEquals("null (object)", describeFooNWrapperN(null))
assertEquals("NativeFoo('hello') (object)", describeNativeFooWrapper(NativeFooWrapper(NativeFoo("hello"))))
assertEquals("NativeFoo('goodbye') (object)", describeNativeFooWrapperN(NativeFooWrapper(NativeFoo("goodbye"))))
assertEquals("null (object)", describeNativeFooWrapperN(null))
assertEquals("NativeFoo('hello') (object)", describeNativeFooNWrapper(NativeFooNWrapper(NativeFoo("hello"))))
assertEquals("null (object)", describeNativeFooNWrapper(NativeFooNWrapper(null)))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('goodbye')) (object)", describeNativeFooNWrapperN(NativeFooNWrapper(NativeFoo("goodbye"))))
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeNativeFooNWrapperN(NativeFooNWrapper(null)))
assertEquals("null (object)", describeNativeFooNWrapperN(null))
}
external var intWrapper: IntWrapper
external var intWrapperN: IntWrapper?
external var intNWrapper: IntNWrapper
external var intNWrapperN: /*boxed*/ IntNWrapper?
external var fooWrapper: FooWrapper
external var fooWrapperN: FooWrapper?
external var fooNWrapper: FooNWrapper
external var fooNWrapperN: /*boxed*/ FooNWrapper?
external var nativeFooWrapper: NativeFooWrapper
external var nativeFooWrapperN: NativeFooWrapper?
external var nativeFooNWrapper: NativeFooNWrapper
external var nativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
fun testWritableGlobalProperties() {
assertEquals("null (object)", describeValueOfProperty(null, "intWrapper"))
intWrapper = IntWrapper(42)
assertEquals("42 (number)", describeValueOfProperty(null, "intWrapper"))
assertEquals(42, intWrapper.value)
assertEquals("null (object)", describeValueOfProperty(null, "intWrapperN"))
intWrapperN = IntWrapper(100)
assertEquals("100 (number)", describeValueOfProperty(null, "intWrapperN"))
assertEquals(100, intWrapperN?.value)
intWrapperN = null
assertEquals("null (object)", describeValueOfProperty(null, "intWrapperN"))
assertEquals(null, intWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(null, "intNWrapper"))
intNWrapper = IntNWrapper(23)
assertEquals("23 (number)", describeValueOfProperty(null, "intNWrapper"))
assertEquals(23, intNWrapper.value)
intNWrapper = IntNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(null, "intNWrapper"))
assertEquals(null, intNWrapper.value)
assertEquals("null (object)", describeValueOfProperty(null, "intNWrapperN"))
intNWrapperN = IntNWrapper(65)
assertEquals("IntNWrapper(value=65) (object)", describeValueOfProperty(null, "intNWrapperN"))
assertEquals(65, intNWrapperN?.value)
intNWrapperN = IntNWrapper(null)
assertEquals("IntNWrapper(value=null) (object)", describeValueOfProperty(null, "intNWrapperN"))
assertEquals(null, intNWrapperN?.value)
intNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(null, "intNWrapperN"))
assertEquals(null, intNWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(null, "fooWrapper"))
fooWrapper = FooWrapper(Foo("cat"))
assertEquals("Foo(s=cat) (object)", describeValueOfProperty(null, "fooWrapper"))
assertEquals("cat", fooWrapper.foo.s)
assertEquals("null (object)", describeValueOfProperty(null, "fooWrapperN"))
fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("Foo(s=dog) (object)", describeValueOfProperty(null, "fooWrapperN"))
assertEquals("dog", fooWrapperN?.foo?.s)
fooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(null, "fooWrapperN"))
assertEquals(null, fooWrapperN?.foo?.s)
assertEquals("null (object)", describeValueOfProperty(null, "fooNWrapper"))
fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("Foo(s=mouse) (object)", describeValueOfProperty(null, "fooNWrapper"))
assertEquals("mouse", fooNWrapper.fooN?.s)
fooNWrapper = FooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(null, "fooNWrapper"))
assertEquals(null, fooNWrapper.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(null, "fooNWrapperN"))
fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("FooNWrapper(fooN=Foo(s=fox)) (object)", describeValueOfProperty(null, "fooNWrapperN"))
assertEquals("fox", fooNWrapperN?.fooN?.s)
fooNWrapperN = FooNWrapper(null)
assertEquals("FooNWrapper(fooN=null) (object)", describeValueOfProperty(null, "fooNWrapperN"))
assertEquals(null, fooNWrapperN?.fooN?.s)
fooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(null, "fooNWrapperN"))
assertEquals(null, fooNWrapperN?.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooWrapper"))
nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("NativeFoo('Berlin') (object)", describeValueOfProperty(null, "nativeFooWrapper"))
assertEquals("Berlin", nativeFooWrapper.nativeFoo.s)
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooWrapperN"))
nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("NativeFoo('Amsterdam') (object)", describeValueOfProperty(null, "nativeFooWrapperN"))
assertEquals("Amsterdam", nativeFooWrapperN?.nativeFoo?.s)
nativeFooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooWrapperN"))
assertEquals(null, nativeFooWrapperN?.nativeFoo?.s)
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooNWrapper"))
nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("NativeFoo('Saint-Petersburg') (object)", describeValueOfProperty(null, "nativeFooNWrapper"))
assertEquals("Saint-Petersburg", nativeFooNWrapper.nativeFooN?.s)
nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooNWrapper"))
assertEquals(null, nativeFooNWrapper.nativeFooN?.s)
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooNWrapperN"))
nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('Boston')) (object)", describeValueOfProperty(null, "nativeFooNWrapperN"))
assertEquals("Boston", nativeFooNWrapperN?.nativeFooN?.s)
nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeValueOfProperty(null, "nativeFooNWrapperN"))
assertEquals(null, nativeFooNWrapperN?.nativeFooN?.s)
nativeFooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(null, "nativeFooNWrapperN"))
assertEquals(null, nativeFooNWrapperN?.nativeFooN?.s)
nullifyTestProperties(null)
}
external val readOnlyIntWrapper: IntWrapper
external val readOnlyIntWrapperN: IntWrapper?
external val readOnlyIntNWrapper: IntNWrapper
external val readOnlyIntNWrapperN: /*boxed*/ IntNWrapper?
external val readOnlyFooWrapper: FooWrapper
external val readOnlyFooWrapperN: FooWrapper?
external val readOnlyFooNWrapper: FooNWrapper
external val readOnlyFooNWrapperN: /*boxed*/ FooNWrapper?
external val readOnlyNativeFooWrapper: NativeFooWrapper
external val readOnlyNativeFooWrapperN: NativeFooWrapper?
external val readOnlyNativeFooNWrapper: NativeFooNWrapper
external val readOnlyNativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
fun testReadOnlyGlobalProperties() {
intWrapper = IntWrapper(42)
assertEquals(42, readOnlyIntWrapper.value)
assertEquals(null, readOnlyIntWrapperN?.value)
intWrapperN = IntWrapper(100)
assertEquals(100, readOnlyIntWrapperN?.value)
intNWrapper = IntNWrapper(23)
assertEquals(23, readOnlyIntNWrapper.value)
intNWrapper = IntNWrapper(null)
assertEquals(null, readOnlyIntNWrapper.value)
assertEquals(null, readOnlyIntNWrapperN?.value)
intNWrapperN = IntNWrapper(65)
assertEquals(65, readOnlyIntNWrapperN?.value)
intNWrapperN = IntNWrapper(null)
assertEquals(null, readOnlyIntNWrapperN?.value)
fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", readOnlyFooWrapper.foo.s)
assertEquals(null, readOnlyFooWrapperN?.foo?.s)
fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", readOnlyFooWrapperN?.foo?.s)
fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", readOnlyFooNWrapper.fooN?.s)
fooNWrapper = FooNWrapper(null)
assertEquals(null, readOnlyFooNWrapper.fooN?.s)
assertEquals(null, readOnlyFooNWrapperN?.fooN?.s)
fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", readOnlyFooNWrapperN?.fooN?.s)
fooNWrapperN = FooNWrapper(null)
assertEquals(null, readOnlyFooNWrapperN?.fooN?.s)
nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", readOnlyNativeFooWrapper.nativeFoo.s)
assertEquals(null, readOnlyNativeFooWrapperN?.nativeFoo?.s)
nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", readOnlyNativeFooWrapperN?.nativeFoo?.s)
nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", readOnlyNativeFooNWrapper.nativeFooN?.s)
nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, readOnlyNativeFooNWrapper.nativeFooN?.s)
assertEquals(null, readOnlyNativeFooNWrapperN?.nativeFooN?.s)
nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", readOnlyNativeFooNWrapperN?.nativeFooN?.s)
nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, readOnlyNativeFooNWrapperN?.nativeFooN?.s)
nullifyTestProperties(null)
}
external fun getIntWrapper(): IntWrapper
external fun getIntWrapperN(): IntWrapper?
external fun getIntNWrapper(): IntNWrapper
external fun getIntNWrapperN(): /*boxed*/ IntNWrapper?
external fun getFooWrapper(): FooWrapper
external fun getFooWrapperN(): FooWrapper?
external fun getFooNWrapper(): FooNWrapper
external fun getFooNWrapperN(): /*boxed*/ FooNWrapper?
external fun getNativeFooWrapper(): NativeFooWrapper
external fun getNativeFooWrapperN(): NativeFooWrapper?
external fun getNativeFooNWrapper(): NativeFooNWrapper
external fun getNativeFooNWrapperN(): /*boxed*/ NativeFooNWrapper?
fun testFreeFunctionsWithValueClassInReturnType() {
intWrapper = IntWrapper(42)
assertEquals(42, getIntWrapper().value)
assertEquals(null, getIntWrapperN()?.value)
intWrapperN = IntWrapper(100)
assertEquals(100, getIntWrapperN()?.value)
intNWrapper = IntNWrapper(23)
assertEquals(23, getIntNWrapper().value)
intNWrapper = IntNWrapper(null)
assertEquals(null, getIntNWrapper().value)
assertEquals(null, getIntNWrapperN()?.value)
intNWrapperN = IntNWrapper(65)
assertEquals(65, getIntNWrapperN()?.value)
intNWrapperN = IntNWrapper(null)
assertEquals(null, getIntNWrapperN()?.value)
fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", getFooWrapper().foo.s)
assertEquals(null, getFooWrapperN()?.foo?.s)
fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", getFooWrapperN()?.foo?.s)
fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", getFooNWrapper().fooN?.s)
fooNWrapper = FooNWrapper(null)
assertEquals(null, getFooNWrapper().fooN?.s)
assertEquals(null, getFooNWrapperN()?.fooN?.s)
fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", getFooNWrapperN()?.fooN?.s)
fooNWrapperN = FooNWrapper(null)
assertEquals(null, getFooNWrapperN()?.fooN?.s)
nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", getNativeFooWrapper().nativeFoo.s)
assertEquals(null, getNativeFooWrapperN()?.nativeFoo?.s)
nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", getNativeFooWrapperN()?.nativeFoo?.s)
nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", getNativeFooNWrapper().nativeFooN?.s)
nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, getNativeFooNWrapper().nativeFooN?.s)
assertEquals(null, getNativeFooNWrapperN()?.nativeFooN?.s)
nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", getNativeFooNWrapperN()?.nativeFooN?.s)
nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, getNativeFooNWrapperN()?.nativeFooN?.s)
nullifyTestProperties(null)
}
external class TestClass(
intWrapper: IntWrapper,
intWrapperN: IntWrapper?,
intNWrapper: IntNWrapper,
intNWrapperN: /*boxed*/ IntNWrapper?,
fooWrapper: FooWrapper,
fooWrapperN: FooWrapper?,
fooNWrapper: FooNWrapper,
fooNWrapperN: /*boxed*/ FooNWrapper?,
nativeFooWrapper: NativeFooWrapper,
nativeFooWrapperN: NativeFooWrapper?,
nativeFooNWrapper: NativeFooNWrapper,
nativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
) {
fun describeIntWrapper(x: IntWrapper): String
fun describeIntWrapperN(x: IntWrapper?): String
fun describeIntNWrapper(x: IntNWrapper): String
fun describeIntNWrapperN(x: /*boxed*/ IntNWrapper?): String
fun describeFooWrapper(x: FooWrapper): String
fun describeFooWrapperN(x: FooWrapper?): String
fun describeFooNWrapper(x: FooNWrapper): String
fun describeFooNWrapperN(x: /*boxed*/ FooNWrapper?): String
fun describeNativeFooWrapper(x: NativeFooWrapper): String
fun describeNativeFooWrapperN(x: NativeFooWrapper?): String
fun describeNativeFooNWrapper(x: NativeFooNWrapper): String
fun describeNativeFooNWrapperN(x: /*boxed*/ NativeFooNWrapper?): String
var intWrapper: IntWrapper
var intWrapperN: IntWrapper?
var intNWrapper: IntNWrapper
var intNWrapperN: /*boxed*/ IntNWrapper?
var fooWrapper: FooWrapper
var fooWrapperN: FooWrapper?
var fooNWrapper: FooNWrapper
var fooNWrapperN: /*boxed*/ FooNWrapper?
var nativeFooWrapper: NativeFooWrapper
var nativeFooWrapperN: NativeFooWrapper?
var nativeFooNWrapper: NativeFooNWrapper
var nativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
val readOnlyIntWrapper: IntWrapper
val readOnlyIntWrapperN: IntWrapper?
val readOnlyIntNWrapper: IntNWrapper
val readOnlyIntNWrapperN: /*boxed*/ IntNWrapper?
val readOnlyFooWrapper: FooWrapper
val readOnlyFooWrapperN: FooWrapper?
val readOnlyFooNWrapper: FooNWrapper
val readOnlyFooNWrapperN: /*boxed*/ FooNWrapper?
val readOnlyNativeFooWrapper: NativeFooWrapper
val readOnlyNativeFooWrapperN: NativeFooWrapper?
val readOnlyNativeFooNWrapper: NativeFooNWrapper
val readOnlyNativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
fun getIntWrapper(): IntWrapper
fun getIntWrapperN(): IntWrapper?
fun getIntNWrapper(): IntNWrapper
fun getIntNWrapperN(): /*boxed*/ IntNWrapper?
fun getFooWrapper(): FooWrapper
fun getFooWrapperN(): FooWrapper?
fun getFooNWrapper(): FooNWrapper
fun getFooNWrapperN(): /*boxed*/ FooNWrapper?
fun getNativeFooWrapper(): NativeFooWrapper
fun getNativeFooWrapperN(): NativeFooWrapper?
fun getNativeFooNWrapper(): NativeFooNWrapper
fun getNativeFooNWrapperN(): /*boxed*/ NativeFooNWrapper?
companion object {
fun describeIntWrapper(x: IntWrapper): String
fun describeIntWrapperN(x: IntWrapper?): String
fun describeIntNWrapper(x: IntNWrapper): String
fun describeIntNWrapperN(x: /*boxed*/ IntNWrapper?): String
fun describeFooWrapper(x: FooWrapper): String
fun describeFooWrapperN(x: FooWrapper?): String
fun describeFooNWrapper(x: FooNWrapper): String
fun describeFooNWrapperN(x: /*boxed*/ FooNWrapper?): String
fun describeNativeFooWrapper(x: NativeFooWrapper): String
fun describeNativeFooWrapperN(x: NativeFooWrapper?): String
fun describeNativeFooNWrapper(x: NativeFooNWrapper): String
fun describeNativeFooNWrapperN(x: /*boxed*/ NativeFooNWrapper?): String
var intWrapper: IntWrapper
var intWrapperN: IntWrapper?
var intNWrapper: IntNWrapper
var intNWrapperN: /*boxed*/ IntNWrapper?
var fooWrapper: FooWrapper
var fooWrapperN: FooWrapper?
var fooNWrapper: FooNWrapper
var fooNWrapperN: /*boxed*/ FooNWrapper?
var nativeFooWrapper: NativeFooWrapper
var nativeFooWrapperN: NativeFooWrapper?
var nativeFooNWrapper: NativeFooNWrapper
var nativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
val readOnlyIntWrapper: IntWrapper
val readOnlyIntWrapperN: IntWrapper?
val readOnlyIntNWrapper: IntNWrapper
val readOnlyIntNWrapperN: /*boxed*/ IntNWrapper?
val readOnlyFooWrapper: FooWrapper
val readOnlyFooWrapperN: FooWrapper?
val readOnlyFooNWrapper: FooNWrapper
val readOnlyFooNWrapperN: /*boxed*/ FooNWrapper?
val readOnlyNativeFooWrapper: NativeFooWrapper
val readOnlyNativeFooWrapperN: NativeFooWrapper?
val readOnlyNativeFooNWrapper: NativeFooNWrapper
val readOnlyNativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
fun getIntWrapper(): IntWrapper
fun getIntWrapperN(): IntWrapper?
fun getIntNWrapper(): IntNWrapper
fun getIntNWrapperN(): /*boxed*/ IntNWrapper?
fun getFooWrapper(): FooWrapper
fun getFooWrapperN(): FooWrapper?
fun getFooNWrapper(): FooNWrapper
fun getFooNWrapperN(): /*boxed*/ FooNWrapper?
fun getNativeFooWrapper(): NativeFooWrapper
fun getNativeFooWrapperN(): NativeFooWrapper?
fun getNativeFooNWrapper(): NativeFooNWrapper
fun getNativeFooNWrapperN(): /*boxed*/ NativeFooNWrapper?
}
}
external fun makeEmptyTestClassInstance(): TestClass
external fun makeTestInterfaceInstance(): TestInterface
fun testClassConstructor() {
val allNonNull = TestClass(
IntWrapper(42),
IntWrapper(100),
IntNWrapper(23),
IntNWrapper(65),
FooWrapper(Foo("cat")),
FooWrapper(Foo("dog")),
FooNWrapper(Foo("mouse")),
FooNWrapper(Foo("fox")),
NativeFooWrapper(NativeFoo("Berlin")),
NativeFooWrapper(NativeFoo("Amsterdam")),
NativeFooNWrapper(NativeFoo("Saint-Petersburg")),
NativeFooNWrapper(NativeFoo("Boston")),
)
assertEquals("42 (number)", describeValueOfProperty(allNonNull, "intWrapper"))
assertEquals("100 (number)", describeValueOfProperty(allNonNull, "intWrapperN"))
assertEquals("23 (number)", describeValueOfProperty(allNonNull, "intNWrapper"))
assertEquals("IntNWrapper(value=65) (object)", describeValueOfProperty(allNonNull, "intNWrapperN"))
assertEquals("Foo(s=cat) (object)", describeValueOfProperty(allNonNull, "fooWrapper"))
assertEquals("Foo(s=dog) (object)", describeValueOfProperty(allNonNull, "fooWrapperN"))
assertEquals("Foo(s=mouse) (object)", describeValueOfProperty(allNonNull, "fooNWrapper"))
assertEquals("FooNWrapper(fooN=Foo(s=fox)) (object)", describeValueOfProperty(allNonNull, "fooNWrapperN"))
assertEquals("NativeFoo('Berlin') (object)", describeValueOfProperty(allNonNull, "nativeFooWrapper"))
assertEquals("NativeFoo('Amsterdam') (object)", describeValueOfProperty(allNonNull, "nativeFooWrapperN"))
assertEquals("NativeFoo('Saint-Petersburg') (object)", describeValueOfProperty(allNonNull, "nativeFooNWrapper"))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('Boston')) (object)", describeValueOfProperty(allNonNull, "nativeFooNWrapperN"))
val topLevelNull = TestClass(
IntWrapper(42),
null,
IntNWrapper(23),
null,
FooWrapper(Foo("cat")),
null,
FooNWrapper(Foo("mouse")),
null,
NativeFooWrapper(NativeFoo("Berlin")),
null,
NativeFooNWrapper(NativeFoo("Saint-Petersburg")),
null,
)
assertEquals("null (object)", describeValueOfProperty(topLevelNull, "intWrapperN"))
assertEquals("null (object)", describeValueOfProperty(topLevelNull, "intNWrapperN"))
assertEquals("null (object)", describeValueOfProperty(topLevelNull, "fooWrapperN"))
assertEquals("null (object)", describeValueOfProperty(topLevelNull, "fooNWrapperN"))
assertEquals("null (object)", describeValueOfProperty(topLevelNull, "nativeFooWrapperN"))
assertEquals("null (object)", describeValueOfProperty(topLevelNull, "nativeFooNWrapperN"))
val wrappingNull = TestClass(
IntWrapper(42),
null,
IntNWrapper(null),
IntNWrapper(null),
FooWrapper(Foo("cat")),
null,
FooNWrapper(null),
FooNWrapper(null),
NativeFooWrapper(NativeFoo("Berlin")),
null,
NativeFooNWrapper(null),
NativeFooNWrapper(null),
)
assertEquals("null (object)", describeValueOfProperty(wrappingNull, "intNWrapper"))
assertEquals("IntNWrapper(value=null) (object)", describeValueOfProperty(wrappingNull, "intNWrapperN"))
assertEquals("null (object)", describeValueOfProperty(wrappingNull, "fooNWrapper"))
assertEquals("FooNWrapper(fooN=null) (object)", describeValueOfProperty(wrappingNull, "fooNWrapperN"))
assertEquals("null (object)", describeValueOfProperty(wrappingNull, "nativeFooNWrapper"))
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeValueOfProperty(wrappingNull, "nativeFooNWrapperN"))
}
fun testClassMethodsWithValueClassesInArgs() {
val o = makeEmptyTestClassInstance()
assertEquals("42 (number)", o.describeIntWrapper(IntWrapper(42)))
assertEquals("100 (number)", o.describeIntWrapperN(IntWrapper(100)))
assertEquals("null (object)", o.describeIntWrapperN(null))
assertEquals("42 (number)", o.describeIntNWrapper(IntNWrapper(42)))
assertEquals("null (object)", o.describeIntNWrapper(IntNWrapper(null)))
assertEquals("IntNWrapper(value=100) (object)", o.describeIntNWrapperN(IntNWrapper(100)))
assertEquals("IntNWrapper(value=null) (object)", o.describeIntNWrapperN(IntNWrapper(null)))
assertEquals("null (object)", o.describeIntNWrapperN(null))
assertEquals("Foo(s=hello) (object)", o.describeFooWrapper(FooWrapper(Foo("hello"))))
assertEquals("Foo(s=goodbye) (object)", o.describeFooWrapperN(FooWrapper(Foo("goodbye"))))
assertEquals("null (object)", o.describeFooWrapperN(null))
assertEquals("Foo(s=hello) (object)", o.describeFooNWrapper(FooNWrapper(Foo("hello"))))
assertEquals("null (object)", o.describeFooNWrapper(FooNWrapper(null)))
assertEquals("FooNWrapper(fooN=Foo(s=goodbye)) (object)", o.describeFooNWrapperN(FooNWrapper(Foo("goodbye"))))
assertEquals("FooNWrapper(fooN=null) (object)", o.describeFooNWrapperN(FooNWrapper(null)))
assertEquals("null (object)", o.describeFooNWrapperN(null))
assertEquals("NativeFoo('hello') (object)", o.describeNativeFooWrapper(NativeFooWrapper(NativeFoo("hello"))))
assertEquals("NativeFoo('goodbye') (object)", o.describeNativeFooWrapperN(NativeFooWrapper(NativeFoo("goodbye"))))
assertEquals("null (object)", o.describeNativeFooWrapperN(null))
assertEquals("NativeFoo('hello') (object)", o.describeNativeFooNWrapper(NativeFooNWrapper(NativeFoo("hello"))))
assertEquals("null (object)", o.describeNativeFooNWrapper(NativeFooNWrapper(null)))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('goodbye')) (object)", o.describeNativeFooNWrapperN(NativeFooNWrapper(NativeFoo("goodbye"))))
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", o.describeNativeFooNWrapperN(NativeFooNWrapper(null)))
assertEquals("null (object)", o.describeNativeFooNWrapperN(null))
}
fun testWritableClassProperties() {
val o = makeEmptyTestClassInstance()
assertEquals("null (object)", describeValueOfProperty(o, "intWrapper"))
o.intWrapper = IntWrapper(42)
assertEquals("42 (number)", describeValueOfProperty(o, "intWrapper"))
assertEquals(42, o.intWrapper.value)
assertEquals("null (object)", describeValueOfProperty(o, "intWrapperN"))
o.intWrapperN = IntWrapper(100)
assertEquals("100 (number)", describeValueOfProperty(o, "intWrapperN"))
assertEquals(100, o.intWrapperN?.value)
o.intWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "intWrapperN"))
assertEquals(null, o.intWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapper"))
o.intNWrapper = IntNWrapper(23)
assertEquals("23 (number)", describeValueOfProperty(o, "intNWrapper"))
assertEquals(23, o.intNWrapper.value)
o.intNWrapper = IntNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapper"))
assertEquals(null, o.intNWrapper.value)
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapperN"))
o.intNWrapperN = IntNWrapper(65)
assertEquals("IntNWrapper(value=65) (object)", describeValueOfProperty(o, "intNWrapperN"))
assertEquals(65, o.intNWrapperN?.value)
o.intNWrapperN = IntNWrapper(null)
assertEquals("IntNWrapper(value=null) (object)", describeValueOfProperty(o, "intNWrapperN"))
assertEquals(null, o.intNWrapperN?.value)
o.intNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapperN"))
assertEquals(null, o.intNWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(o, "fooWrapper"))
o.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("Foo(s=cat) (object)", describeValueOfProperty(o, "fooWrapper"))
assertEquals("cat", o.fooWrapper.foo.s)
assertEquals("null (object)", describeValueOfProperty(o, "fooWrapperN"))
o.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("Foo(s=dog) (object)", describeValueOfProperty(o, "fooWrapperN"))
assertEquals("dog", o.fooWrapperN?.foo?.s)
o.fooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "fooWrapperN"))
assertEquals(null, o.fooWrapperN?.foo?.s)
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapper"))
o.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("Foo(s=mouse) (object)", describeValueOfProperty(o, "fooNWrapper"))
assertEquals("mouse", o.fooNWrapper.fooN?.s)
o.fooNWrapper = FooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapper"))
assertEquals(null, o.fooNWrapper.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapperN"))
o.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("FooNWrapper(fooN=Foo(s=fox)) (object)", describeValueOfProperty(o, "fooNWrapperN"))
assertEquals("fox", o.fooNWrapperN?.fooN?.s)
o.fooNWrapperN = FooNWrapper(null)
assertEquals("FooNWrapper(fooN=null) (object)", describeValueOfProperty(o, "fooNWrapperN"))
assertEquals(null, o.fooNWrapperN?.fooN?.s)
o.fooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapperN"))
assertEquals(null, o.fooNWrapperN?.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooWrapper"))
o.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("NativeFoo('Berlin') (object)", describeValueOfProperty(o, "nativeFooWrapper"))
assertEquals("Berlin", o.nativeFooWrapper.nativeFoo.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooWrapperN"))
o.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("NativeFoo('Amsterdam') (object)", describeValueOfProperty(o, "nativeFooWrapperN"))
assertEquals("Amsterdam", o.nativeFooWrapperN?.nativeFoo?.s)
o.nativeFooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooWrapperN"))
assertEquals(null, o.nativeFooWrapperN?.nativeFoo?.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapper"))
o.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("NativeFoo('Saint-Petersburg') (object)", describeValueOfProperty(o, "nativeFooNWrapper"))
assertEquals("Saint-Petersburg", o.nativeFooNWrapper.nativeFooN?.s)
o.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapper"))
assertEquals(null, o.nativeFooNWrapper.nativeFooN?.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
o.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('Boston')) (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
assertEquals("Boston", o.nativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
assertEquals(null, o.nativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
assertEquals(null, o.nativeFooNWrapperN?.nativeFooN?.s)
}
fun testReadOnlyClassProperties() {
val o = makeEmptyTestClassInstance()
o.intWrapper = IntWrapper(42)
assertEquals(42, o.readOnlyIntWrapper.value)
assertEquals(null, o.readOnlyIntWrapperN?.value)
o.intWrapperN = IntWrapper(100)
assertEquals(100, o.readOnlyIntWrapperN?.value)
o.intNWrapper = IntNWrapper(23)
assertEquals(23, o.readOnlyIntNWrapper.value)
o.intNWrapper = IntNWrapper(null)
assertEquals(null, o.readOnlyIntNWrapper.value)
assertEquals(null, o.readOnlyIntNWrapperN?.value)
o.intNWrapperN = IntNWrapper(65)
assertEquals(65, o.readOnlyIntNWrapperN?.value)
o.intNWrapperN = IntNWrapper(null)
assertEquals(null, o.readOnlyIntNWrapperN?.value)
o.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", o.readOnlyFooWrapper.foo.s)
assertEquals(null, o.readOnlyFooWrapperN?.foo?.s)
o.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", o.readOnlyFooWrapperN?.foo?.s)
o.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", o.readOnlyFooNWrapper.fooN?.s)
o.fooNWrapper = FooNWrapper(null)
assertEquals(null, o.readOnlyFooNWrapper.fooN?.s)
assertEquals(null, o.readOnlyFooNWrapperN?.fooN?.s)
o.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", o.readOnlyFooNWrapperN?.fooN?.s)
o.fooNWrapperN = FooNWrapper(null)
assertEquals(null, o.readOnlyFooNWrapperN?.fooN?.s)
o.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", o.readOnlyNativeFooWrapper.nativeFoo.s)
assertEquals(null, o.readOnlyNativeFooWrapperN?.nativeFoo?.s)
o.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", o.readOnlyNativeFooWrapperN?.nativeFoo?.s)
o.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", o.readOnlyNativeFooNWrapper.nativeFooN?.s)
o.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, o.readOnlyNativeFooNWrapper.nativeFooN?.s)
assertEquals(null, o.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", o.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, o.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
}
fun testClassMethodsWithValueClassInReturnType() {
val o = makeEmptyTestClassInstance()
o.intWrapper = IntWrapper(42)
assertEquals(42, o.getIntWrapper().value)
assertEquals(null, o.getIntWrapperN()?.value)
o.intWrapperN = IntWrapper(100)
assertEquals(100, o.getIntWrapperN()?.value)
o.intNWrapper = IntNWrapper(23)
assertEquals(23, o.getIntNWrapper().value)
o.intNWrapper = IntNWrapper(null)
assertEquals(null, o.getIntNWrapper().value)
assertEquals(null, o.getIntNWrapperN()?.value)
o.intNWrapperN = IntNWrapper(65)
assertEquals(65, o.getIntNWrapperN()?.value)
o.intNWrapperN = IntNWrapper(null)
assertEquals(null, o.getIntNWrapperN()?.value)
o.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", o.getFooWrapper().foo.s)
assertEquals(null, o.getFooWrapperN()?.foo?.s)
o.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", o.getFooWrapperN()?.foo?.s)
o.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", o.getFooNWrapper().fooN?.s)
o.fooNWrapper = FooNWrapper(null)
assertEquals(null, o.getFooNWrapper().fooN?.s)
assertEquals(null, o.getFooNWrapperN()?.fooN?.s)
o.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", o.getFooNWrapperN()?.fooN?.s)
o.fooNWrapperN = FooNWrapper(null)
assertEquals(null, o.getFooNWrapperN()?.fooN?.s)
o.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", o.getNativeFooWrapper().nativeFoo.s)
assertEquals(null, o.getNativeFooWrapperN()?.nativeFoo?.s)
o.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", o.getNativeFooWrapperN()?.nativeFoo?.s)
o.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", o.getNativeFooNWrapper().nativeFooN?.s)
o.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, o.getNativeFooNWrapper().nativeFooN?.s)
assertEquals(null, o.getNativeFooNWrapperN()?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", o.getNativeFooNWrapperN()?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, o.getNativeFooNWrapperN()?.nativeFooN?.s)
}
fun testCompanionObjectMethodsWithValueClassesInArgs() {
assertEquals("42 (number)", TestClass.describeIntWrapper(IntWrapper(42)))
assertEquals("100 (number)", TestClass.describeIntWrapperN(IntWrapper(100)))
assertEquals("null (object)", TestClass.describeIntWrapperN(null))
assertEquals("42 (number)", TestClass.describeIntNWrapper(IntNWrapper(42)))
assertEquals("null (object)", TestClass.describeIntNWrapper(IntNWrapper(null)))
assertEquals("IntNWrapper(value=100) (object)", TestClass.describeIntNWrapperN(IntNWrapper(100)))
assertEquals("IntNWrapper(value=null) (object)", TestClass.describeIntNWrapperN(IntNWrapper(null)))
assertEquals("null (object)", TestClass.describeIntNWrapperN(null))
assertEquals("Foo(s=hello) (object)", TestClass.describeFooWrapper(FooWrapper(Foo("hello"))))
assertEquals("Foo(s=goodbye) (object)", TestClass.describeFooWrapperN(FooWrapper(Foo("goodbye"))))
assertEquals("null (object)", TestClass.describeFooWrapperN(null))
assertEquals("Foo(s=hello) (object)", TestClass.describeFooNWrapper(FooNWrapper(Foo("hello"))))
assertEquals("null (object)", TestClass.describeFooNWrapper(FooNWrapper(null)))
assertEquals("FooNWrapper(fooN=Foo(s=goodbye)) (object)", TestClass.describeFooNWrapperN(FooNWrapper(Foo("goodbye"))))
assertEquals("FooNWrapper(fooN=null) (object)", TestClass.describeFooNWrapperN(FooNWrapper(null)))
assertEquals("null (object)", TestClass.describeFooNWrapperN(null))
assertEquals("NativeFoo('hello') (object)", TestClass.describeNativeFooWrapper(NativeFooWrapper(NativeFoo("hello"))))
assertEquals("NativeFoo('goodbye') (object)", TestClass.describeNativeFooWrapperN(NativeFooWrapper(NativeFoo("goodbye"))))
assertEquals("null (object)", TestClass.describeNativeFooWrapperN(null))
assertEquals("NativeFoo('hello') (object)", TestClass.describeNativeFooNWrapper(NativeFooNWrapper(NativeFoo("hello"))))
assertEquals("null (object)", TestClass.describeNativeFooNWrapper(NativeFooNWrapper(null)))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('goodbye')) (object)", TestClass.describeNativeFooNWrapperN(NativeFooNWrapper(NativeFoo("goodbye"))))
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", TestClass.describeNativeFooNWrapperN(NativeFooNWrapper(null)))
assertEquals("null (object)", TestClass.describeNativeFooNWrapperN(null))
}
fun testWritableCompanionObjectProperties() {
assertEquals("null (object)", describeValueOfProperty(TestClass, "intWrapper"))
TestClass.intWrapper = IntWrapper(42)
assertEquals("42 (number)", describeValueOfProperty(TestClass, "intWrapper"))
assertEquals(42, TestClass.intWrapper.value)
assertEquals("null (object)", describeValueOfProperty(TestClass, "intWrapperN"))
TestClass.intWrapperN = IntWrapper(100)
assertEquals("100 (number)", describeValueOfProperty(TestClass, "intWrapperN"))
assertEquals(100, TestClass.intWrapperN?.value)
TestClass.intWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestClass, "intWrapperN"))
assertEquals(null, TestClass.intWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(TestClass, "intNWrapper"))
TestClass.intNWrapper = IntNWrapper(23)
assertEquals("23 (number)", describeValueOfProperty(TestClass, "intNWrapper"))
assertEquals(23, TestClass.intNWrapper.value)
TestClass.intNWrapper = IntNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(TestClass, "intNWrapper"))
assertEquals(null, TestClass.intNWrapper.value)
assertEquals("null (object)", describeValueOfProperty(TestClass, "intNWrapperN"))
TestClass.intNWrapperN = IntNWrapper(65)
assertEquals("IntNWrapper(value=65) (object)", describeValueOfProperty(TestClass, "intNWrapperN"))
assertEquals(65, TestClass.intNWrapperN?.value)
TestClass.intNWrapperN = IntNWrapper(null)
assertEquals("IntNWrapper(value=null) (object)", describeValueOfProperty(TestClass, "intNWrapperN"))
assertEquals(null, TestClass.intNWrapperN?.value)
TestClass.intNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestClass, "intNWrapperN"))
assertEquals(null, TestClass.intNWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooWrapper"))
TestClass.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("Foo(s=cat) (object)", describeValueOfProperty(TestClass, "fooWrapper"))
assertEquals("cat", TestClass.fooWrapper.foo.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooWrapperN"))
TestClass.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("Foo(s=dog) (object)", describeValueOfProperty(TestClass, "fooWrapperN"))
assertEquals("dog", TestClass.fooWrapperN?.foo?.s)
TestClass.fooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooWrapperN"))
assertEquals(null, TestClass.fooWrapperN?.foo?.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooNWrapper"))
TestClass.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("Foo(s=mouse) (object)", describeValueOfProperty(TestClass, "fooNWrapper"))
assertEquals("mouse", TestClass.fooNWrapper.fooN?.s)
TestClass.fooNWrapper = FooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooNWrapper"))
assertEquals(null, TestClass.fooNWrapper.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooNWrapperN"))
TestClass.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("FooNWrapper(fooN=Foo(s=fox)) (object)", describeValueOfProperty(TestClass, "fooNWrapperN"))
assertEquals("fox", TestClass.fooNWrapperN?.fooN?.s)
TestClass.fooNWrapperN = FooNWrapper(null)
assertEquals("FooNWrapper(fooN=null) (object)", describeValueOfProperty(TestClass, "fooNWrapperN"))
assertEquals(null, TestClass.fooNWrapperN?.fooN?.s)
TestClass.fooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestClass, "fooNWrapperN"))
assertEquals(null, TestClass.fooNWrapperN?.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooWrapper"))
TestClass.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("NativeFoo('Berlin') (object)", describeValueOfProperty(TestClass, "nativeFooWrapper"))
assertEquals("Berlin", TestClass.nativeFooWrapper.nativeFoo.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooWrapperN"))
TestClass.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("NativeFoo('Amsterdam') (object)", describeValueOfProperty(TestClass, "nativeFooWrapperN"))
assertEquals("Amsterdam", TestClass.nativeFooWrapperN?.nativeFoo?.s)
TestClass.nativeFooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooWrapperN"))
assertEquals(null, TestClass.nativeFooWrapperN?.nativeFoo?.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooNWrapper"))
TestClass.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("NativeFoo('Saint-Petersburg') (object)", describeValueOfProperty(TestClass, "nativeFooNWrapper"))
assertEquals("Saint-Petersburg", TestClass.nativeFooNWrapper.nativeFooN?.s)
TestClass.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooNWrapper"))
assertEquals(null, TestClass.nativeFooNWrapper.nativeFooN?.s)
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooNWrapperN"))
TestClass.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('Boston')) (object)", describeValueOfProperty(TestClass, "nativeFooNWrapperN"))
assertEquals("Boston", TestClass.nativeFooNWrapperN?.nativeFooN?.s)
TestClass.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeValueOfProperty(TestClass, "nativeFooNWrapperN"))
assertEquals(null, TestClass.nativeFooNWrapperN?.nativeFooN?.s)
TestClass.nativeFooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestClass, "nativeFooNWrapperN"))
assertEquals(null, TestClass.nativeFooNWrapperN?.nativeFooN?.s)
nullifyTestProperties(TestClass)
}
fun testReadOnlyCompanionObjectProperties() {
TestClass.intWrapper = IntWrapper(42)
assertEquals(42, TestClass.readOnlyIntWrapper.value)
assertEquals(null, TestClass.readOnlyIntWrapperN?.value)
TestClass.intWrapperN = IntWrapper(100)
assertEquals(100, TestClass.readOnlyIntWrapperN?.value)
TestClass.intNWrapper = IntNWrapper(23)
assertEquals(23, TestClass.readOnlyIntNWrapper.value)
TestClass.intNWrapper = IntNWrapper(null)
assertEquals(null, TestClass.readOnlyIntNWrapper.value)
assertEquals(null, TestClass.readOnlyIntNWrapperN?.value)
TestClass.intNWrapperN = IntNWrapper(65)
assertEquals(65, TestClass.readOnlyIntNWrapperN?.value)
TestClass.intNWrapperN = IntNWrapper(null)
assertEquals(null, TestClass.readOnlyIntNWrapperN?.value)
TestClass.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", TestClass.readOnlyFooWrapper.foo.s)
assertEquals(null, TestClass.readOnlyFooWrapperN?.foo?.s)
TestClass.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", TestClass.readOnlyFooWrapperN?.foo?.s)
TestClass.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", TestClass.readOnlyFooNWrapper.fooN?.s)
TestClass.fooNWrapper = FooNWrapper(null)
assertEquals(null, TestClass.readOnlyFooNWrapper.fooN?.s)
assertEquals(null, TestClass.readOnlyFooNWrapperN?.fooN?.s)
TestClass.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", TestClass.readOnlyFooNWrapperN?.fooN?.s)
TestClass.fooNWrapperN = FooNWrapper(null)
assertEquals(null, TestClass.readOnlyFooNWrapperN?.fooN?.s)
TestClass.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", TestClass.readOnlyNativeFooWrapper.nativeFoo.s)
assertEquals(null, TestClass.readOnlyNativeFooWrapperN?.nativeFoo?.s)
TestClass.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", TestClass.readOnlyNativeFooWrapperN?.nativeFoo?.s)
TestClass.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", TestClass.readOnlyNativeFooNWrapper.nativeFooN?.s)
TestClass.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, TestClass.readOnlyNativeFooNWrapper.nativeFooN?.s)
assertEquals(null, TestClass.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
TestClass.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", TestClass.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
TestClass.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, TestClass.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
nullifyTestProperties(TestClass)
}
fun testCompanionObjectMethodsWithValueClassinReturnType() {
TestClass.intWrapper = IntWrapper(42)
assertEquals(42, TestClass.getIntWrapper().value)
assertEquals(null, TestClass.getIntWrapperN()?.value)
TestClass.intWrapperN = IntWrapper(100)
assertEquals(100, TestClass.getIntWrapperN()?.value)
TestClass.intNWrapper = IntNWrapper(23)
assertEquals(23, TestClass.getIntNWrapper().value)
TestClass.intNWrapper = IntNWrapper(null)
assertEquals(null, TestClass.getIntNWrapper().value)
assertEquals(null, TestClass.getIntNWrapperN()?.value)
TestClass.intNWrapperN = IntNWrapper(65)
assertEquals(65, TestClass.getIntNWrapperN()?.value)
TestClass.intNWrapperN = IntNWrapper(null)
assertEquals(null, TestClass.getIntNWrapperN()?.value)
TestClass.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", TestClass.getFooWrapper().foo.s)
assertEquals(null, TestClass.getFooWrapperN()?.foo?.s)
TestClass.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", TestClass.getFooWrapperN()?.foo?.s)
TestClass.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", TestClass.getFooNWrapper().fooN?.s)
TestClass.fooNWrapper = FooNWrapper(null)
assertEquals(null, TestClass.getFooNWrapper().fooN?.s)
assertEquals(null, TestClass.getFooNWrapperN()?.fooN?.s)
TestClass.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", TestClass.getFooNWrapperN()?.fooN?.s)
TestClass.fooNWrapperN = FooNWrapper(null)
assertEquals(null, TestClass.getFooNWrapperN()?.fooN?.s)
TestClass.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", TestClass.getNativeFooWrapper().nativeFoo.s)
assertEquals(null, TestClass.getNativeFooWrapperN()?.nativeFoo?.s)
TestClass.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", TestClass.getNativeFooWrapperN()?.nativeFoo?.s)
TestClass.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", TestClass.getNativeFooNWrapper().nativeFooN?.s)
TestClass.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, TestClass.getNativeFooNWrapper().nativeFooN?.s)
assertEquals(null, TestClass.getNativeFooNWrapperN()?.nativeFooN?.s)
TestClass.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", TestClass.getNativeFooNWrapperN()?.nativeFooN?.s)
TestClass.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, TestClass.getNativeFooNWrapperN()?.nativeFooN?.s)
nullifyTestProperties(TestClass)
}
external interface TestInterface {
fun describeIntWrapper(x: IntWrapper): String
fun describeIntWrapperN(x: IntWrapper?): String
fun describeIntNWrapper(x: IntNWrapper): String
fun describeIntNWrapperN(x: /*boxed*/ IntNWrapper?): String
fun describeFooWrapper(x: FooWrapper): String
fun describeFooWrapperN(x: FooWrapper?): String
fun describeFooNWrapper(x: FooNWrapper): String
fun describeFooNWrapperN(x: /*boxed*/ FooNWrapper?): String
fun describeNativeFooWrapper(x: NativeFooWrapper): String
fun describeNativeFooWrapperN(x: NativeFooWrapper?): String
fun describeNativeFooNWrapper(x: NativeFooNWrapper): String
fun describeNativeFooNWrapperN(x: /*boxed*/ NativeFooNWrapper?): String
var intWrapper: IntWrapper
var intWrapperN: IntWrapper?
var intNWrapper: IntNWrapper
var intNWrapperN: /*boxed*/ IntNWrapper?
var fooWrapper: FooWrapper
var fooWrapperN: FooWrapper?
var fooNWrapper: FooNWrapper
var fooNWrapperN: /*boxed*/ FooNWrapper?
var nativeFooWrapper: NativeFooWrapper
var nativeFooWrapperN: NativeFooWrapper?
var nativeFooNWrapper: NativeFooNWrapper
var nativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
val readOnlyIntWrapper: IntWrapper
val readOnlyIntWrapperN: IntWrapper?
val readOnlyIntNWrapper: IntNWrapper
val readOnlyIntNWrapperN: /*boxed*/ IntNWrapper?
val readOnlyFooWrapper: FooWrapper
val readOnlyFooWrapperN: FooWrapper?
val readOnlyFooNWrapper: FooNWrapper
val readOnlyFooNWrapperN: /*boxed*/ FooNWrapper?
val readOnlyNativeFooWrapper: NativeFooWrapper
val readOnlyNativeFooWrapperN: NativeFooWrapper?
val readOnlyNativeFooNWrapper: NativeFooNWrapper
val readOnlyNativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
fun getIntWrapper(): IntWrapper
fun getIntWrapperN(): IntWrapper?
fun getIntNWrapper(): IntNWrapper
fun getIntNWrapperN(): /*boxed*/ IntNWrapper?
fun getFooWrapper(): FooWrapper
fun getFooWrapperN(): FooWrapper?
fun getFooNWrapper(): FooNWrapper
fun getFooNWrapperN(): /*boxed*/ FooNWrapper?
fun getNativeFooWrapper(): NativeFooWrapper
fun getNativeFooWrapperN(): NativeFooWrapper?
fun getNativeFooNWrapper(): NativeFooNWrapper
fun getNativeFooNWrapperN(): /*boxed*/ NativeFooNWrapper?
}
fun testInterfaceMethodsWithValueClassesInArgs() {
val o = makeTestInterfaceInstance()
assertEquals("42 (number)", o.describeIntWrapper(IntWrapper(42)))
assertEquals("100 (number)", o.describeIntWrapperN(IntWrapper(100)))
assertEquals("null (object)", o.describeIntWrapperN(null))
assertEquals("42 (number)", o.describeIntNWrapper(IntNWrapper(42)))
assertEquals("null (object)", o.describeIntNWrapper(IntNWrapper(null)))
assertEquals("IntNWrapper(value=100) (object)", o.describeIntNWrapperN(IntNWrapper(100)))
assertEquals("IntNWrapper(value=null) (object)", o.describeIntNWrapperN(IntNWrapper(null)))
assertEquals("null (object)", o.describeIntNWrapperN(null))
assertEquals("Foo(s=hello) (object)", o.describeFooWrapper(FooWrapper(Foo("hello"))))
assertEquals("Foo(s=goodbye) (object)", o.describeFooWrapperN(FooWrapper(Foo("goodbye"))))
assertEquals("null (object)", o.describeFooWrapperN(null))
assertEquals("Foo(s=hello) (object)", o.describeFooNWrapper(FooNWrapper(Foo("hello"))))
assertEquals("null (object)", o.describeFooNWrapper(FooNWrapper(null)))
assertEquals("FooNWrapper(fooN=Foo(s=goodbye)) (object)", o.describeFooNWrapperN(FooNWrapper(Foo("goodbye"))))
assertEquals("FooNWrapper(fooN=null) (object)", o.describeFooNWrapperN(FooNWrapper(null)))
assertEquals("null (object)", o.describeFooNWrapperN(null))
assertEquals("NativeFoo('hello') (object)", o.describeNativeFooWrapper(NativeFooWrapper(NativeFoo("hello"))))
assertEquals("NativeFoo('goodbye') (object)", o.describeNativeFooWrapperN(NativeFooWrapper(NativeFoo("goodbye"))))
assertEquals("null (object)", o.describeNativeFooWrapperN(null))
assertEquals("NativeFoo('hello') (object)", o.describeNativeFooNWrapper(NativeFooNWrapper(NativeFoo("hello"))))
assertEquals("null (object)", o.describeNativeFooNWrapper(NativeFooNWrapper(null)))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('goodbye')) (object)", o.describeNativeFooNWrapperN(NativeFooNWrapper(NativeFoo("goodbye"))))
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", o.describeNativeFooNWrapperN(NativeFooNWrapper(null)))
assertEquals("null (object)", o.describeNativeFooNWrapperN(null))
}
fun testWritableInterfaceProperties() {
val o = makeTestInterfaceInstance()
assertEquals("null (object)", describeValueOfProperty(o, "intWrapper"))
o.intWrapper = IntWrapper(42)
assertEquals("42 (number)", describeValueOfProperty(o, "intWrapper"))
assertEquals(42, o.intWrapper.value)
assertEquals("null (object)", describeValueOfProperty(o, "intWrapperN"))
o.intWrapperN = IntWrapper(100)
assertEquals("100 (number)", describeValueOfProperty(o, "intWrapperN"))
assertEquals(100, o.intWrapperN?.value)
o.intWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "intWrapperN"))
assertEquals(null, o.intWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapper"))
o.intNWrapper = IntNWrapper(23)
assertEquals("23 (number)", describeValueOfProperty(o, "intNWrapper"))
assertEquals(23, o.intNWrapper.value)
o.intNWrapper = IntNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapper"))
assertEquals(null, o.intNWrapper.value)
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapperN"))
o.intNWrapperN = IntNWrapper(65)
assertEquals("IntNWrapper(value=65) (object)", describeValueOfProperty(o, "intNWrapperN"))
assertEquals(65, o.intNWrapperN?.value)
o.intNWrapperN = IntNWrapper(null)
assertEquals("IntNWrapper(value=null) (object)", describeValueOfProperty(o, "intNWrapperN"))
assertEquals(null, o.intNWrapperN?.value)
o.intNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "intNWrapperN"))
assertEquals(null, o.intNWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(o, "fooWrapper"))
o.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("Foo(s=cat) (object)", describeValueOfProperty(o, "fooWrapper"))
assertEquals("cat", o.fooWrapper.foo.s)
assertEquals("null (object)", describeValueOfProperty(o, "fooWrapperN"))
o.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("Foo(s=dog) (object)", describeValueOfProperty(o, "fooWrapperN"))
assertEquals("dog", o.fooWrapperN?.foo?.s)
o.fooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "fooWrapperN"))
assertEquals(null, o.fooWrapperN?.foo?.s)
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapper"))
o.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("Foo(s=mouse) (object)", describeValueOfProperty(o, "fooNWrapper"))
assertEquals("mouse", o.fooNWrapper.fooN?.s)
o.fooNWrapper = FooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapper"))
assertEquals(null, o.fooNWrapper.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapperN"))
o.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("FooNWrapper(fooN=Foo(s=fox)) (object)", describeValueOfProperty(o, "fooNWrapperN"))
assertEquals("fox", o.fooNWrapperN?.fooN?.s)
o.fooNWrapperN = FooNWrapper(null)
assertEquals("FooNWrapper(fooN=null) (object)", describeValueOfProperty(o, "fooNWrapperN"))
assertEquals(null, o.fooNWrapperN?.fooN?.s)
o.fooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "fooNWrapperN"))
assertEquals(null, o.fooNWrapperN?.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooWrapper"))
o.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("NativeFoo('Berlin') (object)", describeValueOfProperty(o, "nativeFooWrapper"))
assertEquals("Berlin", o.nativeFooWrapper.nativeFoo.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooWrapperN"))
o.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("NativeFoo('Amsterdam') (object)", describeValueOfProperty(o, "nativeFooWrapperN"))
assertEquals("Amsterdam", o.nativeFooWrapperN?.nativeFoo?.s)
o.nativeFooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooWrapperN"))
assertEquals(null, o.nativeFooWrapperN?.nativeFoo?.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapper"))
o.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("NativeFoo('Saint-Petersburg') (object)", describeValueOfProperty(o, "nativeFooNWrapper"))
assertEquals("Saint-Petersburg", o.nativeFooNWrapper.nativeFooN?.s)
o.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapper"))
assertEquals(null, o.nativeFooNWrapper.nativeFooN?.s)
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
o.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('Boston')) (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
assertEquals("Boston", o.nativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
assertEquals(null, o.nativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(o, "nativeFooNWrapperN"))
assertEquals(null, o.nativeFooNWrapperN?.nativeFooN?.s)
}
fun testReadOnlyInterfaceProperties() {
val o = makeTestInterfaceInstance()
o.intWrapper = IntWrapper(42)
assertEquals(42, o.readOnlyIntWrapper.value)
assertEquals(null, o.readOnlyIntWrapperN?.value)
o.intWrapperN = IntWrapper(100)
assertEquals(100, o.readOnlyIntWrapperN?.value)
o.intNWrapper = IntNWrapper(23)
assertEquals(23, o.readOnlyIntNWrapper.value)
o.intNWrapper = IntNWrapper(null)
assertEquals(null, o.readOnlyIntNWrapper.value)
assertEquals(null, o.readOnlyIntNWrapperN?.value)
o.intNWrapperN = IntNWrapper(65)
assertEquals(65, o.readOnlyIntNWrapperN?.value)
o.intNWrapperN = IntNWrapper(null)
assertEquals(null, o.readOnlyIntNWrapperN?.value)
o.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", o.readOnlyFooWrapper.foo.s)
assertEquals(null, o.readOnlyFooWrapperN?.foo?.s)
o.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", o.readOnlyFooWrapperN?.foo?.s)
o.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", o.readOnlyFooNWrapper.fooN?.s)
o.fooNWrapper = FooNWrapper(null)
assertEquals(null, o.readOnlyFooNWrapper.fooN?.s)
assertEquals(null, o.readOnlyFooNWrapperN?.fooN?.s)
o.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", o.readOnlyFooNWrapperN?.fooN?.s)
o.fooNWrapperN = FooNWrapper(null)
assertEquals(null, o.readOnlyFooNWrapperN?.fooN?.s)
o.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", o.readOnlyNativeFooWrapper.nativeFoo.s)
assertEquals(null, o.readOnlyNativeFooWrapperN?.nativeFoo?.s)
o.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", o.readOnlyNativeFooWrapperN?.nativeFoo?.s)
o.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", o.readOnlyNativeFooNWrapper.nativeFooN?.s)
o.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, o.readOnlyNativeFooNWrapper.nativeFooN?.s)
assertEquals(null, o.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", o.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, o.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
}
fun testInterfaceMethodsWithValueClassInReturnType() {
val o = makeTestInterfaceInstance()
o.intWrapper = IntWrapper(42)
assertEquals(42, o.getIntWrapper().value)
assertEquals(null, o.getIntWrapperN()?.value)
o.intWrapperN = IntWrapper(100)
assertEquals(100, o.getIntWrapperN()?.value)
o.intNWrapper = IntNWrapper(23)
assertEquals(23, o.getIntNWrapper().value)
o.intNWrapper = IntNWrapper(null)
assertEquals(null, o.getIntNWrapper().value)
assertEquals(null, o.getIntNWrapperN()?.value)
o.intNWrapperN = IntNWrapper(65)
assertEquals(65, o.getIntNWrapperN()?.value)
o.intNWrapperN = IntNWrapper(null)
assertEquals(null, o.getIntNWrapperN()?.value)
o.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", o.getFooWrapper().foo.s)
assertEquals(null, o.getFooWrapperN()?.foo?.s)
o.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", o.getFooWrapperN()?.foo?.s)
o.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", o.getFooNWrapper().fooN?.s)
o.fooNWrapper = FooNWrapper(null)
assertEquals(null, o.getFooNWrapper().fooN?.s)
assertEquals(null, o.getFooNWrapperN()?.fooN?.s)
o.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", o.getFooNWrapperN()?.fooN?.s)
o.fooNWrapperN = FooNWrapper(null)
assertEquals(null, o.getFooNWrapperN()?.fooN?.s)
o.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", o.getNativeFooWrapper().nativeFoo.s)
assertEquals(null, o.getNativeFooWrapperN()?.nativeFoo?.s)
o.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", o.getNativeFooWrapperN()?.nativeFoo?.s)
o.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", o.getNativeFooNWrapper().nativeFooN?.s)
o.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, o.getNativeFooNWrapper().nativeFooN?.s)
assertEquals(null, o.getNativeFooNWrapperN()?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", o.getNativeFooNWrapperN()?.nativeFooN?.s)
o.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, o.getNativeFooNWrapperN()?.nativeFooN?.s)
}
external object TestObject {
fun describeIntWrapper(x: IntWrapper): String
fun describeIntWrapperN(x: IntWrapper?): String
fun describeIntNWrapper(x: IntNWrapper): String
fun describeIntNWrapperN(x: /*boxed*/ IntNWrapper?): String
fun describeFooWrapper(x: FooWrapper): String
fun describeFooWrapperN(x: FooWrapper?): String
fun describeFooNWrapper(x: FooNWrapper): String
fun describeFooNWrapperN(x: /*boxed*/ FooNWrapper?): String
fun describeNativeFooWrapper(x: NativeFooWrapper): String
fun describeNativeFooWrapperN(x: NativeFooWrapper?): String
fun describeNativeFooNWrapper(x: NativeFooNWrapper): String
fun describeNativeFooNWrapperN(x: /*boxed*/ NativeFooNWrapper?): String
var intWrapper: IntWrapper
var intWrapperN: IntWrapper?
var intNWrapper: IntNWrapper
var intNWrapperN: /*boxed*/ IntNWrapper?
var fooWrapper: FooWrapper
var fooWrapperN: FooWrapper?
var fooNWrapper: FooNWrapper
var fooNWrapperN: /*boxed*/ FooNWrapper?
var nativeFooWrapper: NativeFooWrapper
var nativeFooWrapperN: NativeFooWrapper?
var nativeFooNWrapper: NativeFooNWrapper
var nativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
val readOnlyIntWrapper: IntWrapper
val readOnlyIntWrapperN: IntWrapper?
val readOnlyIntNWrapper: IntNWrapper
val readOnlyIntNWrapperN: /*boxed*/ IntNWrapper?
val readOnlyFooWrapper: FooWrapper
val readOnlyFooWrapperN: FooWrapper?
val readOnlyFooNWrapper: FooNWrapper
val readOnlyFooNWrapperN: /*boxed*/ FooNWrapper?
val readOnlyNativeFooWrapper: NativeFooWrapper
val readOnlyNativeFooWrapperN: NativeFooWrapper?
val readOnlyNativeFooNWrapper: NativeFooNWrapper
val readOnlyNativeFooNWrapperN: /*boxed*/ NativeFooNWrapper?
fun getIntWrapper(): IntWrapper
fun getIntWrapperN(): IntWrapper?
fun getIntNWrapper(): IntNWrapper
fun getIntNWrapperN(): /*boxed*/ IntNWrapper?
fun getFooWrapper(): FooWrapper
fun getFooWrapperN(): FooWrapper?
fun getFooNWrapper(): FooNWrapper
fun getFooNWrapperN(): /*boxed*/ FooNWrapper?
fun getNativeFooWrapper(): NativeFooWrapper
fun getNativeFooWrapperN(): NativeFooWrapper?
fun getNativeFooNWrapper(): NativeFooNWrapper
fun getNativeFooNWrapperN(): /*boxed*/ NativeFooNWrapper?
}
fun testObjectMethodsWithValueClassesInArgs() {
assertEquals("42 (number)", TestObject.describeIntWrapper(IntWrapper(42)))
assertEquals("100 (number)", TestObject.describeIntWrapperN(IntWrapper(100)))
assertEquals("null (object)", TestObject.describeIntWrapperN(null))
assertEquals("42 (number)", TestObject.describeIntNWrapper(IntNWrapper(42)))
assertEquals("null (object)", TestObject.describeIntNWrapper(IntNWrapper(null)))
assertEquals("IntNWrapper(value=100) (object)", TestObject.describeIntNWrapperN(IntNWrapper(100)))
assertEquals("IntNWrapper(value=null) (object)", TestObject.describeIntNWrapperN(IntNWrapper(null)))
assertEquals("null (object)", TestObject.describeIntNWrapperN(null))
assertEquals("Foo(s=hello) (object)", TestObject.describeFooWrapper(FooWrapper(Foo("hello"))))
assertEquals("Foo(s=goodbye) (object)", TestObject.describeFooWrapperN(FooWrapper(Foo("goodbye"))))
assertEquals("null (object)", TestObject.describeFooWrapperN(null))
assertEquals("Foo(s=hello) (object)", TestObject.describeFooNWrapper(FooNWrapper(Foo("hello"))))
assertEquals("null (object)", TestObject.describeFooNWrapper(FooNWrapper(null)))
assertEquals("FooNWrapper(fooN=Foo(s=goodbye)) (object)", TestObject.describeFooNWrapperN(FooNWrapper(Foo("goodbye"))))
assertEquals("FooNWrapper(fooN=null) (object)", TestObject.describeFooNWrapperN(FooNWrapper(null)))
assertEquals("null (object)", TestObject.describeFooNWrapperN(null))
assertEquals("NativeFoo('hello') (object)", TestObject.describeNativeFooWrapper(NativeFooWrapper(NativeFoo("hello"))))
assertEquals("NativeFoo('goodbye') (object)", TestObject.describeNativeFooWrapperN(NativeFooWrapper(NativeFoo("goodbye"))))
assertEquals("null (object)", TestObject.describeNativeFooWrapperN(null))
assertEquals("NativeFoo('hello') (object)", TestObject.describeNativeFooNWrapper(NativeFooNWrapper(NativeFoo("hello"))))
assertEquals("null (object)", TestObject.describeNativeFooNWrapper(NativeFooNWrapper(null)))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('goodbye')) (object)", TestObject.describeNativeFooNWrapperN(NativeFooNWrapper(NativeFoo("goodbye"))))
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", TestObject.describeNativeFooNWrapperN(NativeFooNWrapper(null)))
assertEquals("null (object)", TestObject.describeNativeFooNWrapperN(null))
}
fun testWritableObjectProperties() {
assertEquals("null (object)", describeValueOfProperty(TestObject, "intWrapper"))
TestObject.intWrapper = IntWrapper(42)
assertEquals("42 (number)", describeValueOfProperty(TestObject, "intWrapper"))
assertEquals(42, TestObject.intWrapper.value)
assertEquals("null (object)", describeValueOfProperty(TestObject, "intWrapperN"))
TestObject.intWrapperN = IntWrapper(100)
assertEquals("100 (number)", describeValueOfProperty(TestObject, "intWrapperN"))
assertEquals(100, TestObject.intWrapperN?.value)
TestObject.intWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestObject, "intWrapperN"))
assertEquals(null, TestObject.intWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(TestObject, "intNWrapper"))
TestObject.intNWrapper = IntNWrapper(23)
assertEquals("23 (number)", describeValueOfProperty(TestObject, "intNWrapper"))
assertEquals(23, TestObject.intNWrapper.value)
TestObject.intNWrapper = IntNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(TestObject, "intNWrapper"))
assertEquals(null, TestObject.intNWrapper.value)
assertEquals("null (object)", describeValueOfProperty(TestObject, "intNWrapperN"))
TestObject.intNWrapperN = IntNWrapper(65)
assertEquals("IntNWrapper(value=65) (object)", describeValueOfProperty(TestObject, "intNWrapperN"))
assertEquals(65, TestObject.intNWrapperN?.value)
TestObject.intNWrapperN = IntNWrapper(null)
assertEquals("IntNWrapper(value=null) (object)", describeValueOfProperty(TestObject, "intNWrapperN"))
assertEquals(null, TestObject.intNWrapperN?.value)
TestObject.intNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestObject, "intNWrapperN"))
assertEquals(null, TestObject.intNWrapperN?.value)
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooWrapper"))
TestObject.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("Foo(s=cat) (object)", describeValueOfProperty(TestObject, "fooWrapper"))
assertEquals("cat", TestObject.fooWrapper.foo.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooWrapperN"))
TestObject.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("Foo(s=dog) (object)", describeValueOfProperty(TestObject, "fooWrapperN"))
assertEquals("dog", TestObject.fooWrapperN?.foo?.s)
TestObject.fooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooWrapperN"))
assertEquals(null, TestObject.fooWrapperN?.foo?.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooNWrapper"))
TestObject.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("Foo(s=mouse) (object)", describeValueOfProperty(TestObject, "fooNWrapper"))
assertEquals("mouse", TestObject.fooNWrapper.fooN?.s)
TestObject.fooNWrapper = FooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooNWrapper"))
assertEquals(null, TestObject.fooNWrapper.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooNWrapperN"))
TestObject.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("FooNWrapper(fooN=Foo(s=fox)) (object)", describeValueOfProperty(TestObject, "fooNWrapperN"))
assertEquals("fox", TestObject.fooNWrapperN?.fooN?.s)
TestObject.fooNWrapperN = FooNWrapper(null)
assertEquals("FooNWrapper(fooN=null) (object)", describeValueOfProperty(TestObject, "fooNWrapperN"))
assertEquals(null, TestObject.fooNWrapperN?.fooN?.s)
TestObject.fooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestObject, "fooNWrapperN"))
assertEquals(null, TestObject.fooNWrapperN?.fooN?.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooWrapper"))
TestObject.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("NativeFoo('Berlin') (object)", describeValueOfProperty(TestObject, "nativeFooWrapper"))
assertEquals("Berlin", TestObject.nativeFooWrapper.nativeFoo.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooWrapperN"))
TestObject.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("NativeFoo('Amsterdam') (object)", describeValueOfProperty(TestObject, "nativeFooWrapperN"))
assertEquals("Amsterdam", TestObject.nativeFooWrapperN?.nativeFoo?.s)
TestObject.nativeFooWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooWrapperN"))
assertEquals(null, TestObject.nativeFooWrapperN?.nativeFoo?.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooNWrapper"))
TestObject.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("NativeFoo('Saint-Petersburg') (object)", describeValueOfProperty(TestObject, "nativeFooNWrapper"))
assertEquals("Saint-Petersburg", TestObject.nativeFooNWrapper.nativeFooN?.s)
TestObject.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooNWrapper"))
assertEquals(null, TestObject.nativeFooNWrapper.nativeFooN?.s)
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooNWrapperN"))
TestObject.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("NativeFooNWrapper(nativeFooN=NativeFoo('Boston')) (object)", describeValueOfProperty(TestObject, "nativeFooNWrapperN"))
assertEquals("Boston", TestObject.nativeFooNWrapperN?.nativeFooN?.s)
TestObject.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals("NativeFooNWrapper(nativeFooN=null) (object)", describeValueOfProperty(TestObject, "nativeFooNWrapperN"))
assertEquals(null, TestObject.nativeFooNWrapperN?.nativeFooN?.s)
TestObject.nativeFooNWrapperN = null
assertEquals("null (object)", describeValueOfProperty(TestObject, "nativeFooNWrapperN"))
assertEquals(null, TestObject.nativeFooNWrapperN?.nativeFooN?.s)
nullifyTestProperties(TestObject)
}
fun testReadOnlyObjectProperties() {
TestObject.intWrapper = IntWrapper(42)
assertEquals(42, TestObject.readOnlyIntWrapper.value)
assertEquals(null, TestObject.readOnlyIntWrapperN?.value)
TestObject.intWrapperN = IntWrapper(100)
assertEquals(100, TestObject.readOnlyIntWrapperN?.value)
TestObject.intNWrapper = IntNWrapper(23)
assertEquals(23, TestObject.readOnlyIntNWrapper.value)
TestObject.intNWrapper = IntNWrapper(null)
assertEquals(null, TestObject.readOnlyIntNWrapper.value)
assertEquals(null, TestObject.readOnlyIntNWrapperN?.value)
TestObject.intNWrapperN = IntNWrapper(65)
assertEquals(65, TestObject.readOnlyIntNWrapperN?.value)
TestObject.intNWrapperN = IntNWrapper(null)
assertEquals(null, TestObject.readOnlyIntNWrapperN?.value)
TestObject.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", TestObject.readOnlyFooWrapper.foo.s)
assertEquals(null, TestObject.readOnlyFooWrapperN?.foo?.s)
TestObject.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", TestObject.readOnlyFooWrapperN?.foo?.s)
TestObject.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", TestObject.readOnlyFooNWrapper.fooN?.s)
TestObject.fooNWrapper = FooNWrapper(null)
assertEquals(null, TestObject.readOnlyFooNWrapper.fooN?.s)
assertEquals(null, TestObject.readOnlyFooNWrapperN?.fooN?.s)
TestObject.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", TestObject.readOnlyFooNWrapperN?.fooN?.s)
TestObject.fooNWrapperN = FooNWrapper(null)
assertEquals(null, TestObject.readOnlyFooNWrapperN?.fooN?.s)
TestObject.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", TestObject.readOnlyNativeFooWrapper.nativeFoo.s)
assertEquals(null, TestObject.readOnlyNativeFooWrapperN?.nativeFoo?.s)
TestObject.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", TestObject.readOnlyNativeFooWrapperN?.nativeFoo?.s)
TestObject.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", TestObject.readOnlyNativeFooNWrapper.nativeFooN?.s)
TestObject.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, TestObject.readOnlyNativeFooNWrapper.nativeFooN?.s)
assertEquals(null, TestObject.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
TestObject.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", TestObject.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
TestObject.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, TestObject.readOnlyNativeFooNWrapperN?.nativeFooN?.s)
nullifyTestProperties(TestObject)
}
fun testObjectMethodsWithValueClassinReturnType() {
TestObject.intWrapper = IntWrapper(42)
assertEquals(42, TestObject.getIntWrapper().value)
assertEquals(null, TestObject.getIntWrapperN()?.value)
TestObject.intWrapperN = IntWrapper(100)
assertEquals(100, TestObject.getIntWrapperN()?.value)
TestObject.intNWrapper = IntNWrapper(23)
assertEquals(23, TestObject.getIntNWrapper().value)
TestObject.intNWrapper = IntNWrapper(null)
assertEquals(null, TestObject.getIntNWrapper().value)
assertEquals(null, TestObject.getIntNWrapperN()?.value)
TestObject.intNWrapperN = IntNWrapper(65)
assertEquals(65, TestObject.getIntNWrapperN()?.value)
TestObject.intNWrapperN = IntNWrapper(null)
assertEquals(null, TestObject.getIntNWrapperN()?.value)
TestObject.fooWrapper = FooWrapper(Foo("cat"))
assertEquals("cat", TestObject.getFooWrapper().foo.s)
assertEquals(null, TestObject.getFooWrapperN()?.foo?.s)
TestObject.fooWrapperN = FooWrapper(Foo("dog"))
assertEquals("dog", TestObject.getFooWrapperN()?.foo?.s)
TestObject.fooNWrapper = FooNWrapper(Foo("mouse"))
assertEquals("mouse", TestObject.getFooNWrapper().fooN?.s)
TestObject.fooNWrapper = FooNWrapper(null)
assertEquals(null, TestObject.getFooNWrapper().fooN?.s)
assertEquals(null, TestObject.getFooNWrapperN()?.fooN?.s)
TestObject.fooNWrapperN = FooNWrapper(Foo("fox"))
assertEquals("fox", TestObject.getFooNWrapperN()?.fooN?.s)
TestObject.fooNWrapperN = FooNWrapper(null)
assertEquals(null, TestObject.getFooNWrapperN()?.fooN?.s)
TestObject.nativeFooWrapper = NativeFooWrapper(NativeFoo("Berlin"))
assertEquals("Berlin", TestObject.getNativeFooWrapper().nativeFoo.s)
assertEquals(null, TestObject.getNativeFooWrapperN()?.nativeFoo?.s)
TestObject.nativeFooWrapperN = NativeFooWrapper(NativeFoo("Amsterdam"))
assertEquals("Amsterdam", TestObject.getNativeFooWrapperN()?.nativeFoo?.s)
TestObject.nativeFooNWrapper = NativeFooNWrapper(NativeFoo("Saint-Petersburg"))
assertEquals("Saint-Petersburg", TestObject.getNativeFooNWrapper().nativeFooN?.s)
TestObject.nativeFooNWrapper = NativeFooNWrapper(null)
assertEquals(null, TestObject.getNativeFooNWrapper().nativeFooN?.s)
assertEquals(null, TestObject.getNativeFooNWrapperN()?.nativeFooN?.s)
TestObject.nativeFooNWrapperN = NativeFooNWrapper(NativeFoo("Boston"))
assertEquals("Boston", TestObject.getNativeFooNWrapperN()?.nativeFooN?.s)
TestObject.nativeFooNWrapperN = NativeFooNWrapper(null)
assertEquals(null, TestObject.getNativeFooNWrapperN()?.nativeFooN?.s)
nullifyTestProperties(TestObject)
}
fun box(): String {
testFreeFunctionsWithValueClassesInArgs()
testWritableGlobalProperties()
testReadOnlyGlobalProperties()
testFreeFunctionsWithValueClassInReturnType()
testClassConstructor()
testClassMethodsWithValueClassesInArgs()
testWritableClassProperties()
testReadOnlyClassProperties()
testClassMethodsWithValueClassInReturnType()
testCompanionObjectMethodsWithValueClassesInArgs()
testWritableCompanionObjectProperties()
testReadOnlyCompanionObjectProperties()
testCompanionObjectMethodsWithValueClassinReturnType()
testInterfaceMethodsWithValueClassesInArgs()
testWritableInterfaceProperties()
testReadOnlyInterfaceProperties()
testInterfaceMethodsWithValueClassInReturnType()
testObjectMethodsWithValueClassesInArgs()
testWritableObjectProperties()
testReadOnlyObjectProperties()
testObjectMethodsWithValueClassinReturnType()
return "OK"
}