67dfe7bed1
#KT-35100 Fixed
122 lines
5.2 KiB
Kotlin
Vendored
122 lines
5.2 KiB
Kotlin
Vendored
// See KT-43224
|
|
|
|
external fun actualTypeOfChar(x: Char): String
|
|
external fun actualTypeOfMaybeChar(x: Char?): String
|
|
|
|
external fun getSomeChar(): Char
|
|
external fun getMaybeChar(): Char?
|
|
external fun getCharNull(): Char?
|
|
|
|
external val charVal: Char
|
|
external val maybeCharVal: Char?
|
|
external val charNullVal: Char?
|
|
|
|
external var charVar: Char
|
|
external var maybeCharVar: Char?
|
|
|
|
external interface I {
|
|
fun foo(): Char
|
|
fun maybeFoo(): Char?
|
|
fun fooNull(): Char?
|
|
fun actualTypeOfChar(x: Char): String
|
|
fun actualTypeOfMaybeChar(x: Char?): String
|
|
|
|
val bar: Char
|
|
val maybeBar: Char?
|
|
val barNull: Char?
|
|
|
|
var baz: Char
|
|
var maybeBaz: Char?
|
|
}
|
|
|
|
external class A(c: Char): I {
|
|
override fun foo(): Char
|
|
override fun maybeFoo(): Char?
|
|
override fun fooNull(): Char?
|
|
override fun actualTypeOfChar(x: Char): String
|
|
override fun actualTypeOfMaybeChar(x: Char?): String
|
|
|
|
override val bar: Char
|
|
override val maybeBar: Char?
|
|
override val barNull: Char?
|
|
|
|
override var baz: Char
|
|
override var maybeBaz: Char?
|
|
}
|
|
|
|
val expectedCharRepresentationInProperty = if (testUtils.isLegacyBackend()) "object" else "number"
|
|
|
|
fun box(): String {
|
|
|
|
if (actualTypeOfChar('a') != "number") return "Fail (actualTypeOfChar)"
|
|
if (actualTypeOfMaybeChar('a') != "number") return "Fail (actualTypeOfMaybeChar with nonnull arg)"
|
|
if (actualTypeOfMaybeChar(null) != "object") return "Fail (actualTypeOfMaybeChar with null arg)"
|
|
|
|
if (getSomeChar() != 'a') return "Fail (getSomeChar)"
|
|
if (getMaybeChar() != 'a') return "Fail (getMaybeChar)"
|
|
if (getCharNull() != null) return "Fail (getCharNull)"
|
|
|
|
if (charVal != 'a') return "Fail (charVal)"
|
|
if (maybeCharVal != 'a') return "Fail (maybeCharVal)"
|
|
if (charNullVal != null) return "Fail (charNullVal)"
|
|
|
|
if (charVar != 'a') return "Fail (charVar initial value)"
|
|
charVar = 'b'
|
|
if (js("typeof charVar") != "number") return "Fail (typeof charVar after modification)"
|
|
if (charVar != 'b') return "Fail (charVar after modification)"
|
|
|
|
if (maybeCharVar != null) return "Fail (maybeCharVar initial value)"
|
|
maybeCharVar = 'a'
|
|
if (js("typeof maybeCharVar") != "number") return "Fail (typeof maybeCharVar after 1st modification)"
|
|
if (maybeCharVar != 'a') return "Fail (maybeCharVar after 1st modification)"
|
|
maybeCharVar = null
|
|
if (js("typeof maybeCharVar") != "object") return "Fail (typeof maybeCharVar after 2nd modification)"
|
|
if (maybeCharVar != null) return "Fail (maybeCharVar after 2nd modification)"
|
|
|
|
val a = A('b')
|
|
if (a.foo() != 'b') return "Fail (a.foo())"
|
|
if (a.maybeFoo() != 'b') return "Fail (a.maybeFoo())"
|
|
if (a.fooNull() != null) return "Fail (a.fooNull())"
|
|
if (a.actualTypeOfChar('a') != "number") return "Fail (a.actualTypeOfChar())"
|
|
if (a.actualTypeOfMaybeChar('a') != "number") return "Fail (a.actualTypeOfMaybeChar() with nonnull arg)"
|
|
if (a.actualTypeOfMaybeChar(null) != "object") return "Fail (a.actualTypeOfMaybeChar() with null arg)"
|
|
if (a.bar != 'b') return "Fail (a.bar)"
|
|
if (a.maybeBar != 'b') return "Fail (a.maybeBar)"
|
|
if (a.barNull != null) return "Fail (a.barNull)"
|
|
if (a.baz != 'q') return "Fail (a.baz initial value)"
|
|
a.baz = 'r'
|
|
if (js("typeof a._baz") != expectedCharRepresentationInProperty) return "Fail (typeof a._baz after modification)"
|
|
if (a.baz != 'r') return "Fail (a.baz after modification)"
|
|
if (a.maybeBaz != null) return "Fail (a.maybeBaz initial value)"
|
|
a.maybeBaz = 's'
|
|
if (js("typeof a._nullableBaz") != expectedCharRepresentationInProperty) return "Fail (typeof a._nullableBaz after 1st modification)"
|
|
if (a.maybeBaz != 's') return "Fail (a.maybeBaz after 1st modification)"
|
|
a.maybeBaz = null
|
|
if (js("typeof a._nullableBaz") != "object") return "Fail (typeof a._nullableBaz after 2nd modification)"
|
|
if (a.maybeBaz != null) return "Fail (a.maybeBaz after 2nd modification)"
|
|
|
|
val b: I = A('e')
|
|
if (b.foo() != 'e') return "Fail (b.foo())"
|
|
if (b.maybeFoo() != 'e') return "Fail (b.maybeFoo())"
|
|
if (b.fooNull() != null) return "Fail (b.fooNull())"
|
|
if (b.actualTypeOfChar('a') != "number") return "Fail (b.actualTypeOfChar())"
|
|
if (b.actualTypeOfMaybeChar('a') != "number") return "Fail (b.actualTypeOfMaybeChar() with nonnull arg)"
|
|
if (b.actualTypeOfMaybeChar(null) != "object") return "Fail (b.actualTypeOfMaybeChar() with null arg)"
|
|
if (b.bar != 'e') return "Fail (b.bar)"
|
|
if (b.maybeBar != 'e') return "Fail (b.maybeBar)"
|
|
if (b.barNull != null) return "Fail (b.barNull)"
|
|
if (b.baz != 'q') return "Fail (b.baz initial value)"
|
|
b.baz = 'r'
|
|
if (js("typeof b._baz") != expectedCharRepresentationInProperty) return "Fail (typeof b._baz after modification)"
|
|
if (b.baz != 'r') return "Fail (b.baz after modification)"
|
|
if (b.maybeBaz != null) return "Fail (b.maybeBaz initial value)"
|
|
b.maybeBaz = 's'
|
|
if (js("typeof b._nullableBaz") != expectedCharRepresentationInProperty) return "Fail (typeof b._nullableBaz after 1st modification)"
|
|
if (b.maybeBaz != 's') return "Fail (b.maybeBaz after 1st modification)"
|
|
b.maybeBaz = null
|
|
if (js("typeof b._nullableBaz") != "object") return "Fail (typeof b._nullableBaz after 2nd modification)"
|
|
if (b.maybeBaz != null) return "Fail (b.maybeBaz after 2nd modification)"
|
|
|
|
return "OK"
|
|
}
|