// Ċ // ĠCopyright Ġ( c ) Ġ 2 0 2 0 , ĠSales force . com , Ġinc . Ċ // ĠAll Ġrights Ġreserved . Ċ // ĠSPDX - License - Identifier : ĠBSD - 3 - Clause Ċ // ĠFor Ġfull Ġlicense Ġtext , Ġsee Ġthe ĠLICENSE Ġfile Ġin Ġthe Ġrepo Ġroot Ġor Ġhttps :// opensource . org / licenses / BSD - 3 - Clause Ċ // Ċ Ċ package Ġcom . sales force . nim bus . bridge . webview Ċ Ċ import Ġandroid . webkit . Web Settings Ċ import Ġandroid . webkit . WebView Ċ import Ġcom . sales force . nim bus . Bound Method Ċ import Ġcom . sales force . nim bus . Plugin Ċ import Ġcom . sales force . nim bus . Plugin Options Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ Ċ /** Ċ Ġ* ĠUnit Ġtests Ġfor Ġ[ WebView Bridge ]. Ċ Ġ*/ Ċ class ĠWebView Bridge Test Ġ: ĠString Spec ({ ĊĊĠĠĠ Ġlateinit Ġvar ĠwebView Bridge : ĠWebView Bridge ĊĠĠĠ Ġval Ġmock Web Settings Ġ= Ġmock k < Web Settings >( relax ed Ġ= Ġtrue , Ġrelax Unit Fun Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġjava Script Enabled Ġ} Ġreturns Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmock WebView Ġ= Ġmock k < WebView >( relax ed Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsettings Ġ} Ġreturns Ġmock Web Settings ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmock Plugin 1 Ġ= Ġmock k < Plugin 1 >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġmock Plugin 1 WebView Binder Ġ= Ġmock k < Plugin 1 WebView Binder >( relax ed Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġget Plugin () Ġ} Ġreturns Ġmock Plugin 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġget Plugin Name () Ġ} Ġreturns Ġ" Test " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmock Plugin 2 Ġ= Ġmock k < Plugin 2 >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġmock Plugin 2 WebView Binder Ġ= Ġmock k < Plugin 2 WebView Binder >( relax ed Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġget Plugin () Ġ} Ġreturns Ġmock Plugin 2 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġget Plugin Name () Ġ} Ġreturns Ġ" Test 2 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbefore Test Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView Bridge Ġ= ĠWebView Bridge . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( mock Plugin 1 WebView Binder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind ( mock Plugin 2 WebView Binder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach ( mock WebView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" attach Ġenables ĠJavascript " Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Web Settings . java Script Enabled Ġ= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" attach Ġadds ĠNim bus Bridge ĠJavascript Interface " Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock WebView . add Javascript Interface ( web View Bridge , Ġ"_ nim bus ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" attach Ġallows Ġplugins Ġto Ġcustomize " Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 1 . customize ( web View Bridge ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 2 . customize ( web View Bridge ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" attach Ġbind s Ġto Ġbind ers " Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 1 WebView Binder . bind ( web View Bridge ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 2 WebView Binder . bind ( web View Bridge ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" attach Ġadds Ġbinder ĠJavascript Interfaces " Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock WebView . add Javascript Interface ( of Type ( Plugin 1 WebView Binder :: class ), Ġeq ("_ Test ")) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock WebView . add Javascript Interface ( of Type ( Plugin 2 WebView Binder :: class ), Ġeq ("_ Test 2 ")) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" detach re moves ĠNim bus Bridge ĠJavascript Interface " Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView Bridge . detach () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock WebView . remove Javascript Interface ("_ nim bus ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" detach Ġcle ans Ġup Ġplugins " Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView Bridge . detach () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 1 . cleanup ( web View Bridge ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 2 . cleanup ( web View Bridge ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" detach Ġun bind s Ġfrom Ġbind ers " Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView Bridge . detach () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 1 WebView Binder . unbind ( web View Bridge ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Plugin 2 WebView Binder . unbind ( web View Bridge ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" detach Ġremoves Ġbinder ĠJavascript Interfaces " Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView Bridge . detach () ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock WebView . remove Javascript Interface ("_ Test ") Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock WebView . remove Javascript Interface ("_ Test 2 ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Native Plugin Names Ġreturns ĠJson Array Ġof Ġstring Ġnames " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnative Plugin Names Ġ= ĠwebView Bridge . native Plugin Names () ĊĠĠĠĠĠĠĠ Ġnative Plugin Names . shouldBe ("[ \" Test \",\" Test 2 \"] ") ĊĠĠĠ Ġ} Ċ }) Ċ Ċ @ Plugin Options ( name Ġ= Ġ" Test ") Ċ class ĠPlugin 1 Ġ: ĠPlugin Ġ{ ĊĊĠĠĠ Ġ@ Bound Method ĊĠĠĠ Ġfun Ġfoo (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" foo " ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Plugin Options ( name Ġ= Ġ" Test 2 ") Ċ class ĠPlugin 2 Ġ: ĠPlugin Ġ{ ĊĊĠĠĠ Ġ@ Bound Method ĊĠĠĠ Ġfun Ġfoo (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" foo " ĊĠĠĠ Ġ} Ċ } Ċ