[K/JS] Prepare JS Plain Objects plugin to publication

This commit is contained in:
Artem Kobzar
2024-01-17 10:52:58 +00:00
committed by Space Team
parent 561be747c1
commit dfe2d8651e
53 changed files with 479 additions and 393 deletions
@@ -0,0 +1,25 @@
package foo
import kotlinx.js.JsPlainObject
@JsPlainObject
external interface User {
var name: String
val age: Int
}
fun box(): String {
val user = User(name = "Name", age = 10)
val copy = user.copy(age = 11)
if (copy === user) return "Fail: mutation instead of immutable copy"
val json = js("JSON.stringify(copy)")
if (copy.name != "Name") return "Fail: problem with copied `name` property"
if (copy.age != 11) return "Fail: problem with copied `age` property"
if (json != "{\"age\":11,\"name\":\"Name\"}") return "Fail: got the next json for the copy: $json"
return "OK"
}
@@ -0,0 +1,31 @@
package foo
import kotlinx.js.JsPlainObject
@JsPlainObject
external interface User {
var name: String
val age: Int
val email: String?
}
fun box(): String {
val user = User(name = "Name", age = 10)
if (user.name != "Name") return "Fail: problem with `name` property"
if (user.age != 10) return "Fail: problem with `age` property"
val json = js("JSON.stringify(user)")
if (json != "{\"email\":null,\"age\":10,\"name\":\"Name\"}") return "Fail: got the next json: $json"
val withEmail = User(name = "Name", age = 10, email = "test@test")
if (withEmail.name != "Name") return "Fail: problem with emailed `name` property"
if (withEmail.age != 10) return "Fail: problem with emailed `age` property"
if (withEmail.email != "test@test") return "Fail: problem with emailed `email` property"
val jsonWithEmail = js("JSON.stringify(withEmail)")
if (jsonWithEmail != "{\"email\":\"test@test\",\"age\":10,\"name\":\"Name\"}") return "Fail: got the next emailed json: $jsonWithEmail"
return "OK"
}
@@ -0,0 +1,21 @@
package foo
import kotlinx.js.JsPlainObject
@JsPlainObject
external interface User {
var name: String
val age: Int
}
fun box(): String {
val user = User(name = "Name", age = 10)
if (user.name != "Name") return "Fail: problem with `name` property"
if (user.age != 10) return "Fail: problem with `age` property"
val json = js("JSON.stringify(user)")
if (json != "{\"age\":10,\"name\":\"Name\"}") return "Fail: got the next json: $json"
return "OK"
}
@@ -0,0 +1,28 @@
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 != "{\"age\":10,\"name\":\"Name\",\"email\":\"test@test\"}") return "Fail: got the next json: $json"
return "OK"
}
@@ -0,0 +1,33 @@
package foo
import kotlinx.js.JsPlainObject
@JsPlainObject
external interface User {
var name: String
val age: Int
}
@JsPlainObject
external interface Role {
val role: String
}
@JsPlainObject
external interface ExtendedUser : User, Role {
val email: String
}
fun box(): String {
val user = ExtendedUser(name = "Name", age = 10, email = "test@test", role = "Admin")
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"
if (user.role != "Admin") return "Fail: problem with `role` property"
val json = js("JSON.stringify(user)")
if (json != "{\"age\":10,\"name\":\"Name\",\"role\":\"Admin\",\"email\":\"test@test\"}") return "Fail: got the next json: $json"
return "OK"
}