| // RUN_PIPELINE_TILL: FRONTEND |
| |
| // FILE: test.kt |
| import kotlinx.js.JsPlainObject |
| |
| external interface Marker1 |
| external interface Marker2 |
| |
| external interface A { |
| val foo: String |
| } |
| |
| external interface B { |
| val foo: String |
| } |
| |
| external interface C { |
| val foo: String |
| } |
| |
| external interface WrongMarker1 : C |
| external interface WrongMarker2 { |
| val test: String |
| } |
| |
| @JsPlainObject |
| external interface D : <!JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS!>A<!>, <!JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS!>B<!>, <!JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS!>C<!> |
| |
| @JsPlainObject |
| external interface E |
| |
| @JsPlainObject |
| external interface F : Marker1 |
| |
| @JsPlainObject |
| external interface DEF: D, E, F |
| |
| @JsPlainObject |
| external interface G : Marker1, Marker2, <!JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS!>WrongMarker1<!>, <!JS_PLAIN_OBJECT_CAN_EXTEND_ONLY_OTHER_JS_PLAIN_OBJECTS!>WrongMarker2<!> |
| |
| external interface H: A, C, <!IMPLEMENTING_OF_JS_PLAIN_OBJECT_IS_NOT_SUPPORTED!>E<!> |
| |
| class Foo : A, <!IMPLEMENTING_OF_JS_PLAIN_OBJECT_IS_NOT_SUPPORTED!>D<!>, B { |
| override val foo = "Foo" |
| } |
| |
| @JsPlainObject |
| external interface Parent { |
| val name: Any |
| val parentProperty: Any |
| } |
| |
| @JsPlainObject |
| external interface Middle : Parent { |
| override val parentProperty: Int |
| } |
| |
| @JsPlainObject |
| external interface Child : Middle { |
| override val name: String |
| } |
| |
| fun parentChildTest(parent: Parent, middle: Middle, child: Child) { |
| Parent(42, "Test") |
| Middle(42, <!ARGUMENT_TYPE_MISMATCH!>"Test"<!>) |
| Child(<!ARGUMENT_TYPE_MISMATCH!>42<!>, <!ARGUMENT_TYPE_MISMATCH!>"Test"<!>) |
| |
| Parent(42, 43) |
| Middle(42, 43) |
| Child(<!ARGUMENT_TYPE_MISMATCH!>42<!>, 43) |
| |
| Parent("Test", 43) |
| Middle("Test", 43) |
| Child("Test", 43) |
| } |