Skip to content

Commit 9fd5a5c

Browse files
committed
implementation of JavaScriptEngineTest
1 parent 3e570db commit 9fd5a5c

File tree

1 file changed

+130
-9
lines changed

1 file changed

+130
-9
lines changed

javascript/src/androidAndroidTest/kotlin/dev/icerock/moko/javascript/JavaScriptEngineTest.kt

Lines changed: 130 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44

55
package dev.icerock.moko.javascript
66

7+
import kotlinx.serialization.json.Json
8+
import kotlinx.serialization.json.JsonObject
9+
import kotlinx.serialization.json.encodeToJsonElement
710
import org.junit.After
811
import org.junit.Before
912
import org.junit.Test
13+
import kotlin.test.assertEquals
14+
import kotlin.test.assertNull
15+
import kotlin.test.assertTrue
1016

1117
class JavaScriptEngineTest {
1218
private var _javaScriptEngine: JavaScriptEngine? = null
@@ -25,16 +31,131 @@ class JavaScriptEngineTest {
2531
}
2632

2733
@Test
28-
fun equalityTest() {
29-
val jsScript = """
30-
var a = 1 + 2;
31-
a
32-
""".trimIndent()
33-
val result = javaScriptEngine.evaluate(emptyMap(), jsScript)
34+
fun evaluationTest() {
35+
assertEquals(
36+
expected = 101,
37+
actual = javaScriptEngine.evaluate(
38+
context = emptyMap(),
39+
script = """
40+
var a = 1 + 100;
41+
a
42+
""".trimIndent()
43+
).intValue()
44+
)
3445

35-
println("DBG $result")
46+
assertEquals(
47+
expected = 1.5,
48+
actual = javaScriptEngine.evaluate(
49+
context = emptyMap(),
50+
script = """
51+
var a = 0.5 + 1.0;
52+
a
53+
""".trimIndent()
54+
).doubleValue()
55+
)
3656

37-
//assertTrue { result is JsType.IntNum }
38-
//assertEquals(expected = 3, actual = result.intValue())
57+
assertEquals(
58+
expected = "string",
59+
actual = javaScriptEngine.evaluate(
60+
context = emptyMap(),
61+
script = """
62+
var a = "string";
63+
a
64+
""".trimIndent()
65+
).stringValue()
66+
)
67+
68+
assertEquals(
69+
expected = false,
70+
actual = javaScriptEngine.evaluate(
71+
context = emptyMap(),
72+
script = """
73+
var a = false == true;
74+
a
75+
""".trimIndent()
76+
).boolValue()
77+
)
78+
79+
assertTrue {
80+
javaScriptEngine.evaluate(
81+
context = emptyMap(),
82+
script = """
83+
var obj = {male:"Ford", model:"Mustang", number:10};
84+
JSON.stringify(obj);
85+
""".trimIndent()
86+
).jsonValue() is JsonObject
87+
}
88+
89+
assertNull(
90+
javaScriptEngine.evaluate(
91+
context = emptyMap(),
92+
script = """
93+
var a = undefined
94+
a
95+
""".trimIndent()
96+
).nullValue()
97+
)
98+
}
99+
100+
@Test
101+
fun `testJsonContext`() {
102+
val form = mapOf("selector_1" to "first_value", "selector_2" to "second_value")
103+
val profile = mapOf("email" to "[email protected]")
104+
val formJson = Json.encodeToJsonElement(form)
105+
val profileJson = Json.encodeToJsonElement(profile)
106+
val context: Map<String, JsType> = mapOf(
107+
"form" to JsType.Json(formJson),
108+
"profile" to JsType.Json(profileJson)
109+
)
110+
111+
assertEquals(
112+
expected = JsType.Bool(true),
113+
actual = javaScriptEngine.evaluate(
114+
context = context,
115+
script = "form.selector_1 == \"first_value\""
116+
)
117+
)
118+
119+
assertEquals(
120+
expected = JsType.Bool(true),
121+
actual = javaScriptEngine.evaluate(context = context, script = "profile.email != null")
122+
)
123+
124+
assertEquals(
125+
expected = JsType.Str("[email protected]"),
126+
actual = javaScriptEngine.evaluate(context = context, script = "profile.email")
127+
)
128+
129+
assertEquals(
130+
expected = JsType.Null,
131+
actual = javaScriptEngine.evaluate(context = context, script = "profile.first_name")
132+
)
133+
}
134+
135+
@Test
136+
fun testPlusScript() {
137+
val list = listOf(5, 15)
138+
val listJson = Json.encodeToJsonElement(list)
139+
val context: Map<String, JsType> = mapOf(
140+
"list" to JsType.Json(listJson),
141+
"number" to JsType.IntNum(4),
142+
"doubleString" to JsType.Str("\" Hello \"")
143+
)
144+
145+
// On iOS got JsType.DoubleNum here
146+
assertEquals(
147+
expected = JsType.IntNum(19),
148+
actual = javaScriptEngine.evaluate(context = context, script = "list[1]+number")
149+
)
150+
151+
// FIXME: Falls with exception
152+
// Script: var list = [5,15];var number = 4;var doubleString = " Hello ";doubleString+list[0]
153+
// Exception:
154+
// IllegalStateException: Reader has not consumed the whole input:
155+
// JsonReader(source=' Hello 5', currentPosition=8, tokenClass=0, tokenPosition=7, offset=7)
156+
// assertEquals(
157+
// actual = JsType.Str(" Hello 5"),
158+
// expected = javaScriptEngine.evaluate(context = context, script = "doubleString+list[0]")
159+
// )
39160
}
40161
}

0 commit comments

Comments
 (0)