Skip to content

Commit 37ecb4f

Browse files
committed
fix jsObject conversion issue
1 parent 2850cad commit 37ecb4f

File tree

2 files changed

+37
-15
lines changed
  • analytics-kotlin-live/src

2 files changed

+37
-15
lines changed

analytics-kotlin-live/src/androidTest/java/com/segment/analytics/liveplugins/kotlin/JSStorageTest.kt

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.segment.analytics.liveplugins.kotlin
22

33
import androidx.test.ext.junit.runners.AndroidJUnit4
4+
import com.segment.analytics.kotlin.core.utilities.getInt
5+
import com.segment.analytics.kotlin.core.utilities.getString
46
import com.segment.analytics.liveplugins.kotlin.utils.MemorySharedPreferences
57
import com.segment.analytics.substrata.kotlin.JSArray
68
import com.segment.analytics.substrata.kotlin.JSObject
79
import com.segment.analytics.substrata.kotlin.JSScope
10+
import com.segment.analytics.substrata.kotlin.JsonElementConverter
811
import kotlinx.coroutines.ExperimentalCoroutinesApi
12+
import kotlinx.serialization.json.jsonObject
913
import org.junit.Assert.assertEquals
1014
import org.junit.Assert.assertNull
1115
import org.junit.Before
@@ -138,24 +142,32 @@ class JSStorageTest {
138142
@Test
139143
fun testJSStorageWithJSObject() {
140144
// set from js
141-
var value = engine.await {
145+
var value = engine.await(true) {
142146
evaluate("""storage.setValue("object", {name: "test", value: 42})""")
143147
evaluate("""storage.getValue("object")""")
144148
}
145149
assertNull(exceptionThrown)
146-
val jsObjectValue = value as JSObject
147-
assertEquals("test", jsObjectValue.getString("name"))
148-
assertEquals(42, jsObjectValue.getInt("value"))
150+
val jsonObject = JsonElementConverter.read(value).jsonObject
151+
assertEquals("test", jsonObject.getString("name"))
152+
assertEquals(42, jsonObject.getInt("value"))
149153

150154
// set from native
151-
val nativeObject = engine.await {
152-
evaluate("""{name: "native", value: 100}""")
153-
} as JSObject
154-
jsStorage.setValue("object", nativeObject)
155+
val nativeObject = engine.await(true) {
156+
evaluate("""
157+
let obj = {name: "native", value: 100}
158+
obj
159+
""".trimIndent())
160+
}
161+
jsStorage.setValue("object", nativeObject as JSObject)
155162
value = engine.await {
156-
evaluate("""storage.getValue("object")""")
163+
evaluate("""
164+
let obj2 = storage.getValue("object")
165+
obj.name == obj2.name && obj.value == obj2.value
166+
""".trimIndent())
157167
}
158-
val retrievedObject = value as JSObject
168+
assertEquals(true, value)
169+
val jsValue = jsStorage.getValue("object")
170+
val retrievedObject = JsonElementConverter.read(jsValue).jsonObject
159171
assertEquals("native", retrievedObject.getString("name"))
160172
assertEquals(100, retrievedObject.getInt("value"))
161173
}

analytics-kotlin-live/src/main/java/com/segment/analytics/liveplugins/kotlin/JSStorage.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.segment.analytics.substrata.kotlin.JSScope
1313
import com.segment.analytics.substrata.kotlin.JsonElementConverter
1414
import kotlinx.serialization.encodeToString
1515
import kotlinx.serialization.json.Json
16+
import kotlinx.serialization.json.JsonElement
1617
import kotlinx.serialization.json.JsonObject
1718
import kotlinx.serialization.json.buildJsonObject
1819
import kotlinx.serialization.json.put
@@ -52,11 +53,19 @@ class JSStorage {
5253
}
5354

5455
fun setValue(key: String, value: JSObject) {
55-
save(key, value, TYPE_OBJECT)
56+
save(
57+
key,
58+
JsonElementConverter.read(value),
59+
TYPE_OBJECT
60+
)
5661
}
5762

5863
fun setValue(key: String, value: JSArray) {
59-
save(key, value, TYPE_ARRAY)
64+
save(
65+
key,
66+
JsonElementConverter.read(value),
67+
TYPE_ARRAY
68+
)
6069
}
6170

6271
fun getValue(key: String): Any? {
@@ -82,9 +91,10 @@ class JSStorage {
8291
TYPE_STRING -> this.getString(PROP_VALUE)?.let { Json.decodeFromString<String>(it) }
8392
TYPE_LONG -> this.getLong(PROP_VALUE)?.toDouble()
8493
else -> {
85-
this[PROP_VALUE]?.let {
86-
engine?.await {
87-
JsonElementConverter.write(it, context)
94+
this.getString(PROP_VALUE)?.let {
95+
val json = Json.decodeFromString<JsonElement>(it)
96+
engine?.await(true) {
97+
JsonElementConverter.write(json, context)
8898
}
8999
}
90100
}

0 commit comments

Comments
 (0)