/* Ċ Ġ* Ġ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 ĠLicense , ĠVersion Ġ 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġtech . ant ib y tes . gradle . k mock . util Ċ Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . plugins . Plugin Container Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtech . ant ib y tes . util . test . fixture . kotlin Fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . list Fixture Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠProject Extension Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= Ġkotlin Fixture () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis K mp Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġthe ĠMulti platform Ġplugin Ġit Ġreturns Ġtrue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" org . jetbrains . kotlin . multi platform ") Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is K mp () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis K mp Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġnot Ġthe ĠMulti platform Ġplugin Ġit Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" org . jetbrains . kotlin . multi platform ") Ġ} Ġreturns Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is K mp () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġapply IfNot Exists Ġis Ġcalled Ġwith Ġa ĠPlugins Names Ġit Ġapplies Ġthem Ġif Ġthey Ġhad Ġnot Ġbeen Ġapplied `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplugin Names : ĠSet < String > Ġ= Ġfixture . list Fixture < String >(). toSet () ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġplugins : ĠPlugin Container Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins Ġ} Ġreturns Ġplugins ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplugins . has Plugin ( any < String >()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplugins . apply ( any ()) Ġ} Ġreturns Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġproject . apply IfNot Exists (* plugin Names . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġplugin Names . forEach Ġ{ Ġplugin Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġplugins . has Plugin ( plugin Name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġplugins . apply ( plugin Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġapply IfNot Exists Ġis Ġcalled Ġwith Ġa ĠPlugins Names Ġit Ġwill Ġnot Ġapply Ġthem Ġif Ġthey Ġhad Ġbeen Ġalready Ġapplied `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplugin Names : ĠSet < String > Ġ= Ġfixture . list Fixture < String >(). toSet () ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġplugins : ĠPlugin Container Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins Ġ} Ġreturns Ġplugins ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplugins . has Plugin ( any < String >()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplugins . apply ( any ()) Ġ} Ġreturns Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġproject . apply IfNot Exists (* plugin Names . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġplugin Names . forEach Ġ{ Ġplugin Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġplugins . has Plugin ( plugin Name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġplugins . apply ( plugin Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Android Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġneither Ġa ĠAndroid Library Ġnor ĠAndroid Application Ġplugin Ġapplied Ġit Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . application ") Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . library ") Ġ} Ġreturns Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is Android () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Android Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġa ĠAndroid Library Ġplugin Ġapplied Ġit Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . application ") Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . library ") Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is Android () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Android Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġa ĠAndroid Application Ġplugin Ġapplied Ġit Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . application ") Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . library ") Ġ} Ġreturns Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is Android () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Android Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġa ĠAndroid Library Ġand ĠAndroid Application Ġplugin Ġapplied Ġit Ġreturns Ġtrue `() Ġ{ Ġ// ĠThis Ġshould Ġnever Ġbe Ġthe Ġcase ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . application ") Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" com . android . library ") Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is Android () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Js Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġno ĠKotlin ĠJs ĠPlugin Ġapplied Ġit Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" org . jetbrains . kotlin . js ") Ġ} Ġreturns Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is Js () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Js Ġis Ġcalled Ġon Ġa ĠProject Ġwhich Ġhas Ġa ĠKotlin ĠJs ĠPlugin Ġapplied Ġit Ġreturns Ġfalse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġproject . plugins . has Plugin (" org . jetbrains . kotlin . js ") Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġproject . is Js () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠ Ġ} Ċ } Ċ