package Ġde . be ba uer . web flux . handler . dsl . codegen Ċ Ċ import Ġcom . squareup . kotlin po et .* Ċ import Ġcom . squareup . kotlin po et . Parameterized TypeName . Companion . parameter ized By Ċ Ċ import Ġjava . io . File Ċ Ċ internal Ġfun Ġgenerate Parameter Dsl ( output Dir : ĠFile , Ġtest Out Dir : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġfile Builder Ġ= ĠFile Spec . builder (" de . be ba uer . web flux . handler . dsl ", Ġ" Query Parameters Generated ") ĊĊĠĠĠ Ġval Ġquery Param Ġ= ĠClass Name (" de . be ba uer . web flux . handler . dsl ", Ġ" QueryParameter ") ĊĠĠĠ Ġval Ġhandler Dsl Ġ= ĠClass Name (" de . be ba uer . web flux . handler . dsl ", Ġ" Handler Dsl ") ĊĠĠĠ Ġval Ġword Spec Ġ= ĠClass Name (" io . kot est . core . spec . style ", Ġ" Word Spec ") ĊĠĠĠ Ġval Ġcomplete Operation Ġ= ĠClass Name (" de . be ba uer . web flux . handler . dsl ", Ġ" Complete Operation ") ĊĊĠĠĠ Ġval Ġtests Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġ( 2 .. 2 0 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġfunction Builder Ġ= ĠFun Spec . builder (" parameters ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. receiver ( handler Dsl ) ĊĊĠĠĠĠĠĠĠ Ġ( 1 .. i ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype T Ġ= ĠType Variable Name (" T $ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype U Ġ= ĠType Variable Name (" U $ it ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Builder . add Type Variable ( type T ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Builder . add Type Variable ( type U ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Builder . add Parameter (" parameter $ it ", Ġquery Param . parameter ized By ( type T , Ġtype U )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfunction Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" init ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLambda TypeName . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġhandler Dsl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType Ġ= Ġcomplete Operation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġ( 1 .. i ). map Ġ{ ĠType Variable Name (" T $ it ") Ġ}. to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( complete Operation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| return Ġthis . parameters (% 1 L ) Ġ{ Ġ% 2 L Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġthis . parameter ( parameter % 3 L ) Ġ{ Ġv % 3 L Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġinit (% 4 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 Ġuntil Ġi ). join ToString Ġ{ Ġ" parameter $ it " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 Ġuntil Ġi ). join ToString Ġ{ Ġ" v $ it " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. i ). join ToString Ġ{ Ġ" v $ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfile Builder . addFunction ( function Builder . build ()) ĊĊĠĠĠĠĠĠĠ Ġtests . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| " extract Ġ$ i Ġvalues " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġrun Handler Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġhandler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġparameters (${ ( 1 .. i ). join ToString Ġ{ Ġ"\" p $ it \" . int Param " Ġ}}) Ġ{ Ġ${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. i ). join ToString Ġ{ Ġ" p $ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok ( Flux . from Iterable ( listOf (${ ( 1 .. i ). join ToString Ġ{ Ġ" p $ it " Ġ}} ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠ Ġexpect Status (). is Ok ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. expect Body List ( Int :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. return Result (). response Body Ġshould Ġcontain Exactly (${ ( 1 .. i ). join ToString Ġ{ Ġ"$ it " Ġ}}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠ Ġrequest Ġ= Ġ{ Ġget (). uri ("/ test ? ${ ( 1 .. i ). join ToString ("& ") Ġ{ Ġ" p $ it =$ it " Ġ}} ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfile Builder . build (). writeTo ( output Dir ) ĊĊĠĠĠ ĠFile Spec . builder (" de . be ba uer . web flux . handler . dsl ", Ġ" Query Parameters Generated Tests ") ĊĠĠĠĠĠĠĠ Ġ. add Import (" io . kot est . matchers ", Ġ" should ") ĊĠĠĠĠĠĠĠ Ġ. add Import (" io . kot est . matchers . collections ", Ġ" contain Exactly ") ĊĠĠĠĠĠĠĠ Ġ. add Import (" reactor . core . publisher ", Ġ" Flux ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType Spec . class Builder (" Query Parameters Generated Tests "). super class ( word Spec ). add Initializer Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode Block . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| " parameters " Ġshould Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ${ tests . join ToString ("\ n \ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ. writeTo ( test Out Dir ) Ċ }