/* Ċ Ġ* Ġ- \- \- Ċ Ġ* ĠMob ius Ċ Ġ* Ġ-- Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - 2 0 2 0 ĠSpotify ĠAB Ċ Ġ* Ġ-- Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ- /- /- Ċ Ġ*/ Ċ package Ġkt . mob ius . test Ċ Ċ import Ġkt . mob ius . First Ċ Ċ // import Ġcom . spotify . mob ius . First Ċ // import Ġorg . hamcrest . Description Ċ // import Ġorg . hamcrest . Matcher Ċ // import Ġorg . hamcrest . Matchers . equalTo Ċ // import Ġorg . hamcrest . Matchers . has Items Ċ // import Ġorg . hamcrest . Type Safe Di agn osing Matcher Ċ Ċ import Ġcom . nat pr y ce . ham k rest .* Ċ Ċ /** ĠProvides Ġutility Ġfunctions Ġfor Ġmatching Ġagainst Ġ[ First ] Ġinstances . Ġ Ġ*/ Ċ object ĠFirst Matchers Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmatcher Ġthat Ġmatches Ġ[ First ] Ġinstances Ġwith Ġa Ġmodel Ġthat Ġis Ġequal Ġto Ġthe ĊĠĠĠĠ Ġ* Ġsupplied Ġone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexpected Ġthe Ġexpected Ġmodel ĊĠĠĠĠ Ġ* Ġ@ param Ġ< M > Ġthe Ġmodel Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ< F > Ġthe Ġeffect Ġtype ĊĠĠĠ Ġ</ F ></ M > Ġ*/ ĊĠĠĠ Ġfun Ġ< M , ĠF > Ġhas Model ( expected : ĠM ): ĠMatcher < First < M , ĠF >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhas Model ( equalTo ( expected )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmatcher Ġthat Ġmatches Ġ[ First ] Ġinstances Ġwith Ġa Ġmodel Ġthat Ġmatches Ġthe Ġsupplied ĊĠĠĠĠ Ġ* Ġmodel Ġmatcher . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmatcher Ġthe Ġmatcher Ġto Ġapply Ġto Ġthe Ġmodel ĊĠĠĠĠ Ġ* Ġ@ param Ġ< M > Ġthe Ġmodel Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ< F > Ġthe Ġeffect Ġtype ĊĠĠĠ Ġ</ F ></ M > Ġ*/ ĊĠĠĠ Ġfun Ġ< M , ĠF > Ġhas Model ( matcher : ĠMatcher < M >): ĠMatcher < First < M , ĠF >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Di agn osing Matcher < First < M , ĠF > ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmatches S af ely ( item : ĠFirst < M , ĠF >, Ġmismatch Description : ĠDescription ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! matcher . matches ( item . model ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" bad Ġmodel : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher . describe Mismatch ( item . model (), Ġmismatch Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" has Ġmodel : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher . describe Mismatch ( item . model (), Ġmismatch Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" has Ġa Ġmodel : Ġ"). append Description Of ( matcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmatcher Ġthat Ġmatches Ġ[ First ] Ġinstances Ġwith Ġno Ġeffects . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ< M > Ġthe Ġmodel Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ< F > Ġthe Ġeffect Ġtype ĊĠĠĠ Ġ</ F ></ M > Ġ*/ ĊĠĠĠ Ġfun Ġ< M , ĠF > Ġhas No Effects (): ĠMatcher < First < M , ĠF >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Di agn osing Matcher < First < M , ĠF > ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmatches S af ely ( item : ĠFirst < M , ĠF >, Ġmismatch Description : ĠDescription ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( item . has Effects ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" has Ġeffects ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" no Ġeffects ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" should Ġhave Ġno Ġeffects ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmatcher Ġthat Ġmatches Ġ[ First ] Ġinstances Ġwhose Ġeffects Ġmatch Ġthe Ġsupplied Ġeffect ĊĠĠĠĠ Ġ* Ġmatcher . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmatcher Ġthe Ġmatcher Ġto Ġapply Ġto Ġthe Ġeffects ĊĠĠĠĠ Ġ* Ġ@ param Ġ< M > Ġthe Ġmodel Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ< F > Ġthe Ġeffect Ġtype ĊĠĠĠ Ġ</ F ></ M > Ġ*/ ĊĠĠĠ Ġfun Ġ< M , ĠF > Ġhas Effects ( matcher : ĠMatcher < Iterable < F > ?> ): ĠMatcher < First < M , ĠF >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠType Safe Di agn osing Matcher < First < M , ĠF > ?> () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmatches S af ely ( item : ĠFirst < M , ĠF >, Ġmismatch Description : ĠDescription ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! item . has Effects ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" no Ġeffects ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! matcher . matches ( item . effects ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" bad Ġeffects : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher . describe Mismatch ( item . effects (), Ġmismatch Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmismatch Description . append Text (" has Ġeffects : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher . describe Mismatch ( item . effects (), Ġmismatch Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdescribe To ( description : ĠDescription ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . append Text (" has Ġeffects : Ġ"). append Description Of ( matcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġmatcher Ġthat Ġmatches Ġif Ġall Ġthe Ġsupplied Ġeffects Ġare Ġpresent Ġin Ġthe Ġsupplied Ġ[ Ġ], Ġin Ġany Ġorder . ĠThe Ġ[ First ] Ġmay Ġhave Ġmore Ġeffects Ġthan Ġthe Ġones Ġincluded . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġeffects Ġthe Ġeffects Ġto Ġmatch Ġ( possibly Ġempty ) ĊĠĠĠĠ Ġ* Ġ@ param Ġ< M > Ġthe Ġmodel Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġ< F > Ġthe Ġeffect Ġtype ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġmatcher Ġthat Ġmatches Ġ[ First ] Ġinstances Ġthat Ġinclude Ġall Ġthe Ġsupplied Ġeffects ĊĠĠĠ Ġ</ F ></ M > Ġ*/ ĊĠĠĠ Ġ@ java . lang . Safe Var args ĊĠĠĠ Ġfun Ġ< M , ĠF > Ġhas Effects ( var arg Ġeffects : ĠF ): ĠMatcher < First < M , ĠF >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhas Effects ( has Items ( effects )) ĊĠĠĠ Ġ} Ċ }