44
55package dev.icerock.moko.javascript
66
7+ import kotlinx.serialization.json.Json
8+ import kotlinx.serialization.json.JsonObject
9+ import kotlinx.serialization.json.encodeToJsonElement
710import org.junit.After
811import org.junit.Before
912import org.junit.Test
13+ import kotlin.test.assertEquals
14+ import kotlin.test.assertNull
15+ import kotlin.test.assertTrue
1016
1117class 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