/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠMat th ias ĠGe is ler Ġ( bit P ogo ) Ġ/ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby ĠApache Ġv 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġtech . ant ib y tes . k mock . verification Ċ Ċ import Ġtech . ant ib y tes . k mock . K Mock Contract Ċ import Ġtech . ant ib y tes . mock . Async Fun Proxy Stub Ċ import Ġtech . ant ib y tes . mock . Property Proxy Stub Ċ import Ġtech . ant ib y tes . mock . Sync Fun Proxy Stub Ċ import Ġtech . ant ib y tes . util . test . fixture . fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . kotlin Fixture Ċ import Ġtech . ant ib y tes . util . test . ful fil s Ċ import Ġtech . ant ib y tes . util . test . must Be Ċ import Ġtech . ant ib y tes . util . test . same As Ċ import Ġkotlin . js . Js Name Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . test . Test Ċ Ċ class ĠNon Free zing Ass er ter Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= Ġkotlin Fixture () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 0 ") ĊĠĠĠ Ġfun Ġ` It Ġful fil s ĠAss er ter `() Ġ{ ĊĠĠĠĠĠĠĠ ĠNon Free zing Ass er ter () Ġful fil s ĠK Mock Contract . Ass er ter :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 0 a ") ĊĠĠĠ Ġfun Ġ` It Ġtype aliases ĠVer ifier `() Ġ{ ĊĠĠĠĠĠĠĠ ĠNon Free zing Verifier () Ġful fil s ĠK Mock Contract . Ass er ter :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 1 ") ĊĠĠĠ Ġfun Ġ` It Ġful fil s ĠCollector `() Ġ{ ĊĠĠĠĠĠĠĠ ĠNon Free zing Ass er ter () Ġful fil s ĠK Mock Contract . Collector :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 2 ") ĊĠĠĠ Ġfun Ġ` It Ġhas Ġa Ġempty Map Ġof Ġreferences Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ ĠNon Free zing Ass er ter (). references Ġmust Be Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 3 ") ĊĠĠĠ Ġfun Ġ` Given Ġadd Reference Ġis Ġcalled Ġit Ġadds Ġa Ġref ren ence Ġentry Ġthread safe `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= Ġfixture . fixture < Int >(). absolute Value ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠSync Fun Proxy Stub ( fixture . fixture (), Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġindex ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references . first (). proxy Ġsame As Ġproxy ĊĠĠĠĠĠĠĠ Ġverifier . references . first (). call Index Ġmust Be Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 4 ") ĊĠĠĠ Ġfun Ġ` Given Ġadd Reference Ġis Ġcalled Ġit Ġalways Ġadds ĠProperty Prox ies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠProperty Proxy Stub ( fixture . fixture (), Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references . first (). proxy Ġsame As Ġproxy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 5 ") ĊĠĠĠ Ġfun Ġ` Given Ġadd Reference Ġis Ġcalled Ġit Ġalways Ġadds ĠAsync Fun Prox ies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠAsync Fun Proxy Stub ( fixture . fixture (), Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references . first (). proxy Ġsame As Ġproxy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 6 ") ĊĠĠĠ Ġfun Ġ` Given Ġadd Reference Ġis Ġcalled Ġit Ġadds ĠSync Fun Prox ies Ġif Ġthey Ġare Ġnot Ġmarked Ġfor Ġignoring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠSync Fun Proxy Stub ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references . first (). proxy Ġsame As Ġproxy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 7 ") ĊĠĠĠ Ġfun Ġ` Given Ġadd Reference Ġis Ġcalled Ġit Ġignores ĠSync Fun Prox ies Ġif Ġthey Ġare Ġmarked Ġfor Ġignoring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠSync Fun Proxy Stub ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġign orable For Verification Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references . first OrNull () Ġmust Be Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 8 ") ĊĠĠĠ Ġfun Ġ` Given Ġadd Reference Ġis Ġcalled Ġit Ġadds ĠSync Fun Prox ies Ġif Ġthey Ġare Ġmarked Ġfor Ġignoring Ġbut Ġare Ġover rule d Ġby Ġthe ĠVer ifier `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠSync Fun Proxy Stub ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġign orable For Verification Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter ( cover All Inv ocations Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references . first (). proxy Ġmust Be Ġproxy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Js Name (" fn 9 ") ĊĠĠĠ Ġfun Ġ` Given Ġclear Ġis Ġcalled Ġit Ġclears Ġthe Ġverifier `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠSync Fun Proxy Stub ( fixture . fixture (), Ġfixture . fixture ()) ĊĠĠĠĠĠĠĠ Ġval Ġverifier Ġ= ĠNon Free zing Ass er ter () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġverifier . add Reference ( proxy , Ġfixture . fixture ()) ĊĊĠĠĠĠĠĠĠ Ġverifier . clear () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverifier . references Ġmust Be Ġempty List () ĊĠĠĠ Ġ} Ċ } Ċ