/* Ċ Ġ* ĠModule : Ġr 2 - shared - kotlin Ċ Ġ* ĠDevelopers : ĠQu ent in ĠG li os ca Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠRead ium ĠFoundation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġa ĠBSD - style Ġlicense Ġwhich Ġis Ġdetailed Ġin Ġthe Ċ Ġ* ĠLICENSE Ġfile Ġpresent Ġin Ġthe Ġproject Ġrepository Ġwhere Ġthis Ġsource Ġcode Ġis Ġmaintained . Ċ Ġ*/ Ċ Ċ package Ġorg . read ium . r 2 . shared . util . archive Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull ĊĊ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠArchive Test ( val Ġarchive : ĠArchive ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġarch ives (): ĠList < Archive > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe pub Zip Ġ= ĠArchive Test :: class . java . getResource (" ep ub . ep ub ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( ep ub Zip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip Archive Ġ= Ġrun Blocking Ġ{ ĠDefault Archive Factory (). open ( File ( ep ub Zip . path ), Ġpassword Ġ= Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( zip Archive ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe pub Explo ded Ġ= ĠArchive Test :: class . java . getResource (" ep ub ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( ep ub Explo ded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexplo ded Archive Ġ= Ġrun Blocking Ġ{ ĠDefault Archive Factory (). open ( File ( ep ub Explo ded . path ), Ġpassword Ġ= Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( explo ded Archive ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( zip Archive , Ġexplo ded Archive ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Entry Ġlist Ġis Ġcorrect `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( run Blocking Ġ{ Ġarchive . entries (). map Ġ{ Ġit . path Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mime type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / cover . xhtml ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / css / ep ub . css ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / css / nav . css ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / images / cover . png ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / nav . xhtml ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / package . op f ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / s 0 4 . xhtml ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" EP UB / toc . nc x ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" META - INF / container . xml " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` At tempting Ġto Ġget Ġa Ġmissing Ġentry Ġthrows `() Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ Ġrun Blocking Ġ{ Ġarchive . entry (" unknown ") Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Fully Ġreading Ġan Ġentry Ġworks Ġwell `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġrun Blocking Ġ{ Ġarchive . entry (" mime type "). read () Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" application / ep ub + zip ", Ġbytes . toString ( StandardCharsets . UTF _ 8 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Reading Ġa Ġrange Ġof Ġan Ġentry Ġworks Ġwell `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġrun Blocking Ġ{ Ġarchive . entry (" mime type "). read ( 0 .. 1 0 L ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" application ", Ġbytes . toString ( StandardCharsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 1 , Ġbytes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Out Ġof Ġrange Ġindexes Ġare Ġclamp ed Ġto Ġthe Ġavailable Ġlength `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġrun Blocking Ġ{ Ġarchive . entry (" mime type "). read (- 5 .. 6 0 L ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" application / ep ub + zip ", Ġbytes . toString ( StandardCharsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġbytes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` De creasing Ġranges Ġare Ġunderstood Ġas Ġempty Ġones `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġrun Blocking Ġ{ Ġarchive . entry (" mime type "). read ( 6 0 .. 2 0 L ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġbytes . toString ( StandardCharsets . UTF _ 8 )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbytes . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Comp uting Ġsize Ġworks Ġwell `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġrun Blocking Ġ{ Ġarchive . entry (" mime type "). length Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 L , Ġsize ) ĊĠĠĠ Ġ} Ċ }