/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġandroidx . navigation Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . Mockito . mock Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ @ Small Test Ċ class ĠNav Destination Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Id Res ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINVALID _ ACTION _ ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ@ Id Res ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ ID Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ@ Id Res ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEST INATION _ ID Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Absolute () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" java . lang . String ", ĠAny :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz . name ). isEqualTo ( String :: class . java . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Absolute Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" def initely . not . found ", ĠAny :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Invalid Ġtype Ġshould Ġcause Ġan ĠIllegalArgumentException ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpected ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Absolute WithType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" java . lang . String ", ĠString :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz . name ). isEqualTo ( String :: class . java . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Absolute With Incorrect Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" java . lang . String ", ĠList :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Incorrect Ġtype Ġshould Ġcause Ġan ĠIllegalArgumentException ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpected ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Relative () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( context . packageName ). thenReturn (" java . lang ") ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". String ", ĠAny :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz . name ). isEqualTo ( String :: class . java . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Relative Invalid () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( context . packageName ). thenReturn (" java . lang ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". def initely . not . found ", ĠAny :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Invalid Ġtype Ġshould Ġcause Ġan ĠIllegalArgumentException ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpected ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Relative WithType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( context . packageName ). thenReturn (" java . lang ") ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". String ", ĠString :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( clazz . name ). isEqualTo ( String :: class . java . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparse Class FromName Relative With Incorrect Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġmock ( Context :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( context . packageName ). thenReturn (" java . lang ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Destination . parse Class FromName ( context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". String ", ĠList :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Incorrect Ġtype Ġshould Ġcause Ġan ĠIllegalArgumentException ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExpected ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbuild Deep Link Ids () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġdestination . id Ġ= ĠDEST INATION _ ID ĊĠĠĠĠĠĠĠ Ġval ĠparentId Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġnav Graph Navigator Ġ= ĠNav Graph Navigator ( mock ( Navigator Provider :: class . java )) ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġnav Graph Navigator . create Destination (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠparentId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdestination . parent Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġval Ġdeep Link Ids Ġ= Ġdestination . build Deep Link Ids () ĊĠĠĠĠĠĠĠ ĠassertThat ( deep Link Ids . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( deep Link Ids ). asList (). contains Exactly ( parentId , ĠDEST INATION _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput Action By Destination Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġdestination . put Action ( ACTION _ ID , ĠDEST INATION _ ID ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġdestination . getAction ( ACTION _ ID ) ĊĠĠĠĠĠĠĠ ĠassertThat ( action ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( action ?. destination Id ). isEqualTo ( DEST INATION _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġput Action With Invalid Destination Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġdestination . put Action ( INVALID _ ACTION _ ID , ĠDEST INATION _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġput Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠNav Action ( DEST INATION _ ID ) ĊĠĠĠĠĠĠĠ Ġdestination . put Action ( ACTION _ ID , Ġaction ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( destination . getAction ( ACTION _ ID )). isEqualTo ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠNav Action ( DEST INATION _ ID ) ĊĠĠĠĠĠĠĠ Ġdestination . put Action ( ACTION _ ID , Ġaction ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( destination . getAction ( ACTION _ ID )). isEqualTo ( action ) ĊĊĠĠĠĠĠĠĠ Ġdestination . remove Action ( ACTION _ ID ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( destination . getAction ( ACTION _ ID )). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġval Ġstring Argument Ġ= ĠNav Argument . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ( Nav Type . StringType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġdestination . add Argument (" string Arg ", Ġstring Argument ) ĊĠĠĠĠĠĠĠ ĠassertThat ( destination . arguments . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( destination . arguments . get (" string Arg ")). isEqualTo ( string Argument ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠNo Op Navigator (). create Destination () ĊĠĠĠĠĠĠĠ Ġval Ġstring Argument Ġ= ĠNav Argument . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ( Nav Type . StringType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġdestination . add Argument (" string Arg ", Ġstring Argument ) ĊĠĠĠĠĠĠĠ ĠassertThat ( destination . arguments . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( destination . arguments . get (" string Arg ")). isEqualTo ( string Argument ) ĊĊĠĠĠĠĠĠĠ Ġdestination . remove Argument (" string Arg ") ĊĠĠĠĠĠĠĠ ĠassertThat ( destination . arguments . size ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( destination . arguments . get (" string Arg ")). isNull () ĊĠĠĠ Ġ} Ċ } Ċ