/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠMat th ias ĠGe is ler Ġ( bit P ogo ) Ġ/ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby ĠApache Ġv 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġtech . ant ib y tes . k mock . processor . utils Ċ Ċ import Ġcom . google . devtools . k sp . symbol . KS Class Declaration Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Source Ċ import Ġtech . ant ib y tes . util . test . fixture . fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . kotlin Fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . list Fixture Ċ import Ġtech . ant ib y tes . util . test . ful fil s Ċ import Ġtech . ant ib y tes . util . test . must Be Ċ Ċ class ĠS py Container Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= Ġkotlin Fixture () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġful fil s ĠS py Container `() Ġ{ ĊĠĠĠĠĠĠĠ ĠS py Container ( empty Set (), Ġfixture . fixture (), Ġfixture . fixture ()) Ġful fil s ĠProcessor Contract . Spy Container :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Spy able Ġis Ġcalled Ġit Ġreturn Ġfalse Ġif Ġn ul led Ġtemplate Ġnor Ġthe Ġderivative ĠTemplate Name Ġis Ġnot Ġpart Ġof Ġthe Ġenabled Ġsp ies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Sp ies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). is Spy able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Spy able Ġis Ġcalled Ġit Ġreturn Ġfalse Ġif Ġtemplate Ġnor Ġthe Ġderivative ĠTemplate Name Ġis Ġnot Ġpart Ġof Ġthe Ġenabled Ġsp ies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Sp ies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). is Spy able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġmock k ( relax ed Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Spy able Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif Ġtemplate Ġis Ġpart Ġof Ġthe Ġenabled Ġsp ies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġtemplate : ĠK S Class Declaration Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtemplate . qualified Name !!. asString () Ġ} Ġreturns Ġenabled Sp ies [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Sp ies . toSet (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). is Spy able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġtemplate , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ// ĠAli ases Ġ& ĠMulti Mock ĊĠĠĠ Ġfun Ġ` Given Ġis Spy able Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif Ġthe Ġderivative ĠTemplate Name Ġis Ġpart Ġof Ġthe Ġenabled Ġsp ies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval ĠpackageName : ĠString Ġ= Ġfixture . fixture () ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Name : ĠString Ġ= Ġfixture . fixture () ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). to Mutable List (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ("$ packageName .$ template Name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Sp ies . toSet (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). is Spy able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġmock k ( relax ed Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name Ġ= Ġtemplate Name , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis S able Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif Ġtemplate Ġnor Ġthe Ġderivative ĠTemplate Name Ġis Ġnot Ġpart Ġof Ġthe Ġenabled Ġsp ies , Ġbut Ġsp ies Only Ġis Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Sp ies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). is Spy able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġmock k ( relax ed Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis S able Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif Ġtemplate Ġnor Ġthe Ġderivative ĠTemplate Name Ġis Ġnot Ġpart Ġof Ġthe Ġenabled Ġsp ies , Ġbut Ġspy All Ġis Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Sp ies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠ Ġ). is Spy able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ= Ġmock k ( relax ed Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Name Ġ= Ġfixture . fixture (), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġit Ġreturn Ġfalse Ġif ĠSp ies Ġare Ġnot Ġenabled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( empty Set (), Ġfalse , Ġfalse ). has Sp ies () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif ĠSp ies Ġare Ġnot Ġenabled Ġbut Ġsp ies Only Ġis Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( empty Set (), Ġtrue , Ġfalse ). has Sp ies () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif ĠSp ies Ġare Ġnot Ġenabled Ġbut Ġsp ies All Ġis Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( empty Set (), Ġfalse , Ġtrue ). has Sp ies () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif ĠSp ies Ġare Ġenabled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( enabled Sp ies , Ġtrue , Ġtrue ). has Sp ies () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġit Ġreturn Ġtrue Ġif ĠSp ies Ġare Ġenabled Ġbut Ġsp ies Only Ġand Ġspy All Ġis Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ). toSet () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( enabled Sp ies , Ġfalse , Ġfalse ). has Sp ies () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġwith Ġa Ġfilter Ġit Ġreturn Ġfalse Ġif Ġall Ġfound ĠSp ies Ġare Ġfiltered Ġout `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Names Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter : ĠList < Source > Ġ= ĠlistOf ( mock k (), Ġmock k (), Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. packageName Ġ} Ġreturns Ġpackages [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. packageName Ġ} Ġreturns Ġpackages [ 1 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 2 ]. packageName Ġ} Ġreturns Ġpackages [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 1 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 2 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġpackages . map Indexed Ġ{ Ġidx , Ġpack aq e Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ pack aq e .${ template Names [ idx ]}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( enabled Sp ies . toSet (), Ġfalse , Ġfalse ). has Sp ies ( filter ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġwith Ġa Ġfilter Ġit Ġreturn Ġtrue Ġif Ġall Ġfound ĠSp ies Ġare Ġfiltered Ġout Ġbut Ġsp ies Only Ġis Ġactive `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Names Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter : ĠList < Source > Ġ= ĠlistOf ( mock k (), Ġmock k (), Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. packageName Ġ} Ġreturns Ġpackages [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. packageName Ġ} Ġreturns Ġpackages [ 1 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 2 ]. packageName Ġ} Ġreturns Ġpackages [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 1 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 2 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġpackages . map Indexed Ġ{ Ġidx , Ġpack aq e Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ pack aq e .${ template Names [ idx ]}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( enabled Sp ies . toSet (), Ġtrue , Ġfalse ). has Sp ies ( filter ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġwith Ġa Ġfilter Ġit Ġreturn Ġtrue Ġif Ġall Ġfound ĠSp ies Ġare Ġfiltered Ġout Ġbut Ġspy All Ġis Ġactive `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Names Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter : ĠList < Source > Ġ= ĠlistOf ( mock k (), Ġmock k (), Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. packageName Ġ} Ġreturns Ġpackages [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. packageName Ġ} Ġreturns Ġpackages [ 1 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 2 ]. packageName Ġ} Ġreturns Ġpackages [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 1 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 2 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġpackages . map Indexed Ġ{ Ġidx , Ġpack aq e Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ pack aq e .${ template Names [ idx ]}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( enabled Sp ies . toSet (), Ġfalse , Ġtrue ). has Sp ies ( filter ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġhas Sp ies Ġis Ġcalled Ġwith Ġa Ġfilter Ġit Ġreturn Ġtrue Ġif Ġnot Ġall ĠSp ies Ġare Ġfiltered Ġout `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Names Ġ= Ġfixture . list Fixture < String >( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter : ĠList < Source > Ġ= ĠlistOf ( mock k (), Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. packageName Ġ} Ġreturns Ġpackages [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. packageName Ġ} Ġreturns Ġpackages [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 0 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 0 ] ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġfilter [ 1 ]. template Name Ġ} Ġreturns Ġtemplate Names [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġenabled Sp ies Ġ= Ġpackages . map Indexed Ġ{ Ġidx , Ġpack aq e Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ pack aq e .${ template Names [ idx ]}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠS py Container ( enabled Sp ies . toSet (), Ġfalse , Ġfalse ). has Sp ies ( filter ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ