package Ġcom . fen bi . android . y tk js bridge Ċ Ċ import Ġandroid . support . test . Instrumentation Registry Ċ import Ġandroid . support . test . runner . Android JUnit 4 Ċ import Ġandroid . webkit . Web Chrome Client Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġyang jw Ġon Ġ 2 0 1 9 / 1 / 9 . Ċ Ġ*/ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠTest Dynamic Call Js Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġinit WebView () Ġ= ĠWebView ( Instrumentation Registry . getTarget Context ()). apply Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView Client Ġ= ĠWebView Client () ĊĠĠĠĠĠĠĠ Ġweb Chrome Client Ġ= ĠWeb Chrome Client () ĊĠĠĠĠĠĠĠ Ġinit Y TK Js Bridge () ĊĠĠĠĠĠĠĠ Ġload Url (" file :/// android _ asset / test - call - js . html ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Call Sync () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġret : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). run On Main Sync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġinit WebView () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 0 ) ĠĠĠĠĠĠĠĠ Ġ// wait Ġjs Ġscript Ġto Ġbe Ġload ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= ĠwebView . call < Int >(" test Sync ", Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcount DownLatch . await ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġret ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Call Async With Js Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġret : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). run On Main Sync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġinit WebView () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . call (" test Async With Js Call ", Ġ" tom ", Ġcallback Ġ= Ġobject Ġ: ĠJs Callback < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive Value ( msg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcount DownLatch . await ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" hello Ġtom ", Ġret ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Call Async With Lambda () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount DownLatch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġret : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). run On Main Sync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠwebView Ġ= Ġinit WebView () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . call < String >(" test Async With Lambda "," l isa "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount DownLatch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcount DownLatch . await ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" hello Ġl isa ", Ġret ) ĊĠĠĠ Ġ} Ċ }