| package foo |
| |
| import kotlinx.js.JsPlainObject |
| |
| @JsPlainObject |
| external interface User { |
| var name: String |
| val age: Int |
| } |
| |
| @JsPlainObject |
| external interface ExtendedUser : User { |
| val email: String |
| } |
| |
| fun box(): String { |
| val user = ExtendedUser(name = "Name", age = 10, email = "test@test") |
| |
| if (user.name != "Name") return "Fail: problem with `name` property" |
| if (user.age != 10) return "Fail: problem with `age` property" |
| if (user.email != "test@test") return "Fail: problem with `email` property" |
| |
| val json = js("JSON.stringify(user)") |
| if (json != "{\"name\":\"Name\",\"age\":10,\"email\":\"test@test\"}") return "Fail: got the next json: $json" |
| |
| val copy = User.copy(user) |
| val copiedJson = js("JSON.stringify(copy)") |
| if (copiedJson != "{\"name\":\"Name\",\"age\":10,\"email\":\"test@test\"}") return "Fail: got the next json: $copiedJson" |
| |
| val simpleUser = User(name = "Name", age = 10) |
| |
| if (simpleUser.name != "Name") return "Fail: problem with `name` property" |
| if (simpleUser.age != 10) return "Fail: problem with `age` property" |
| |
| val anotherJson = js("JSON.stringify(simpleUser)") |
| if (anotherJson != "{\"name\":\"Name\",\"age\":10}") return "Fail: got the next json: $anotherJson" |
| |
| val anotherCopy = User.copy(simpleUser) |
| val anotherCopiedJson = js("JSON.stringify(anotherCopy)") |
| if (anotherCopiedJson != "{\"name\":\"Name\",\"age\":10}") return "Fail: got the next json: $anotherCopiedJson" |
| |
| return "OK" |
| } |