package Ġorg . read ium . r 2 . streamer . parser Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . read ium . r 2 . shared . fetcher . Failure Resource Ċ import Ġorg . read ium . r 2 . shared . fetcher . Fetcher Ċ import Ġorg . read ium . r 2 . shared . fetcher . Resource Ċ import Ġorg . read ium . r 2 . shared . fetcher . String Resource Ċ import Ġorg . read ium . r 2 . shared . publication . Content Protection . Scheme Ċ import Ġorg . read ium . r 2 . shared . publication . Link Ċ import Ġorg . read ium . r 2 . shared . util . medi atype . MediaType Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ class ĠF allback Content Protection Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff Ġno Ġcontent Ġprotection `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertNull ( sn iff ( media Type Ġ= ĠMediaType . EP UB , Ġresources Ġ= Ġempty Map ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff ĠE PUB Ġwith Ġempty Ġencryption Ġxml `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertNull ( sn iff ( media Type Ġ= ĠMediaType . EP UB , Ġresources Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ META - INF / encryption . xml " Ġto Ġ""" <? xml Ġversion =' 1 . 0 ' Ġencoding =' utf - 8 ' ? >< encryption Ġxmlns =" urn : oasis : names : tc : opend ocument : xmlns : container " Ġxmlns : enc =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "></ encryption > """ ĊĠĠĠĠĠĠĠ Ġ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff ĠL CP Ġprotected Ġpackage `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Scheme . L cp , Ġsn iff ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . ZIP , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ license . lc pl " Ġto Ġ"{} " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff ĠL CP Ġprotected ĠE PUB `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Scheme . L cp , Ġsn iff ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . EP UB , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ META - INF / license . lc pl " Ġto Ġ"{} " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff ĠL CP Ġprotected ĠE PUB Ġmissing Ġthe Ġlicense `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Scheme . L cp , Ġsn iff ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . EP UB , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ META - INF / encryption . xml " Ġto Ġ""" <? xml Ġversion =" 1 . 0 " Ġencoding =" UTF - 8 "?> Ċ < encryption Ġxmlns =" urn : oasis : names : tc : opend ocument : xmlns : container "> ĊĠ Ġ< Encrypted Data Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "> ĊĠĠĠ Ġ< Encryption Method Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc #" ĠAlgorithm =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # aes 2 5 6 - cbc "></ Encryption Method > ĊĠĠĠ Ġ< Key Info Ġxmlns =" http :// www . w 3 . org / 2 0 0 0 / 0 9 / xml ds ig # "> ĊĠĠĠĠĠ Ġ< Retrie val Method Ġxmlns =" http :// www . w 3 . org / 2 0 0 0 / 0 9 / xml ds ig #" ĠURI =" license . lc pl #/ encryption / content _ key " ĠType =" http :// read ium . org / 2 0 1 4 / 0 1 / l cp # Encrypted Content Key "></ Retrie val Method > ĊĠĠĠ Ġ</ Key Info > ĊĠĠĠ Ġ< Cipher Data Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "> ĊĠĠĠĠĠ Ġ< Cipher Reference Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc #" ĠURI =" OPS / chapter _ 0 0 1 . xhtml "></ Cipher Reference > ĊĠĠĠ Ġ</ Cipher Data > ĊĠĠĠ Ġ< Encryption Properties Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "> ĊĠĠĠĠĠ Ġ< Encryption Property Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "> ĊĠĠĠĠĠĠĠ Ġ< Compression Ġxmlns =" http :// www . id pf . org / 2 0 1 6 / encryption # compression " ĠMethod =" 8 " ĠOriginal Length =" 1 3 8 7 7 "></ Compression > ĊĠĠĠĠĠ Ġ</ Encryption Property > ĊĠĠĠ Ġ</ Encryption Properties > ĊĠ Ġ</ Encrypted Data > Ċ </ encryption > """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff ĠAdobe ĠA DE PT `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Scheme . A dept , Ġsn iff ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . EP UB , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ META - INF / encryption . xml " Ġto Ġ""" <? xml Ġversion =" 1 . 0 "? >< encryption Ġxmlns =" urn : oasis : names : tc : opend ocument : xmlns : container "> ĊĠ Ġ< Encrypted Data Ġxmlns =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "> ĊĠĠĠ Ġ< Encryption Method ĠAlgorithm =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # aes 1 2 8 - cbc "></ Encryption Method > ĊĠĠĠ Ġ< Key Info Ġxmlns =" http :// www . w 3 . org / 2 0 0 0 / 0 9 / xml ds ig # "> ĊĠĠĠĠĠ Ġ< resource Ġxmlns =" http :// ns . adobe . com / ade pt "> urn : uuid : 2 c 4 3 7 2 9 c - b 9 8 5 - 4 5 3 1 - 8 e 8 6 - ae 7 5 ce 5 e 5 da 9 </ resource > ĊĠĠĠ Ġ</ Key Info > ĊĠĠĠ Ġ< Cipher Data > ĊĠĠĠĠĠ Ġ< Cipher Reference ĠURI =" O EB PS / stylesheet . css "></ Cipher Reference > ĊĠĠĠ Ġ</ Cipher Data > ĊĠ Ġ</ Encrypted Data > ĊĠ Ġ</ encryption > """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sn iff ĠAdobe ĠA DE PT Ġfrom Ġrights Ġxml `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Scheme . A dept , Ġsn iff ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= ĠMediaType . EP UB , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ META - INF / encryption . xml " Ġto Ġ""" <? xml Ġversion =' 1 . 0 ' Ġencoding =' utf - 8 ' ? >< encryption Ġxmlns =" urn : oasis : names : tc : opend ocument : xmlns : container " Ġxmlns : enc =" http :// www . w 3 . org / 2 0 0 1 / 0 4 / xml enc # "></ encryption > """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ META - INF / rights . xml " Ġto Ġ""" <? xml Ġversion =" 1 . 0 "? >< ade pt : rights Ġxmlns : ade pt =" http :// ns . adobe . com / ade pt "></ ade pt : rights > """ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsn iff ( media Type : ĠMediaType , Ġresources : ĠMap < String , ĠString >): ĠScheme ? Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ ĠF allback Content Protection (). sn iff Scheme ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠTest Fetcher ( resources ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Type Ġ= Ġmedia Type ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTest Fetcher ( private Ġval Ġresources : ĠMap < String , ĠString > Ġ= Ġempty Map ()) Ġ: ĠFetch er Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġlinks (): ĠList < Link > Ġ= Ġresources . map Ġ{ ĠLink ( href Ġ= Ġit . key ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( link : ĠLink ): ĠResource Ġ= ĊĠĠĠĠĠĠĠ Ġresources [ link . href ]?. let Ġ{ ĠString Resource ( link , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠFailure Resource ( link , ĠResource . Exception . NotFound ()) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġclose () Ġ{} Ċ } Ċ