17
17
package com.duckduckgo.contentscopescripts.impl.messaging
18
18
19
19
import androidx.test.ext.junit.runners.AndroidJUnit4
20
+ import androidx.webkit.JavaScriptReplyProxy
20
21
import com.duckduckgo.app.browser.api.DuckDuckGoWebView
21
22
import com.duckduckgo.common.test.CoroutineTestRule
22
23
import com.duckduckgo.common.utils.plugins.PluginPoint
23
24
import com.duckduckgo.contentscopescripts.api.AdsjsContentScopeJsMessageHandlersPlugin
24
25
import com.duckduckgo.contentscopescripts.api.GlobalContentScopeJsMessageHandlersPlugin
25
26
import com.duckduckgo.contentscopescripts.api.GlobalJsMessageHandler
26
27
import com.duckduckgo.contentscopescripts.impl.AdsJsContentScopeScripts
28
+ import com.duckduckgo.js.messaging.api.AdsjsJsMessageCallback
27
29
import com.duckduckgo.js.messaging.api.AdsjsMessageHandler
28
30
import com.duckduckgo.js.messaging.api.JsMessage
29
- import com.duckduckgo.js.messaging.api.JsMessageCallback
30
31
import junit.framework.TestCase.assertEquals
31
32
import kotlinx.coroutines.test.runTest
32
33
import org.json.JSONObject
@@ -46,6 +47,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
46
47
47
48
private val mockWebView: DuckDuckGoWebView = mock()
48
49
private val adsJsContentScopeScripts: AdsJsContentScopeScripts = mock()
50
+ private val mockReplyProxy: JavaScriptReplyProxy = mock()
49
51
private val handlers: PluginPoint <AdsjsContentScopeJsMessageHandlersPlugin > = FakePluginPoint ()
50
52
private val globalHandlers: PluginPoint <GlobalContentScopeJsMessageHandlersPlugin > = FakeGlobalHandlersPluginPoint ()
51
53
private lateinit var contentScopeScriptsJsMessaging: AdsjsContentScopeMessaging
@@ -58,11 +60,19 @@ class AdsjsContentScopeScriptsJsMessagingTest {
58
60
inner class FakePlugin : AdsjsContentScopeJsMessageHandlersPlugin {
59
61
override fun getJsMessageHandler (): AdsjsMessageHandler {
60
62
return object : AdsjsMessageHandler {
63
+
61
64
override fun process (
62
65
jsMessage : JsMessage ,
63
- jsMessageCallback : JsMessageCallback ? ,
66
+ jsMessageCallback : AdsjsJsMessageCallback ? ,
67
+ onResponse : (JSONObject ) -> Unit ,
64
68
) {
65
- jsMessageCallback?.process(jsMessage.featureName, jsMessage.method, jsMessage.id, jsMessage.params)
69
+ jsMessageCallback?.process(
70
+ jsMessage.featureName,
71
+ jsMessage.method,
72
+ jsMessage.id,
73
+ jsMessage.params,
74
+ onResponse,
75
+ )
66
76
}
67
77
68
78
override val featureName: String = " webCompat"
@@ -84,9 +94,16 @@ class AdsjsContentScopeScriptsJsMessagingTest {
84
94
85
95
override fun process (
86
96
jsMessage : JsMessage ,
87
- jsMessageCallback : JsMessageCallback ,
97
+ jsMessageCallback : AdsjsJsMessageCallback ,
98
+ onResponse : (JSONObject ) -> Unit ,
88
99
) {
89
- jsMessageCallback.process(jsMessage.featureName, jsMessage.method, jsMessage.id, jsMessage.params)
100
+ jsMessageCallback.process(
101
+ jsMessage.featureName,
102
+ jsMessage.method,
103
+ jsMessage.id,
104
+ jsMessage.params,
105
+ onResponse,
106
+ )
90
107
}
91
108
92
109
override val method: String = " addDebugFlag"
@@ -103,6 +120,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
103
120
globalHandlers = globalHandlers,
104
121
adsJsContentScopeScripts = adsJsContentScopeScripts,
105
122
coroutineRule.testDispatcherProvider,
123
+ coroutineRule.testScope,
106
124
)
107
125
}
108
126
@@ -114,7 +132,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
114
132
{"context":"contentScopeScripts","featureName":"webCompat","id":"myId","method":"webShare","params":{}}
115
133
""" .trimIndent()
116
134
117
- contentScopeScriptsJsMessaging.process(message, callback)
135
+ contentScopeScriptsJsMessaging.process(message, callback, mockReplyProxy )
118
136
119
137
assertEquals(1 , callback.counter)
120
138
}
@@ -123,7 +141,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
123
141
fun `when processing unknown message do nothing` () = runTest {
124
142
givenInterfaceIsRegistered()
125
143
126
- contentScopeScriptsJsMessaging.process(" " , callback)
144
+ contentScopeScriptsJsMessaging.process(" " , callback, mockReplyProxy )
127
145
128
146
assertEquals(0 , callback.counter)
129
147
}
@@ -136,7 +154,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
136
154
{"context":"contentScopeScripts","featureName":"test","id":"myId","method":"webShare","params":{}}
137
155
""" .trimIndent()
138
156
139
- contentScopeScriptsJsMessaging.process(message, callback)
157
+ contentScopeScriptsJsMessaging.process(message, callback, mockReplyProxy )
140
158
141
159
assertEquals(0 , callback.counter)
142
160
}
@@ -149,7 +167,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
149
167
{"context":"contentScopeScripts","webCompat":"test","method":"webShare","params":{}}
150
168
""" .trimIndent()
151
169
152
- contentScopeScriptsJsMessaging.process(message, callback)
170
+ contentScopeScriptsJsMessaging.process(message, callback, mockReplyProxy )
153
171
154
172
assertEquals(0 , callback.counter)
155
173
}
@@ -162,7 +180,7 @@ class AdsjsContentScopeScriptsJsMessagingTest {
162
180
{"context":"contentScopeScripts","featureName":"debugFeature","id":"debugId","method":"addDebugFlag","params":{}}
163
181
""" .trimIndent()
164
182
165
- contentScopeScriptsJsMessaging.process(message, callback)
183
+ contentScopeScriptsJsMessaging.process(message, callback, mockReplyProxy )
166
184
167
185
assertEquals(1 , callback.counter)
168
186
}
@@ -203,9 +221,15 @@ class AdsjsContentScopeScriptsJsMessagingTest {
203
221
verify(mockWebView).safeRemoveWebMessageListener(any())
204
222
}
205
223
206
- private val callback = object : JsMessageCallback () {
224
+ private val callback = object : AdsjsJsMessageCallback () {
207
225
var counter = 0
208
- override fun process (featureName : String , method : String , id : String? , data : JSONObject ? ) {
226
+ override fun process (
227
+ featureName : String ,
228
+ method : String ,
229
+ id : String? ,
230
+ data : JSONObject ? ,
231
+ onResponse : (params: JSONObject ) -> Unit ,
232
+ ) {
209
233
counter++
210
234
}
211
235
}
0 commit comments