@ file : Suppress (" Matching Declaration Name ") Ċ Ċ package Ġcom . datadog hq . flutter Ċ Ċ import Ġfr . xg ou chet . el my r . Forge Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġorg . mockito . kotlin . any Ċ import Ġorg . mockito . kotlin . any OrNull Ċ import Ġorg . mockito . kotlin . description Ċ import Ġorg . mockito . kotlin . eq Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . verify Ċ import Ġkotlin . reflect . K Type Ċ Ċ enum Ġclass ĠSupported Contract Type Ġ{ ĊĠĠĠ ĠSTRING , ĊĠĠĠ ĠMAP , ĊĠĠĠ ĠINT , ĊĠĠĠ ĠLONG Ċ } Ċ Ċ sealed Ġclass ĠContract Parameter Ġ{ ĊĠĠĠ Ġclass ĠType ( val Ġtype : ĠSupported Contract Type ): ĠContract Parameter () ĊĠĠĠ Ġclass ĠValue ( val Ġvalue : ĠAny ): ĠContract Parameter () Ċ } Ċ Ċ @ Suppress (" Nested Block Depth ") Ċ data Ġclass ĠContract ( ĊĠĠĠ Ġval ĠmethodName : ĠString , ĊĠĠĠ Ġval Ġrequired Parameters : ĠMap < String , ĠContract Parameter > Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġcreate Contract Arguments ( forge : ĠFor ge , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissing Param : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Arguments : ĠMap < String , ĠAny ?> ? Ġ= Ġnull ): ĠMap < String , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġarguments Ġ= Ġmutable Map Of < String , ĠAny ?> () ĊĠĠĠĠĠĠĠ Ġfor ( param Ġin Ġrequired Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( param . key Ġ!= Ġmissing Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġwhen Ġ( val Ġcontract Parameter Ġ= Ġparam . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract Parameter . Value Ġ-> Ġcontract Parameter . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract Parameter . Type Ġ-> Ġfor ge Value ( forge , Ġcontract Parameter . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . put ( param . key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( extra Arguments Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġarguments . to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . put All ( extra Arguments ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarguments ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfor ge Value ( forge : ĠFor ge , Ġtype : ĠSupported Contract Type ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSupported Contract Type . STRING Ġ-> Ġfor ge . an Extended Ascii String () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSupported Contract Type . MAP Ġ-> Ġfor ge . exhaustive Attributes () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSupported Contract Type . INT Ġ-> Ġfor ge . an Int () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSupported Contract Type . LONG Ġ-> Ġfor ge . a Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġtest Contracts ( contracts : ĠList < Contract >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ge : ĠFor ge , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin : ĠMethod Channel . MethodCall Handler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Arguments : ĠMap < String , ĠAny ?> ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġfun Ġcall Contract ( contract : ĠContract , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments : ĠMap < String , ĠAny ? >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugin : ĠMethod Channel . MethodCall Handler ): ĠMethod Channel . Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= ĠMethod Call ( contract . methodName , Ġarguments ) ĊĠĠĠĠĠĠĠ Ġval Ġmock Result Ġ= Ġmock < Method Channel . Result >() ĊĠĠĠĠĠĠĠ Ġplugin . on MethodCall ( call , Ġmock Result ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmock Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor ( contract Ġin Ġcontracts ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġthat Ġa Ġproper Ġcontract Ġdoes Ġnot Ġthrow Ġa Ġcontract Ġviolation ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġcontract . create Contract Arguments ( forge , Ġextra Arguments Ġ= Ġextra Arguments ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcall Contract ( contract , Ġarguments , Ġplugin ) ĊĠĠĠĠĠĠĠ Ġverify ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription ("${ contract . methodName } Ġdid Ġnot Ġsucceed Ġwith Ġall Ġrequired Ġpar meters Ġprovided ") ĊĠĠĠĠĠĠĠ Ġ). success ( any OrNull ()) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( param Ġin Ġcontract . required Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġcontract . create Contract Arguments ( forge , Ġparam . key , Ġextra Arguments ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcall Contract ( contract , Ġarguments , Ġplugin ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription ("${ contract . methodName } Ġdid Ġnot Ġthrow Ġa Ġcontract Ġviolation Ġwhen Ġmissing Ġ${ param . key }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). error ( eq ( Dat adog Sdk Plugin . CONTRACT _ VI OL ATION ), Ġany (), Ġany OrNull ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }