package Ġcom . github . den is id oro . k router Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġcom . github . den is id oro . k router . Schema . Type .* Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Matchers . any Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . Mockito Annotations Ċ import Ġorg . ro bo lectric . Ro bo lectric Gradle TestRunner Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġjava . util .* Ċ Ċ @ Config ( constants Ġ= ĠBuild Config :: class , Ġsdk Ġ= Ġint ArrayOf ( 2 1 )) Ċ @ RunWith ( Ro bo lectric Gradle TestRunner :: class ) Ċ class ĠK router Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġlateinit Ġvar Ġk router : ĠK router ĊĊĠĠĠ Ġval Ġroutes Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute (" user /: id / likes "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute (" users "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute (" user /: id / photo /: pid ")) ĊĊĠĠĠ Ġval Ġroutes 2 Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute (" user /: id / likes ", Ġhash Map Of ( Pair (" id ", ĠSchema ( INT )))), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute (" user /: uid / balance /: money ", Ġhash Map Of ( Pair (" uid ", ĠSchema ( INT )), ĠPair (" money ", ĠSchema ( FLOAT )))), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute (" user /: name / profile ", Ġhash Map Of ( Pair (" name ", ĠSchema ( STRING )))) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Find () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Simple K router () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( routes [ 0 ], Ġk router . find (" user / 3 / likes ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( routes [ 1 ], Ġk router . find (" users ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( routes [ 2 ], Ġk router . find (" user / 5 6 / photo / 4 3 2 ")) ĊĊĠĠĠĠĠĠĠ Ġgiven Advanced K router () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( routes 2 [ 0 ], Ġk router . find (" user / 3 / likes ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Router () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Simple K router () ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" user / 3 / likes " ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġk router . get Router ( url ) !!. intent . getInt Extra (" id ", Ġ 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Simple K router () ĊĊĠĠĠĠĠĠĠ Ġk router . start (" user / 3 / likes ") ĊĠĠĠĠĠĠĠ Ġverify ( context ). startActivity ( any ( Intent :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Matches Schema () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Simple K router () ĊĊĠĠĠĠĠĠĠ Ġroutes [ 0 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 3 / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / a / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 3 abc / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / 3 / like ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroutes [ 1 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" users ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user b ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" users / 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ"/ users ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" users /") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroutes [ 2 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 3 / photo / 4 3 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 3 / photo / abc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / def / photo / abc ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / def / photo / abc / 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" use / 3 / photo / abc / 4 3 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgiven Advanced K router () ĊĊĠĠĠĠĠĠĠ Ġroutes 2 [ 0 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 3 / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 3 / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user /- 3 / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / a / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / 3 abc / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / 3 . 0 / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user /- 3 . 0 / likes ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / 3 / like ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroutes 2 [ 1 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 1 5 6 / balance / 4 2 . 7 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( false , Ġit , Ġ" user / john / balance / 4 2 . 7 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 1 5 6 / balance / 4 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 1 5 6 / balance / 4 2 . 0 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġroutes 2 [ 2 ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / john / profile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 1 5 6 / profile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 4 2 . 7 / profile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Matches ( true , Ġit , Ġ" user / 4 2 . 7 / profile ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Simple K router () Ġ= Ġgiven K router ( routes ) ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Advanced K router () Ġ= Ġgiven K router ( routes 2 ) ĊĊĠĠĠ Ġprivate Ġfun Ġgiven K router ( routes : ĠArray < Route >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Map Ġ= ĠHashMap < Route , ĠClass < out ĠActivity >>() ĊĠĠĠĠĠĠĠ Ġroutes . forEach Ġ{ Ġroute Map . put ( it , ĠActivity :: class . java ) Ġ} ĊĠĠĠĠĠĠĠ Ġk router Ġ= ĠK router ( context , Ġroute Map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Matches ( expected : ĠBoolean , Ġr : ĠRoute , Ġs : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġk router . matches Schema ( s , Ġr )) ĊĠĠĠ Ġ} Ċ } Ċ