package Ġcom . github . bl ind p ir ate . junit . extension . un roll Ċ Ċ import Ġcom . github . bl ind p ir ate . junit . extension . un roll . unsafe . extract Arguments Ċ import Ġorg . junit . jupiter . api . extension . Extension Ċ import Ġorg . junit . jupiter . api . extension . Extension Context Ċ import Ġorg . junit . jupiter . api . extension . Parameter Context Ċ import Ġorg . junit . jupiter . api . extension . Parameter Resolver Ċ import Ġorg . junit . jupiter . api . extension . Test Template Invocation Context Ċ import Ġorg . junit . jupiter . api . extension . Test Template Invocation Context Provider Ċ import Ġjava . util . stream . Stream Ċ Ċ class ĠUn roll Extension Ġ: ĠTest Template Invocation Context Provider Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsupports Test Template ( context : ĠExtension Context ?): ĠBoolean Ġ= Ġlast Parameter Is Param ( context !! ) ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Test Template Invocation Contexts ( context : ĠExtension Context ?): ĠStream < Test Template Invocation Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġextract Arguments ( getTest ClassName ( context !! ), Ġget TestMethod Name ( context )). map Ġ{ Ġarguments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Argument Number Match ( arguments !! , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUn roll Test Template Invocation Context ( arguments , Ġdetermine Test Name Template ( context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Argument Number Match ( arguments : ĠArray < Any >, Ġcontext : ĠExtension Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Count Ġ= Ġget TestMethod Parameter Count ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( arguments . size Ġ!= Ġexpected Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (""" W ow , Ġseems Ġyour Ġarguments Ġdoesn 't Ġmatch Ġthe Ġparameters Ġdeclared Ġin : Ġ${ get TestMethod Name ( context )} () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| expected : Ġ${ expected Count Ġ- Ġ 1 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| actual : Ġ${ arguments . size Ġ- Ġ 1 } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUn roll Test Parameter Resolver ( private Ġval Ġarguments : ĠArray < out ĠAny >) Ġ: ĠParameter Resolver Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsupports Parameter ( parameter Context : ĠParameter Context ?, Ġextension Context : ĠExtension Context ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext Match ( parameter Context !! , Ġextension Context !! ) Ġ&& Ġlast Parameter Is Param ( extension Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcontext Match ( parameter Context : ĠParameter Context , Ġextension Context : ĠExtension Context ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparameter Context . parameter . decl aring Executable Ġ== Ġextension Context . test Method . orElse ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Parameter ( parameter Context : ĠParameter Context ?, Ġextension Context : ĠExtension Context ?): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġarguments [ parameter Context ?. index !! ] ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUn roll Test Template Invocation Context ( private Ġval Ġarguments : ĠArray < out ĠAny >, Ġtest Name Template : ĠString ) Ġ: ĠTest Template Invocation Context Ġ{ ĊĠĠĠ Ġprivate Ġval Ġname Formatter Ġ= ĠUn roll Test Name Formatter ( test Name Template ) ĊĠĠĠ Ġoverride Ġfun Ġget DisplayName ( invocation Index : ĠInt ): ĠString Ġ= Ġname Formatter . format ( invocation Index , Ġarguments ) ĊĠĠĠ Ġoverride Ġfun Ġget Additional Extensions (): ĠMutable List < Extension > Ġ= Ġmutable ListOf ( Un roll Test Parameter Resolver ( arguments )) Ċ } Ċ