@@ -151,6 +151,9 @@ class KlaviyoWebViewClientTest : BaseTest() {
151151
152152 mockkStatic(WebViewCompat ::class )
153153 every { WebViewCompat .addWebMessageListener(any(), any(), any(), any()) } just runs
154+ every { WebViewCompat .removeWebMessageListener(any(), any()) } just runs
155+
156+ every { anyConstructed<KlaviyoWebView >().removeJavascriptInterface(any()) } just runs
154157 }
155158
156159 @After
@@ -345,6 +348,28 @@ class KlaviyoWebViewClientTest : BaseTest() {
345348 verifyDestroy()
346349 }
347350
351+ @Test
352+ fun `destroyWebView removes WebMessageListener when supported` () {
353+ val client = KlaviyoWebViewClient ()
354+ client.initializeWebView()
355+ client.destroyWebView()
356+
357+ verify { WebViewCompat .removeWebMessageListener(any(), eq(" MockNativeBridge" )) }
358+ }
359+
360+ @Test
361+ fun `destroyWebView removes JavascriptInterface when WebMessageListener unsupported` () {
362+ every { WebViewFeature .isFeatureSupported(WebViewFeature .WEB_MESSAGE_LISTENER ) } returns false
363+ every { anyConstructed<KlaviyoWebView >().addJavascriptInterface(any(), any()) } just runs
364+
365+ val client = KlaviyoWebViewClient ()
366+ client.initializeWebView()
367+ client.destroyWebView()
368+
369+ verify { anyConstructed<KlaviyoWebView >().removeJavascriptInterface(eq(" MockNativeBridge" )) }
370+ verify(inverse = true ) { WebViewCompat .removeWebMessageListener(any(), any()) }
371+ }
372+
348373 @Test
349374 fun `verify detachWebView fails on a null webview` () {
350375 val client = KlaviyoWebViewClient ()
0 commit comments