package Ġio . github . tm creative 1 . play w right . remote . page Ċ Ċ import Ġio . github . tm creative 1 . play w right . remote . base . Base Test Ċ import Ġio . github . tm creative 1 . play w right . remote . core . enums . Wait Until State Ċ import Ġio . github . tm creative 1 . play w right . remote . core . exceptions . Play w right Exception Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . callback . api . IB ind ing Callback Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . handle . js . api . IJ SH andle Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . options . Expose Binding Options Ċ import Ġio . github . tm creative 1 . play w right . remote . engine . options . wait . WaitFor Navigation Options Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ import Ġkotlin . test . fail Ċ Ċ class ĠTest Page Expose Function Ġ: ĠBaseTest () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġof Ġexpose Ġfunction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġbrowser . new Context () ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġcontext . new Page () ĊĠĠĠĠĠĠĠ Ġval Ġbinding Source Ġ= Ġarray ListOf < IB ind ing Callback . IS ource ? >( null ) ĊĠĠĠĠĠĠĠ Ġpage . expose Binding (" add ") Ġ{ Ġsource , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Source [ 0 ] Ġ= Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ 0 ] Ġas ĠInt Ġ+ Ġargs [ 1 ] Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' add ']( 1 0 , Ġ 1 3 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( context , Ġbinding Source [ 0 ] !!. context ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( page , Ġbinding Source [ 0 ] !!. page ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( page . main Frame (), Ġbinding Source [ 0 ] !!. frame ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġresult ) ĊĠĠĠĠĠĠĠ Ġcontext . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġof Ġexpose Ġfunction Ġwith Ġawait `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġawait Ġwindow [' compute ']( 2 , Ġ 1 2 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġpage . expose Binding (" compute ") Ġ{ Ġ_, Ġargs Ġ-> Ġargs [ 0 ] Ġas ĠInt Ġ* Ġargs [ 1 ] Ġas ĠInt Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 4 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġwith Ġhandles Ġand Ġcomplex Ġobjects `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġjs Script Ġ= Ġ""" () Ġ=> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġwindow [' foo Value '] Ġ= Ġ{ Ġbar : Ġ 2 Ġ}; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' foo Value ']; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= Ġpage . evaluate Handle ( js Script ) ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" handle ") Ġ{ Ġarray ListOf ( map Of (" foo " Ġto Ġhandle )) Ġ} ĊĠĠĠĠĠĠĠ Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġconst Ġvalue Ġ= Ġawait Ġwindow [' handle '] (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġconst Ġ[{ Ġfoo Ġ}] Ġ= Ġvalue ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġfoo Ġ=== Ġwindow [' foo Value ']; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġto Ġthrow Ġexception Ġin Ġpage Ġcontext `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" call Exception ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Exception Ġcalled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġ() Ġ=> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġawait Ġwindow [" call Exception "] (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} Ġcatch Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġreturn Ġ{ Ġmessage : Ġe . message , Ġstack : Ġe . stack Ġ}; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠMap < *, Ġ* >) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Exception Ġcalled ", Ġresult [" message "]) ĊĠĠĠĠĠĠĠ ĠassertTrue (( result [" stack "] Ġas ĠString ). contains (" check Ġto Ġthrow Ġexception Ġin Ġpage Ġcontext ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġof Ġcall Ġinside Ġfunction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalled Ġ= Ġarray ListOf ( false ) ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" call Me ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalled [ 0 ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpage . add Init Script (" window [' call Me '] () ") ĊĠĠĠĠĠĠĠ Ġpage . reload () ĊĠĠĠĠĠĠĠ ĠassertTrue ( called [ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġwith Ġnavigation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" compute ") Ġ{ Ġargs Ġ-> Ġargs [ 0 ] Ġas ĠInt Ġ* Ġargs [ 1 ] Ġas ĠDouble Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġawait Ġwindow [' compute ']( 1 0 , Ġ 2 . 3 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ Ġpage . navigate ( http Server . empty Page ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġwith Ġframes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" compute ") Ġ{ Ġargs Ġ-> Ġargs [ 0 ] Ġas ĠInt Ġ+ Ġargs [ 1 ] Ġas ĠInt Ġ} ĊĠĠĠĠĠĠĠ Ġpage . navigate ("${ http Server . prefix With Domain }/ frames / nested - frames . html ") ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġpage . frames ()[ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' compute ']( 2 0 , Ġ 3 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġframe . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġwith Ġframe Ġbefore Ġnavigation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . navigate ("${ http Server . prefix With Domain }/ frames / nested - frames . html ") ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" compute ") Ġ{ Ġargs Ġ-> Ġargs [ 0 ] Ġas ĠInt Ġ* Ġargs [ 1 ] Ġas ĠDouble Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġpage . frames ()[ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' compute ']( 1 0 , Ġ 2 . 3 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġframe . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġafter Ġcross Ġorigin Ġnavigation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . navigate ( http Server . empty Page ) ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" compute ") Ġ{ Ġargs Ġ-> Ġargs [ 0 ] Ġas ĠInt Ġ+ Ġargs [ 1 ] Ġas ĠInt Ġ} ĊĊĠĠĠĠĠĠĠ Ġpage . navigate ("${ http Server . prefix With IP }/ empty . html ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate (" window [' compute ']( 3 , Ġ 2 0 )") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcorrect Ġwork Ġwith Ġcomplex Ġobjects `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" complex Object ") Ġ{ Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġargs [ 0 ] Ġas ĠMap < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġargs [ 1 ] Ġas ĠMap < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġa [" x "] Ġas ĠInt Ġ+ Ġb [" x "] Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" x " Ġto Ġsum ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate (" async Ġ() Ġ=> Ġwindow [' complex Object ']( { x : Ġ 1 8 }, Ġ{ x : Ġ 5 }) ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠMap < *, Ġ* >) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġresult [" x "]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġhandle Ġof Ġexpose Ġbinding `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġarray ListOf < IJ SH andle ? >( null ) ĊĠĠĠĠĠĠĠ Ġpage . expose Binding (" log Me ", Ġ{ Ġ_, Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget [ 0 ] Ġ= Ġargs [ 0 ] Ġas ĠI J SH andle ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 1 ĊĠĠĠĠĠĠĠ Ġ}, ĠEx pose Binding Options Ġ{ Ġit . handle Ġ= Ġtrue Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' log Me ']( { Ġage : Ġ 2 3 Ġ}); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġtarget [ 0 ] !!. evaluate (" x Ġ=> Ġx . age ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 1 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġto Ġnot Ġthrow Ġexception Ġduring Ġnavigation `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . expose Binding (" log Me ", Ġ{ Ġ_, Ġ_ Ġ-> Ġ 2 3 Ġ}, ĠEx pose Binding Options Ġ{ Ġit . handle Ġ= Ġtrue Ġ}) ĊĠĠĠĠĠĠĠ Ġpage . navigate ( http Server . empty Page ) ĊĊĠĠĠĠĠĠĠ Ġpage . waitFor Navigation ( WaitFor Navigation Options Ġ{ Ġit . wait Until Ġ= ĠWait Until State . LOAD Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjs Script Ġ= Ġ""" async Ġurl Ġ=> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġwindow [' log Me ']( { Ġfoo : Ġ 2 4 Ġ}); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġwindow . location . href Ġ= Ġurl ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . evaluate ( js Script , Ġ"${ http Server . prefix With Domain }/ page - with - one - style . html ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġto Ġthrow Ġfor Ġduplicate Ġregist rations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpage . expose Function (" fun 1 ") Ġ{ Ġ" response " Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . expose Function (" fun 1 ") Ġ{ Ġ" response " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" expose Function Ġshould Ġthrow ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPlay w right Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( e . message !!. contains (" Function Ġfun 1 Ġhas Ġbeen Ġalready Ġregistered ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġto Ġthrow Ġfor Ġmultiple Ġarguments `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' log Me ']( { Ġage : Ġ 2 3 Ġ}); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġpage . expose Binding (" log Me ", Ġ{ Ġ_, Ġ_ Ġ-> Ġ 2 3 Ġ}, ĠEx pose Binding Options Ġ{ Ġit . handle Ġ= Ġtrue Ġ}) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġpage . evaluate ( js Script )) ĊĠĠĠĠĠĠĠ Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' log Me ']( { Ġage : Ġ 2 3 Ġ}, Ġundefined , Ġundefined ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġpage . evaluate ( js Script )) ĊĠĠĠĠĠĠĠ Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' log Me ']( undefined , Ġundefined , Ġundefined ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 3 , Ġpage . evaluate ( js Script )) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Script Ġ= Ġ""" async Ġfunction () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġreturn Ġwindow [' log Me ']( 1 , Ġ 2 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage . evaluate ( js Script ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" evaluate Ġshould Ġthrow ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPlay w right Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( e . message !!. contains (" expose Binding Handle Ġsupports Ġa Ġsingle Ġargument , Ġ 2 Ġreceived ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }