/* Ċ Ġ* ĠÂ© Ġ 2 0 1 8 ĠMatch ĠGroup , ĠLLC . Ċ Ġ*/ Ċ Ċ package Ġcom . t inder . sc ar let . internal . stub Ċ Ċ import Ġorg . mockito . kotlin . any Ċ import Ġorg . mockito . kotlin . any Array Ċ import Ġorg . mockito . kotlin . eq Ċ import Ġorg . mockito . kotlin . given Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġcom . t inder . sc ar let . Message Adapter Ċ import Ġcom . t inder . sc ar let . Stream Ċ import Ġcom . t inder . sc ar let . Stream Adapter Ċ import Ġcom . t inder . sc ar let . internal . state transition . State Transition Adapter Ċ import Ġcom . t inder . sc ar let . internal . state transition . State Transition Adapter Resolver Ċ import Ġcom . t inder . sc ar let . internal . utils . Message Adapter Resolver Ċ import Ġcom . t inder . sc ar let . internal . utils . Runtime Platform Ċ import Ġcom . t inder . sc ar let . internal . utils . Stream Adapter Resolver Ċ import Ġcom . t inder . sc ar let . ws . Receive Ċ import Ġcom . t inder . sc ar let . ws . Send Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . assertThat IllegalArgumentException Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . experimental . runners . En closed Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġorg . mockito . junit . Mockito JUnit Ċ import Ġorg . mockito . junit . Mockito Rule Ċ import Ġorg . mockito . quality . Strict ness Ċ Ċ @ RunWith ( En closed :: class ) Ċ internal Ġclass ĠStub Interface Factory Test Ġ{ ĊĊĠĠĠ Ġ@ RunWith ( Parameterized :: class ) ĊĠĠĠ Ġclass ĠGiven Invalid Service Interface ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice Interface : ĠClass <* >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpartial ErrorMessage : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠĠĠĠĠ Ġ@ get : Rule ĊĠĠĠĠĠĠĠ Ġval Ġmock ito Rule : ĠMockito Rule Ġ= ĠMockito JUnit . rule (). strict ness ( Strict ness . STRICT _ ST UB S ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplatform Ġ= Ġmock < Runtime Platform >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback Ġ= Ġmock < Stub Interface . Callback >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstub Method Factory Ġ= Ġmock < Stub Method . Factory >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstub Interface Factory Ġ= ĠStub Interface . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplatform , Ġcallback , Ġstub Method Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġcreate _ should Throw IllegalArgumentException () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat IllegalArgumentException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Thrown By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstub Interface Factory . create ( service Interface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Message Containing ( partial ErrorMessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠA Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend (@ Suppress (" UNUSED _ PARAMETER ") Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterface ĠParent Interface ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterface ĠChild Interface Ġ: ĠParent Interface ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdata () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam < AC lass >( partial ErrorMessage Ġ= Ġ" Service Ġdeclarations Ġmust Ġbe Ġinterfaces "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam < Child Interface >( partial ErrorMessage Ġ= Ġ" Service Ġinterfaces Ġmust Ġnot Ġextend Ġother Ġinterfaces ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT > Ġparam ( partial ErrorMessage : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( T :: class . java , Ġpartial ErrorMessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RunWith ( Parameterized :: class ) ĊĠĠĠ Ġclass ĠGiven Valid Service Interface ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice Interface : ĠClass <* >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexpected NumberOf Send Methods : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexpected NumberOf Receive Methods : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplatform Ġ= Ġmock < Runtime Platform >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback Ġ= Ġmock < Stub Interface . Callback >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstream Adapter Resolver Ġ= Ġmock < Stream Adapter Resolver >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmessage Adapter Resolver Ġ= Ġmock < Message Adapter Resolver >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstate Transition Adapter Resolver Ġ= Ġmock < State Transition Adapter Resolver >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstub Method Factory Ġ= ĠStub Method . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream Adapter Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Adapter Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Transition Adapter Resolver ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstub Interface Factory Ġ= ĠStub Interface . Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplatform , Ġcallback , Ġstub Method Factory ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġcreate _ should Create Service Method Executor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Transition Adapter Ġ= Ġmock < State Transition Adapter < Any >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven ( state Transition Adapter Resolver . resolve ( any (), Ġany Array ())). willReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Transition Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Adapter Ġ= Ġmock < Stream Adapter < Any , ĠAny >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven ( stream Adapter Resolver . resolve ( any ())). willReturn ( stream Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Adapter Ġ= Ġmock < Message Adapter < Any >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgiven ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Adapter Resolver . resolve ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( empty Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). willReturn ( message Adapter ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstub Interface Ġ= Ġstub Interface Factory . create ( service Interface ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Methods Ġ= Ġstub Interface . stub Methods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Send Methods Ġ= Ġservice Methods . filter Values Ġ{ Ġit Ġis ĠStub Method . Send Ġ}. size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Receive Methods Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Methods . filter Values Ġ{ Ġit Ġis ĠStub Method . Receive Ġ}. size ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( numberOf Send Methods ). isEqualTo ( expected NumberOf Send Methods ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( numberOf Receive Methods ). isEqualTo ( expected NumberOf Receive Methods ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected NumberOf Methods Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected NumberOf Send Methods Ġ+ Ġexpected NumberOf Receive Methods ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( service Methods . size ). isEqualTo ( expected NumberOf Methods ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġinterface ĠService Example Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend ( param 1 : ĠInt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Receive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreceive (): ĠStream < Int > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġinterface ĠService With Non Service Method Annotation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Deprecated (" This Ġmethod Ġis Ġdeprecated ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend ( param 1 : ĠInt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Receive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreceive (): ĠStream < Int > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġinterface ĠService With Multiple Send Methods Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend Int ( param 1 : ĠInt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend String ( param 1 : ĠString ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend Boolean ( param 1 : ĠBoolean ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Send ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsend Array ( param 1 : ĠArray < Any >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġinterface ĠService With Multiple Receive Methods Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Receive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreceive Int (): ĠStream < Int > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Receive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreceive String (): ĠStream < String > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Receive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreceive Boolean (): ĠStream < Boolean > ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Receive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġreceive Array (): ĠStream < Array < Any >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdata () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam < Service Example >( numberOf Send Methods Ġ= Ġ 1 , ĠnumberOf Receive Methods Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam < Service With Non Service Method Annotation >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Send Methods Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Receive Methods Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam < Service With Multiple Send Methods >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Send Methods Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Receive Methods Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam < Service With Multiple Receive Methods >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Send Methods Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Receive Methods Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT > Ġparam ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Send Methods : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumberOf Receive Methods : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( T :: class . java , ĠnumberOf Send Methods , ĠnumberOf Receive Methods ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ