package Ġgraphql . n adel . instrumentation Ċ Ċ import Ġgraphql . Execution Result Ċ import Ġgraphql . execution . instrumentation . Instrumentation Context Ċ import Ġgraphql . execution . instrumentation . Instrumentation State Ċ import Ġgraphql . language . Document Ċ import Ġgraphql . n adel . engine . util . single OfType Ċ import Ġgraphql . n adel . instrumentation . Chain ed N adel Instrumentation . Chain ed Instrumentation State Ċ import Ġgraphql . n adel . instrumentation . parameters . N adel Instrumentation Create State Parameters Ċ import Ġgraphql . n adel . instrumentation . parameters . N adel Instrumentation Execute Operation Parameters Ċ import Ġgraphql . n adel . instrumentation . parameters . N adel Instrumentation Query Execution Parameters Ċ import Ġgraphql . n adel . instrumentation . parameters . N adel Instrumentation Query Validation Parameters Ċ import Ġgraphql . n adel . instrumentation . parameters . N adel Instrumentation Timing Parameters Ċ import Ġgraphql . n adel . test . mock Ċ import Ġgraphql . n adel . test . spy Ċ import Ġgraphql . validation . ValidationError Ċ import Ġio . kot est . core . spec . style . Describe Spec Ċ import Ġio . mock k . every Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . future . as Deferred Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ Ċ class ĠCh ained N adel Instrumentation Test Ġ: ĠDescribe Spec ({ ĊĠĠĠ Ġdescribe (" composite Ġinstrument ation Ġstate ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" holds Ġand Ġreturns Ġindividual Ġstates ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchained Instrumentation Ġ= ĠCh ained N adel Instrumentation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreates Ġ 5 Ġinstrument ations Ġto Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠN adel Instrumentation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠcreateState ( parameters : ĠN adel Instrumentation Create State Parameters ): ĠInstrument ation State ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠInstrument ation State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" state -$ index " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sh uffled () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchained State Ġ= Ġchained Instrumentation . create State ( mock ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( chain ed State Ġis ĠCh ained Instrumentation State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained State Ġas ĠCh ained Instrumentation State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( chain ed State . getState ( instrumentation ). toString () Ġ== Ġ" state -${ instrumentation . hashCode () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" states ") Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠState Ġ: ĠInstrument ation State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsomething : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclass ĠTest Instrumentation ( val Ġkey : ĠAny ) Ġ: ĠN adel Instrumentation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠcreateState ( parameters : ĠN adel Instrumentation Create State Parameters ): ĠInstrument ation State ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠState (). also Ġ{ Ġit . something Ġ= Ġkey Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Step Timed ( parameters : ĠN adel Instrumentation Timing Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parameters . get Instrumentation State < State >() ?. something Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbegin Query Execution ( parameters : ĠN adel Instrumentation Query Execution Parameters ): ĠInstrument ation Context < Execution Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parameters . get Instrumentation State < State >() ?. something Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . begin Query Execution ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbegin Parse ( parameters : ĠN adel Instrumentation Query Execution Parameters ): ĠInstrument ation Context < Document > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parameters . get Instrumentation State < State >() ?. something Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . begin Parse ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbegin Validation ( parameters : ĠN adel Instrumentation Query Validation Parameters ): ĠInstrument ation Context < List < ValidationError >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parameters . get Instrumentation State < State >() ?. something Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . begin Validation ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbegin Execute ( parameters : ĠN adel Instrumentation Execute Operation Parameters ): ĠCompletableFuture < Instrumentation Context < Execution Result >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parameters . get Instrumentation State < State >() ?. something Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . begin Execute ( parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinstrument Execution Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecution Result : ĠExecution Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters : ĠN adel Instrumentation Query Execution Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠCompletableFuture < Execution Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parameters . get Instrumentation State < State >() ?. something Ġ== Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . instrument Execution Result ( execution Result , Ġparameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchained Instrumentation Ġ= ĠCh ained N adel Instrumentation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreates Ġ 5 Ġinstrument ations Ġto Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 5 ). map Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspy k ( Test Instrumentation ( key Ġ= Ġ" test -$ index ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchained State Ġ= Ġchained Instrumentation . create State ( mock ()) ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġstate Ġfor Ġon Step Timed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . on Step Timed ( mock Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġchained State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ Ġcopy Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġcopy Call . invocation . args . single OfType < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Ġ{ Ġnew Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠTest Instrumentation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot < N adel Instrumentation Timing Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . on Step Timed ( capture ( params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . captured . get Instrumentation State < State >() ?. something Ġ== Ġinstrument ation . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġstate Ġfor Ġbegin Query Execution ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Query Execution ( mock Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġchained State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ Ġcopy Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġcopy Call . invocation . args . single OfType < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Ġ{ Ġnew Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠTest Instrumentation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot < N adel Instrumentation Query Execution Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Query Execution ( capture ( params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . captured . get Instrumentation State < State >() ?. something Ġ== Ġinstrument ation . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġstate Ġfor Ġbegin Parse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Parse ( mock Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġchained State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ Ġcopy Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġcopy Call . invocation . args . single OfType < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Ġ{ Ġnew Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠTest Instrumentation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot < N adel Instrumentation Query Execution Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Parse ( capture ( params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . captured . get Instrumentation State < State >() ?. something Ġ== Ġinstrument ation . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġstate Ġfor Ġbegin Validation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Validation ( mock Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġchained State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ Ġcopy Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġcopy Call . invocation . args . single OfType < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Ġ{ Ġnew Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠTest Instrumentation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot < N adel Instrumentation Query Validation Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Validation ( capture ( params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . captured . get Instrumentation State < State >() ?. something Ġ== Ġinstrument ation . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġstate Ġfor Ġbegin Execute ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Execute ( mock Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġchained State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ Ġcopy Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġcopy Call . invocation . args . single OfType < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Ġ{ Ġnew Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠTest Instrumentation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot < N adel Instrumentation Execute Operation Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Execute ( capture ( params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . captured . get Instrumentation State < State >() ?. something Ġ== Ġinstrument ation . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġstate Ġfor Ġinstrument Execution Result ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . instrument Execution Result ( mock (), Ġmock Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġchained State ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ Ġcopy Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġcopy Call . invocation . args . single OfType < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Ġ{ Ġnew Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Params . get Instrumentation State < Instrumentation State >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠTest Instrumentation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġslot < N adel Instrumentation Query Execution Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . instrument Execution Result ( any (), Ġcapture ( params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . is Capt ured ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( params . captured . get Instrumentation State < State >() ?. something Ġ== Ġinstrument ation . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" parameter Ġdeleg ation ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchained Instrumentation Ġ= ĠCh ained N adel Instrumentation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠN adel Instrumentation Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġchained State Ġ= Ġchained Instrumentation . create State ( mock ()) ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġparameters Ġfor Ġon Step Timed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Copy Ġ= Ġmock < N adel Instrumentation Timing Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmock < N adel Instrumentation Timing Parameters > Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . get Instrumentation State < Instrumentation State >() Ġ} Ġreturns Ġchained State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġparams Copy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . on Step Timed ( params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . on Step Timed ( params Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġparameters Ġfor Ġbegin Query Execution ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Copy Ġ= Ġmock < N adel Instrumentation Query Execution Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmock < N adel Instrumentation Query Execution Parameters > Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . get Instrumentation State < Instrumentation State >() Ġ} Ġreturns Ġchained State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġparams Copy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Query Execution ( params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Query Execution ( params Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġparameters Ġfor Ġbegin Parse ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Copy Ġ= Ġmock < N adel Instrumentation Query Execution Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmock < N adel Instrumentation Query Execution Parameters > Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . get Instrumentation State < Instrumentation State >() Ġ} Ġreturns Ġchained State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġparams Copy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Parse ( params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Parse ( params Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġparameters Ġfor Ġbegin Validation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Copy Ġ= Ġmock < N adel Instrumentation Query Validation Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmock < N adel Instrumentation Query Validation Parameters > Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . get Instrumentation State < Instrumentation State >() Ġ} Ġreturns Ġchained State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġparams Copy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Validation ( params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Validation ( params Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġparameters Ġfor Ġbegin Execute ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Copy Ġ= Ġmock < N adel Instrumentation Execute Operation Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmock < N adel Instrumentation Execute Operation Parameters > Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . get Instrumentation State < Instrumentation State >() Ġ} Ġreturns Ġchained State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġparams Copy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . begin Execute ( params ). as Deferred (). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . begin Execute ( params Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" passes Ġon Ġcorrect Ġparameters Ġfor Ġinstrument Execution Result ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Copy Ġ= Ġmock < N adel Instrumentation Query Execution Parameters >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmock < N adel Instrumentation Query Execution Parameters > Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . get Instrumentation State < Instrumentation State >() Ġ} Ġreturns Ġchained State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparams . copy ( any (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġparams Copy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . instrument Execution Result ( mock (), Ġparams ). as Deferred (). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchained Instrumentation . get Instrument ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġinstrument ation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation . instrument Execution Result ( any (), Ġparams Copy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ