/* Ċ Ġ* Ġ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 . gradle . k mock Ċ Ċ import Ġcom . google . devtools . k sp . gradle . K sp Extension Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtech . ant ib y tes . gradle . k mock . fixture . String Alpha Generator Ċ import Ġtech . ant ib y tes . gradle . test . create Extension Ċ 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 . fixture . map Fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . qual ifier . named Ċ import Ġtech . ant ib y tes . util . test . ful fil s Ċ import Ġtech . ant ib y tes . util . test . must Be Ċ import Ġkotlin . test . assert Fails With Ċ Ċ @ Opt In ( K Mock Gradle Experimental :: class ) Ċ class ĠExtension Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= Ġkotlin Fixture Ġ{ ĊĠĠĠĠĠĠĠ Ġit . add Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Alpha Generator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Ġ= Ġnamed (" string Alpha ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġful fil s ĠExtension `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension Ġful fil s ĠK Mock Plugin Contract . Extension :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġdefault Ġroot Package Ġis Ġan Ġempty Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . root Package Ġmust Be Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġpropag ates Ġroot Package Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠString Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . root Package Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . root Package Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ root Package ", Ġexpected ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġdefault Ġalias Name Mapping Ġis Ġa Ġempty Ġmap `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . alias Name Mapping Ġmust Be Ġempty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġalias Name Mapping Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Qualifier Ġ= Ġnamed (" string Alpha "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . alias Name Mapping Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . alias Name Mapping Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ alias _${ expected . keys . toList ()[ 0 ] }", Ġexpected . values . toList ()[ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ alias _${ expected . keys . toList ()[ 1 ] }", Ġexpected . values . toList ()[ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ alias _${ expected . keys . toList ()[ 2 ] }", Ġexpected . values . toList ()[ 2 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġalias Name Mapping Ġcontains Ġinternal Ġnames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Names Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ root Package ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ is K mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ k sp Dir " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġinternal Names . forEach Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . alias Name Mapping Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġto Ġfixture . fixture ( named (" string Alpha ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ name Ġis Ġnot Ġallowed !" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġalias Name Mapping Ġcontains Ġspecial Ġchars Ġin Ġthe Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġillegal Ġ= Ġ" some . thing " ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension . alias Name Mapping Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture < String >( named (" string Alpha ")) Ġto Ġ" some . thing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ il legal Ġis Ġnot Ġapplicable !" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġdefault Ġallow Build In Prox ies Ġis Ġa Ġempty Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . use Build In Prox ies On Ġmust Be Ġempty Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġallow Build In Prox ies Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠList < String > Ġ= Ġfixture . list Fixture ( size Ġ= Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . use Build In Prox ies On Ġ= Ġexpected . toSet () ĊĊĠĠĠĠĠĠĠ Ġextension . use Build In Prox ies On Ġmust Be Ġexpected . toSet () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ build In _ 0 ", Ġexpected [ 0 ]) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ build In _ 1 ", Ġexpected [ 1 ]) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ build In _ 2 ", Ġexpected [ 2 ]) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġuse Type Prefix For Ġhas Ġno Ġvalues `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . use Type Prefix For Ġmust Be Ġempty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġuse Type Prefix For Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Qualifier Ġ= Ġnamed (" string Alpha ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . use Type Prefix For Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . use Type Prefix For Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ name Prefix _${ expected . keys . toList ()[ 0 ] }", Ġexpected . values . toList ()[ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ name Prefix _${ expected . keys . toList ()[ 1 ] }", Ġexpected . values . toList ()[ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ name Prefix _${ expected . keys . toList ()[ 2 ] }", Ġexpected . values . toList ()[ 2 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġuse Type Prefix For Ġcontains Ġinternal Ġnames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Names Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ root Package ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ is K mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ k sp Dir " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġinternal Names . forEach Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . use Type Prefix For Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġto Ġfixture . fixture ( named (" string Alpha ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ name Ġis Ġnot Ġallowed !" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġuse Type Prefix For Ġcontains Ġspecial Ġchars Ġin Ġthe Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġillegal Ġ= Ġ" some . thing " ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension . use Type Prefix For Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture < String >( named (" string Alpha ")) Ġto Ġ" some . thing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ il legal Ġis Ġnot Ġapplicable !" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġcustom Method Names Ġhas Ġno Ġvalues `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . custom Method Names Ġmust Be Ġempty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġcustom Method Names Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Qualifier Ġ= Ġnamed (" string Alpha ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . custom Method Names Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . custom Method Names Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ custom MethodName _${ expected . keys . toList ()[ 0 ] }", Ġexpected . values . toList ()[ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ custom MethodName _${ expected . keys . toList ()[ 1 ] }", Ġexpected . values . toList ()[ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ custom MethodName _${ expected . keys . toList ()[ 2 ] }", Ġexpected . values . toList ()[ 2 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġcustom Method Names Ġcontains Ġinternal Ġnames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Names Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ root Package ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ is K mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ k sp Dir " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġinternal Names . forEach Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . custom Method Names Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġto Ġfixture . fixture ( named (" string Alpha ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ name Ġis Ġnot Ġallowed !" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġcustom Method Names Ġcontains Ġspecial Ġchars Ġin Ġthe Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġillegal Ġ= Ġ" some . thing " ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension . custom Method Names Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture < String >( named (" string Alpha ")) Ġto Ġ" some . thing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ il legal Ġis Ġnot Ġapplicable !" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġfreeze On Default Ġis Ġtrue Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . freeze On Default Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġfreeze On Default Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . freeze On Default Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . freeze On Default Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ freeze ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġallow Interfaces Ġis Ġfalse Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . allow Interfaces Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġallow Interfaces Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . allow Interfaces Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . allow Interfaces Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ allow Interfaces ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġdefault ĠspyOn Ġis Ġa Ġempty Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . spyOn Ġmust Be Ġempty Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates ĠspyOn Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠList < String > Ġ= Ġfixture . list Fixture ( size Ġ= Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . spyOn Ġ= Ġexpected . toSet () ĊĊĠĠĠĠĠĠĠ Ġextension . spyOn Ġmust Be Ġexpected . toSet () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ spyOn _ 0 ", Ġexpected [ 0 ]) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ spyOn _ 1 ", Ġexpected [ 1 ]) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ spyOn _ 2 ", Ġexpected [ 2 ]) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġsp ies Only Ġis Ġfalse Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . sp ies Only Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġsp ies Only Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . sp ies Only Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . sp ies Only Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ sp ies Only ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġspy All Ġis Ġfalse Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . spy All Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġspy All Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . spy All Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . spy All Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ spy All ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġdisable Factories Ġis Ġfalse Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . disable Factories Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġdisable Factories Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . disable Factories Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . disable Factories Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ disable _ factories ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġcustom Shared Annotations Ġhas Ġno Ġvalues `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . custom Annotations For Meta Ġmust Be Ġempty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġcustom Shared Annotations Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Qualifier Ġ= Ġnamed (" string Alpha ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . custom Annotations For Meta Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . custom Annotations For Meta Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ custom Annotation _${ expected . keys . toList ()[ 0 ] }", Ġexpected . values . toList ()[ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ custom Annotation _${ expected . keys . toList ()[ 1 ] }", Ġexpected . values . toList ()[ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sp Extension . arg (" k mock _ custom Annotation _${ expected . keys . toList ()[ 2 ] }", Ġexpected . values . toList ()[ 2 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġcustom Shared Annotations Ġcontains Ġinternal Ġnames `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Names Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ root Package ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ is K mp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k mock _ k sp Dir " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġinternal Names . forEach Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . custom Annotations For Meta Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġto Ġfixture . fixture ( named (" string Alpha ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ name Ġis Ġnot Ġallowed !" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġfails Ġif Ġthe Ġcustom Shared Annotations Ġcontains Ġspecial Ġchars Ġin Ġthe Ġvalue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġillegal Ġ= Ġ" some . thing " ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension . custom Annotations For Meta Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . fixture < String >( named (" string Alpha ")) Ġto Ġ" some . thing " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġerror . message Ġmust Be Ġ"$ il legal Ġis Ġnot Ġapplicable !" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġallow Experimental Proxy Access Ġis Ġfalse Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . allow Experimental Proxy Access Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġallow Experimental Proxy Access Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . allow Experimental Proxy Access Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . allow Experimental Proxy Access Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ alternative Proxy Access ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Its Ġenable F ine Gr ained Names Ġis Ġfalse Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĊĠĠĠĠĠĠĠ Ġextension . enable F ine Gr ained Names Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġpropag ates Ġenable F ine Gr ained Names Ġchanges Ġto ĠK sp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġk sp Extension : ĠK sp Extension Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected : ĠBoolean Ġ= Ġfixture . fixture () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . extensions . getBy Type ( K sp Extension :: class . java ) Ġ} Ġreturns Ġk sp Extension ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġcreate Extension < K Mock Extension >( project ) ĊĠĠĠĠĠĠĠ Ġextension . enable F ine Gr ained Names Ġ= Ġexpected ĊĊĠĠĠĠĠĠĠ Ġextension . enable F ine Gr ained Names Ġmust Be Ġexpected ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġk sp Extension . arg (" k mock _ enable F ine Gr ained Proxy Names ", Ġexpected . toString ()) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ