package Ġua . kur in ny i . jax rs . auto . mock . apiv 1 Ċ Ċ import Ġua . kur in ny i . jax rs . auto . mock . Utils Ċ import Ġua . kur in ny i . jax rs . auto . mock . extensions . ResponseBody Provider Ċ import Ġua . kur in ny i . jax rs . auto . mock . mocks . model . Complete Mocks Data Ċ import Ġua . kur in ny i . jax rs . auto . mock . mocks . model . Group Status Ċ import Ġua . kur in ny i . jax rs . auto . mock . mocks . model . Proxy Config Ċ import Ġua . kur in ny i . jax rs . auto . mock . mocks . model . impl . Api Adapter For Response Generation Ċ import Ġua . kur in ny i . jax rs . auto . mock . mocks . model . impl . Executable Method Mock Ċ import Ġua . kur in ny i . jax rs . auto . mock . mocks . model . impl . Group Of Method Mocks Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Proxy Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ class ĠStub Definition Context Ġ{ ĊĠĠĠ Ġinternal Ġval Ġmocks : ĠMutable List < Method Mock Builder > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġval Ġall Groups : ĠMutable List < Group Builder > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġinternal Ġvar Ġactive Groups : ĠMutable List < Group Builder > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġinternal Ġvar Ġproxy Config : ĠProxy Config Ġ= ĠProxy Config ( empty Map (), Ġempty List ()) ĊĊĠĠĠ Ġfun Ġcreate Stub s ( definitions : ĠStub Definition Context . () Ġ-> ĠUnit ): ĠComplete Mocks Data Ġ{ ĊĠĠĠĠĠĠĠ Ġdefinitions ( this ) ĊĠĠĠĠĠĠĠ Ġreturn ĠComplete Mocks Data ( mocks . map Ġ{ Ġit . executable Method Mock Ġ}, Ġall Groups . map Ġ{ Ġit . group Ġ}, Ġproxy Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< RESOURCE Ġ: ĠAny > Ġfor Class ( clazz : ĠK Class < RESOURCE >, Ġdefinitions : ĠCl azz Stub Definition Context < RESOURCE >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefinitions ( Clazz Stub Definition Context ( clazz . java , Ġthis )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgroup ( name : ĠString , Ġactive ByDefault : Boolean Ġ= Ġtrue , Ġbody : () Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġif Ġ( active ByDefault ) ĠGroup Status . ACTIVE Ġelse ĠGroup Status . NON _ ACTIVE ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= ĠGroup Builder ( name , Ġempty List (), Ġstatus ) ĊĠĠĠĠĠĠĠ Ġif Ġ( active Groups . contains ( group )) Ġthrow ĠIllegalArgumentException (" Group Ġ$ name Ġcontains Ġitself Ġrecursively . ĠThis Ġis Ġforbidden .") ĊĠĠĠĠĠĠĠ Ġactive Groups . add ( group ) ĊĠĠĠĠĠĠĠ Ġbody () ĊĠĠĠĠĠĠĠ Ġall Groups . add ( active Groups . last ()) ĊĠĠĠĠĠĠĠ Ġactive Groups . remove ( active Groups . last ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCl azz Stub Definition Context < RESOURCE >( private Ġval Ġclazz : ĠClass < RESOURCE >, Ġprivate Ġval Ġcontext : ĠStub Definition Context ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtemp Arg List : ĠMutable List < Executable Method Mock . Argument Matcher > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġmethod Mocks : ĠMutable List < Method Mock Builder > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġbypass Any Not Matched ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproxy Config Ġ= Ġcontext . proxy Config ĊĠĠĠĠĠĠĠ Ġcontext . proxy Config Ġ= Ġproxy Config . copy ( proxy Classes Ġ= Ġproxy Config . proxy Classes Ġ+ Ġ( clazz . name Ġto Ġpath )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord Any By passed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproxy Config Ġ= Ġcontext . proxy Config ĊĠĠĠĠĠĠĠ Ġcontext . proxy Config Ġ= Ġproxy Config . copy ( record Classes Ġ= Ġproxy Config . record Classes Ġ+ Ġclazz . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< RESULT > Ġcase ( method Call : ĠRESOURCE . () Ġ-> ĠRESULT ): ĠMethod Stub Definition RequestContext < RESULT > Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod Mocks Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠProxy . new Proxy Instance ( clazz . class Loader , ĠarrayOf ( clazz )) Ġ{ Ġproxy , Ġmethod , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck All Arguments SetUp ( args , Ġmethod ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Mocks . add ( Method Mock Builder ( method , Ġtemp Arg List )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Arg List Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . get ReturnValue ( method ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠRESOURCE ĊĠĠĠĠĠĠĠ Ġmethod Call ( instance ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactive By Group Ġ= Ġcontext . active Groups . last OrNull ()?. let Ġ{ Ġit . status Ġ== ĠGroup Status . ACTIVE Ġ} Ġ?: Ġtrue ĊĠĠĠĠĠĠĠ Ġcontext . active Groups Ġ= Ġcontext . active Groups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġgroup Ġ-> Ġgroup . copy ( method Mocks Ġ= Ġgroup . method Mocks Ġ+ Ġmethod Mocks ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠ Ġcontext . mocks . addAll ( method Mocks ) ĊĠĠĠĠĠĠĠ Ġmethod Mocks . forEach { Ġit . is Activated By Groups Ġ= Ġactive By Group Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMethod Stub Definition RequestContext ( method Mocks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck All Arguments SetUp ( args : ĠArray < Any > ?, Ġmethod : ĠMethod ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( args Ġ!= Ġnull Ġ&& Ġtemp Arg List . size Ġ< Ġargs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Not Ġall Ġparameters Ġof Ġmethod : Ġ${ method . name } Ġare Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" called Ġwith Ġmatch ers . ĠUse Ġmatch Ġmethods Ġlike Ġ' eq ',' any ' Ġetc Ġfor Ġall Ġthe Ġparameters ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġeq ( argument : ĠARG UMENT ): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable < ARGUMENT ?> Ġ{ Ġit Ġ== Ġargument Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġargument ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġnot Eq ( argument : ĠARG UMENT ): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable < ARGUMENT ?> Ġ{ Ġit Ġ!= Ġargument Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġargument ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġany (): ĠARG UMENT Ġ= Ġmatch Nullable Ġ{ Ġtrue Ġ} ĊĠĠĠ Ġfun Ġany Boolean (): ĠBoolean Ġ= Ġmatch Primitive ({ Ġtrue Ġ}, Ġtrue ) ĊĠĠĠ Ġfun Ġany Int (): ĠInt Ġ= Ġmatch Primitive ({ Ġtrue Ġ}, Ġ 0 ) ĊĠĠĠ Ġfun Ġany Double (): ĠDouble Ġ= Ġmatch Primitive ({ Ġtrue Ġ}, Ġ 0 . 0 ) ĊĠĠĠ Ġfun Ġany Long (): ĠLong Ġ= Ġmatch Primitive ({ Ġtrue Ġ}, Ġ 0 L ) ĊĊĠĠĠ Ġfun Ġany Boolean In Record (): ĠBoolean Ġ= Ġignore In Record Primitive ( true ) ĊĠĠĠ Ġfun Ġany Int In Record (): ĠInt Ġ= Ġignore In Record Primitive ( 0 ) ĊĠĠĠ Ġfun Ġany Double In Record (): ĠDouble Ġ= Ġignore In Record Primitive ( 0 . 0 ) ĊĠĠĠ Ġfun Ġany Long In Record (): ĠLong Ġ= Ġignore In Record Primitive ( 0 L ) ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġis Null (): ĠARG UMENT Ġ= Ġmatch Nullable Ġ{ Ġit Ġ== Ġnull Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġnot Null (): ĠARG UMENT Ġ= Ġmatch Nullable Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġany In Record (): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcast ed Predicate Ġ= Ġ{ Ġarg : ĠAny ? Ġ-> Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġtemp Arg List . add ( Executable Method Mock . Argument Matcher ( Executable Method Mock . Match Type . IGNORE _ IN _ RECORD , Ġcast ed Predicate )) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġas ĠARG UMENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġmatch Nullable ( predicate : Ġ( ARGUMENT ?) Ġ-> ĠBoolean ): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcast ed Predicate Ġ= Ġ{ Ġarg : ĠAny ? Ġ-> Ġpredicate ( arg Ġas ĠARG UMENT ) Ġ} ĊĠĠĠĠĠĠĠ Ġtemp Arg List . add ( Executable Method Mock . Argument Matcher ( Executable Method Mock . Match Type . MATCH , Ġcast ed Predicate )) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġas ĠARG UMENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġmatch ( predicate : Ġ( ARGUMENT ) Ġ-> ĠBoolean ): ĠARG UMENT Ġ= Ġmatch Nullable Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġpredicate ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġmatch Boolean ( predicate : Ġ( Boolean ) Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable < Boolean ?> Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġpredicate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmatch Int ( predicate : Ġ( Int ) Ġ-> ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable < Int ?> Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġpredicate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmatch Double ( predicate : Ġ( Double ) Ġ-> ĠBoolean ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable < Double ?> Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġpredicate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmatch Long ( predicate : Ġ( Long ) Ġ-> ĠBoolean ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable < Long ?> Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġpredicate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< ARGUMENT > Ġmatch Primitive ( predicate : Ġ( ARGUMENT ?) Ġ-> ĠBoolean , Ġarg : ĠARG UMENT ): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Nullable ( predicate ) ĊĠĠĠĠĠĠĠ Ġreturn Ġarg ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< ARGUMENT > Ġignore In Record Primitive ( arg : ĠARG UMENT ): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġany In Record < ARGUMENT >() ĊĠĠĠĠĠĠĠ Ġreturn Ġarg ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġbody Match ( predicate : Ġ( String ) Ġ-> ĠBoolean ): ĠARG UMENT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcast ed Predicate Ġ= Ġ{ Ġarg : ĠAny ? Ġ-> Ġpredicate ( arg Ġas ĠString ) Ġ} ĊĠĠĠĠĠĠĠ Ġtemp Arg List . add ( Executable Method Mock . Argument Matcher ( Executable Method Mock . Match Type . BODY _ MATCH , Ġcast ed Predicate )) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġas ĠARG UMENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġbody Match Regex ( regex : ĠString ): ĠARG UMENT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Match Ġ{ Ġregex . to Regex (). matches ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġ< ARGUMENT > Ġbody Same Json ( body : ĠString ): ĠARG UMENT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Match Ġ{ ĠUtils . trim To Single Spaces ( body ) Ġ== ĠUtils . trim To Single Spaces ( it ) Ġ} Ċ Ċ } Ċ Ċ class ĠMethod Stub Definition RequestContext < RESULT >( private Ġval Ġmethod Mocks : ĠList < Method Mock Builder >) Ġ{ ĊĊĠĠĠ Ġin fix Ġfun Ġwith ( additional Request Definition : ĠMethod Stub Definition Request Params Context . () Ġ-> ĠUnit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠMethod Stub Definition RequestContext < RESULT > Ġ{ ĊĠĠĠĠĠĠĠ Ġadditional Request Definition ( Method Stub Definition Request Params Context ( method Mocks )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġthen ( response Definition : ĠMethod Stub Definition Response Context < RESULT ?> .( Array < Any ?> ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Response Definition To Method Stub s { Ġresponse Context , Ġargs Ġ-> Ġresponse Context . response Definition ( args )} ĊĠĠĠ Ġ} ĊĠĠĠ Ġin fix Ġfun Ġ< A 1 > Ġthen 1 ( response Definition : ĠMethod Stub Definition Response Context < RESULT ?> .( A 1 ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Response Definition To Method Stub s { Ġresponse Context , Ġargs Ġ-> Ġresponse Context . response Definition ( args [ 0 ] Ġas ĠA 1 )} ĊĠĠĠ Ġ} ĊĠĠĠ Ġin fix Ġfun Ġ< A 1 , ĠA 2 > Ġthen 2 ( response Definition : ĠMethod Stub Definition Response Context < RESULT ?> .( A 1 , ĠA 2 ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Response Definition To Method Stub s { Ġresponse Context , Ġargs Ġ-> Ġresponse Context . response Definition ( args [ 0 ] Ġas ĠA 1 , Ġargs [ 1 ] Ġas ĠA 2 )} ĊĠĠĠ Ġ} ĊĠĠĠ Ġin fix Ġfun Ġ< A 1 , ĠA 2 , ĠA 3 > Ġthen 3 ( response Definition : ĠMethod Stub Definition Response Context < RESULT ?> .( A 1 , ĠA 2 , ĠA 3 ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Response Definition To Method Stub s { Ġresponse Context , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Context . response Definition ( args [ 0 ] Ġas ĠA 1 , Ġargs [ 1 ] Ġas ĠA 2 , Ġargs [ 2 ] Ġas ĠA 3 )} ĊĠĠĠ Ġ} ĊĠĠĠ Ġin fix Ġfun Ġ< A 1 , ĠA 2 , ĠA 3 , ĠA 4 > Ġthen 4 ( response Definition : ĠMethod Stub Definition Response Context < RESULT ?> .( A 1 , ĠA 2 , ĠA 3 , ĠA 4 ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Response Definition To Method Stub s { Ġresponse Context , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Context . response Definition ( args [ 0 ] Ġas ĠA 1 , Ġargs [ 1 ] Ġas ĠA 2 , Ġargs [ 2 ] Ġas ĠA 3 , Ġargs [ 3 ] Ġas ĠA 4 )} ĊĠĠĠ Ġ} ĊĠĠĠ Ġin fix Ġfun Ġ< A 1 , ĠA 2 , ĠA 3 , ĠA 4 , ĠA 5 > Ġthen 5 ( response Definition : ĠMethod Stub Definition Response Context < RESULT ?> .( A 1 , ĠA 2 , ĠA 3 , ĠA 4 , ĠA 5 ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Response Definition To Method Stub s { Ġresponse Context , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Context . response Definition ( args [ 0 ] Ġas ĠA 1 , Ġargs [ 1 ] Ġas ĠA 2 , Ġargs [ 2 ] Ġas ĠA 3 , Ġargs [ 3 ] Ġas ĠA 4 , Ġargs [ 4 ] Ġas ĠA 5 )} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġset Response Definition To Method Stub s ( application : Ġ( Method Stub Definition Response Context < RESULT ? >, ĠArray < Any ?> ) Ġ-> ĠRESULT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod Mocks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . response Section Ġ= Ġ{ Ġapi Adapter , Ġargs , Ġmethod Stub Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication ( Method Stub Definition Response Context ( api Adapter , Ġmethod Stub ), Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMethod Stub Definition Request Params Context ( private Ġval Ġmethod Mocks : ĠList < Method Mock Builder >) Ġ{ ĊĊĠĠĠ Ġfun Ġheader ( name : ĠString , Ġvalue : ĠHeader Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod Mocks . forEach Ġ{ Ġit . request Headers Ġ+= ĠExec utable Method Mock . Header Parameter ( name , Ġvalue . matcher ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠHeader Value Ġprivate Ġconstructor ( val Ġmatcher : ĠExec utable Method Mock . Argument Matcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfor Matcher ( matcher : ĠExec utable Method Mock . Argument Matcher ): ĠHeader Value Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHeader Value ( matcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġeq ( value : ĠString ): ĠHeader Value Ġ= Ġmatch Nullable Ġ{ Ġit Ġ== Ġvalue Ġ} ĊĊĠĠĠ Ġfun Ġmatch ( predicate : Ġ( String ) Ġ-> ĠBoolean ): ĠHeader Value Ġ= Ġmatch Nullable Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġpredicate ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġmatch Nullable ( predicate : Ġ( String ?) Ġ-> ĠBoolean ): ĠHeader Value Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcast ed Predicate Ġ= Ġ{ Ġarg : ĠAny ? Ġ-> Ġpredicate ( arg Ġas ĠString ?) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠHeader Value . for Matcher ( Executable Method Mock . Argument Matcher ( Executable Method Mock . Match Type . MATCH , Ġcast ed Predicate )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnot Eq ( value : ĠString ): ĠHeader Value Ġ= Ġmatch Nullable Ġ{ Ġit Ġ!= Ġvalue Ġ} ĊĊĠĠĠ Ġfun Ġis Null (): ĠHeader Value Ġ= Ġmatch Nullable Ġ{ Ġit Ġ== Ġnull Ġ} ĊĊĠĠĠ Ġfun Ġnot Null (): ĠHeader Value Ġ= Ġmatch Nullable Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĊĠĠĠ Ġfun Ġmatch Regex ( regex : ĠString ): ĠHeader Value Ġ= Ġmatch Nullable Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġregex . to Regex (). matches ( it ) Ġ} Ċ } Ċ Ċ class ĠMethod Stub Definition Response Context < RESPONSE > Ġ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapi Adapter : ĠApi Adapter For Response Generation , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexecutable Method Mock : ĠExec utable Method Mock ) Ġ{ ĊĊĠĠĠ Ġfun Ġrecord () Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Adapter . record Response ( executable Method Mock . arguments Matchers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcode ( code : ĠInt ): ĠRESP ONSE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Adapter . set Response Code ( code ) ĊĠĠĠĠĠĠĠ Ġreturn ĠUtils . get ReturnValue ( api Adapter . method ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbody Raw ( body : String ): ĠRESP ONSE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Adapter . write Body Raw ( body ) ĊĠĠĠĠĠĠĠ Ġreturn ĠUtils . get ReturnValue ( api Adapter . method ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġproxy To ( path : ĠString ): ĠRESP ONSE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Adapter . proxy To ( path ) ĊĠĠĠĠĠĠĠ Ġreturn ĠUtils . get ReturnValue ( api Adapter . method ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġheader ( header Name : ĠString , Ġheader Value : ĠString ): ĠRESP ONSE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġapi Adapter . set Response Header ( header Name , Ġheader Value ) ĊĠĠĠĠĠĠĠ Ġreturn ĠUtils . get ReturnValue ( api Adapter . method ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbody Json ( response Body Provider : ĠResponse Body Provider , Ġbody : ĠString , Ġvar arg Ġtemplate Args : ĠPair < String , ĠAny >): ĠRESP ONSE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Adapter . getObject FromString ( response Body Provider , Ġbody , Ġtemplate Args . toMap ()) ĊĊĠĠĠ Ġfun Ġbody Json ( body : ĠString , Ġvar arg Ġtemplate Args : ĠPair < String , ĠAny >): ĠRESP ONSE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Adapter . getObject FromString ( body , Ġtemplate Args . toMap ()) Ċ } Ċ Ċ data Ġclass ĠMethod Mock Builder Ġ( private Ġval Ġmethod : ĠMethod , Ġval Ġarguments : ĠList < Executable Method Mock . Argument Matcher >) Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġrequest Headers : ĠList < Executable Method Mock . Header Parameter > Ġ= ĠlistOf () ĊĠĠĠ Ġinternal Ġvar Ġresponse Section : Ġ Ġ(( Api Adapter For Response Generation , ĠArray < Any ? >, ĠExec utable Method Mock ) Ġ-> ĠAny ? )? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġis Activated By Groups : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġinternal Ġval Ġexecutable Method Mock : ĠExec utable Method Mock Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse Section ?. let Ġ{ ĠExec utable Method Mock ( method , Ġarguments , Ġrequest Headers , Ġit , Ġis Activated By Groups ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" H aven 't Ġyou Ġforgot Ġto Ġadd Ġ' then ' Ġsection Ġto Ġmock Ġfor Ġ${ method . name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠGroup Builder Ġ( val Ġname : ĠString , Ġval Ġmethod Mocks : ĠList < Method Mock Builder >, Ġvar Ġstatus : ĠGroup Status ) Ġ{ ĊĠĠĠ Ġinternal Ġval Ġgroup : ĠGroup Of Method Mocks Ġby Ġlazy Ġ{ ĠGroup Of Method Mocks ( name , Ġmethod Mocks . map Ġ{ Ġit . executable Method Mock Ġ}, Ġstatus ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= Ġ( this Ġ=== Ġother ) Ġ|| Ġ( other Ġis ĠGroup Builder Ġ&& Ġother . name Ġ== Ġname ) ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġname . hashCode () Ċ } ĊĊ