package Ġio . kot est . engine . spec Ċ Ċ import Ġio . kot est . core . spec . Spec Ċ import Ġio . kot est . core . spec . Spec Ref Ċ import Ġkotlin . reflect . K Class Ċ Ċ data Ġclass ĠReflect ive Spec Ref ( override Ġval Ġk class : ĠK Class < out ĠSpec >) Ġ: ĠSpec Ref Ġ{ ĊĠĠ Ġoverride Ġfun Ġinstance (): ĠResult < Spec > Ġ= Ġinstantiate ( k class ) Ċ } Ċ Ċ data Ġclass ĠFunction Spec Ref ( val Ġfn : Ġ() Ġ-> ĠSpec , Ġoverride Ġval Ġk class : ĠK Class < out ĠSpec >) Ġ: ĠSpec Ref Ġ{ ĊĠĠ Ġoverride Ġfun Ġinstance (): ĠResult < Spec > Ġ= ĠResult . success ( fn ()) Ċ } Ċ Ċ data Ġclass ĠInstance Spec Ref ( val Ġspec : ĠSpec ) Ġ: ĠSpec Ref Ġ{ ĊĠĠ Ġoverride Ġval Ġk class : ĠK Class < out ĠSpec > Ġ= Ġspec :: class ĊĠĠ Ġoverride Ġfun Ġinstance (): ĠResult < Spec > Ġ= ĠResult . success ( spec ) Ċ } Ċ Ċ expect Ġfun Ġinstantiate ( k class : ĠK Class < out ĠSpec >): ĠResult < Spec > Ċ