/** Ċ * Ċ Ġ* Ġ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 Ġcom . re ale yes . hl spar ser j Ċ Ċ import Ġcom . re ale yes . hl spar ser j . tags . media . Key Ċ import Ġcom . re ale yes . hl spar ser j . tags . media . S CT E 3 5 Ċ import Ġjava . io . InputStream Ċ import Ġjunit . framework . Assert . assertEquals Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠMedia Playlist Test Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmedia Playlist IS : ĠInputStream ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmedia Playlist : ĠMedia Playlist ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmedia Playlist String : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġkey Playlist IS : ĠInputStream ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġkey Playlist : ĠMedia Playlist ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġmedia Playlist IS Ġ= ĠMedia Playlist Test :: class . java Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource AsStream ("/ medi ap lay list . m 3 u 8 ") Ċ // ĠĠĠĠĠĠĠ Ġmedia Playlist String Ġ= ĠMedia Playlist Test :: class . java Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource ("/ medi ap lay list . m 3 u 8 "). read Text () ĊĠĠĠĠĠĠĠ Ġkey Playlist IS Ġ= ĠMedia Playlist Test :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResource AsStream ("/ key playlist . m 3 u 8 ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist Ġ= ĠPlaylist Factory . parse Playlist ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Version . TW EL VE , Ġmedia Playlist IS Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠMedia Playlist ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Playlist Ġ= ĠPlaylist Factory . parse Playlist ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Version . TW EL VE , Ġkey Playlist IS ) Ġas ĠMedia Playlist ? ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . fail () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( media Playlist IS Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist IS !!. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġmedia Playlist () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( media Playlist ?. segments ?. size , Ġ 1 5 ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġsegment UR Is () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠAssert . assertTrue ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. segments ?. get ( 0 )?. uri Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equals (" 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 5 9 live . ts ") Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ ĠAssert . assertTrue ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. segments ?. get ( 1 4 )?. uri Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equals (" 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 7 3 live . ts ") Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġsegment Dur ations () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġdur Ġ= Ġ" 2 . 0 0 2 ". toFloat () Ċ // ĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. segments ?. get ( 0 )?. duration ?. compareTo ( dur )?. to Long (), Ġ 0 L Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. segments ?. get ( 1 4 )?. duration ?. compareTo ( dur )?. to Long (), Ġ 0 L Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġsegment DateTime () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= Ġ 1 2 6 6 5 6 2 4 6 3 0 3 1 L Ċ // ĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. segments ?. get ( 0 )?. p dt , ĠdateTime Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. segments ?. get ( 1 )?. p dt , ĠdateTime Ġ+ Ġ( media Playlist ?. segments ?. get ( 1 )?. duration ?. times ( 1 0 0 0 F )) !!. to Long () Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġtarget Duration () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( media Playlist ?. target Duration ?. duration , Ġ 3 ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġmedia Sequence () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Playlist ?. media Sequence ?. sequence Number , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠ 3 3 8 5 5 9 Ċ // ĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġkey () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey : ĠList < Key ?> ? Ġ= Ġkey Playlist ?. segments ?. get ( 0 )?. keys ĊĠĠĠĠĠĠĠ ĠassertEquals ( key ?. get ( 0 )?. iv , Ġ" 0 xb 0 5 9 2 1 7 aa 2 6 4 9 ce 1 7 0 b 7 3 4 ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( key ?. get ( 0 )?. method , Ġ" AES - 1 2 8 ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( key ?. get ( 0 )?. uri , Ġ" https :// secure . domain . com ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġversion () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( media Playlist !!. getVersion ()?. version , Ġ 4 ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġs cte 3 5 () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġs cte : ĠS CT E 3 5 ? Ġ= Ġmedia Playlist ?. segments ?. get ( 0 )?. s cte 3 5 Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( s cte ?. cue , Ġ"/ D Ag AAAAAAAA AP / w Dw U AA F 0 bf 0 /+ AAAAAAAA AAAA AO Yi 0 Es =") Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġ` to Ġstring `() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġmedia Playlist . toString () Ċ // ĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġshould Ġuse Ġthis , Ġbut ĠI Ġdont Ġhave Ġtime Ġat Ġthis Ġmoment Ġto Ġfix Ġattribute Ġvalues Ġto Ġinclude Ġquotes Ċ //// ĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmedia Playlist String Ċ // ĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ""" # EXT M 3 U Ċ //# EXT - X - VERSION : 4 Ċ //# EXT - X - TARGET DURATION : 3 Ċ //# EXT - X - MEDIA - SEQUENCE : 3 3 8 5 5 9 Ċ //# EXT - X - KEY : METHOD = AES - 1 2 8 , URI = https :// secure . domain . com , IV = 0 xb 0 5 9 2 1 7 aa 2 6 4 9 ce 1 7 0 b 7 3 4 Ċ //# EXT - X - PROGRAM - DATE - TIME : 2 0 1 0 - 0 2 - 1 9 T 1 4 : 5 4 : 2 3 . 0 3 1 + 0 8 : 0 0 Ċ //# EXT - X - C UE - IN : Ċ //# EXT - X - S CT E 3 5 : C UE =/ D Ag AAAAAAAA AP / w Dw U AA F 0 bf 0 /+ AAAAAAAA AAAA AO Yi 0 Es = , ID = 2 3 8 3 5 Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 5 9 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 5 9 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 0 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 0 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 1 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 1 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 2 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 2 live . ts Ċ //# EXT - X - C UE - OUT : 2 0 1 . 4 6 7 Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 3 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 3 live . ts Ċ //# EXT - X - C UE - OUT - CONT : Elapsed Time = 5 . 9 3 9 , Duration = 2 0 1 . 4 6 7 , S CT E 3 5 =/ DA 0 AAAA + âĢ¦ AA g + 2 UB NA A AN vr to Q Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 4 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 4 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 5 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 5 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 6 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 6 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 7 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 7 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 8 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 8 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 6 9 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 6 9 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 7 0 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 7 0 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 7 1 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 7 1 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 7 2 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 7 2 live . ts Ċ //# EXTINF : 2 . 0 0 2 , 3 3 8 5 7 3 Ċ // 2 0 1 4 0 3 1 1 T 1 1 3 8 1 9 - 0 1 - 3 3 8 5 7 3 live . ts Ċ // """ Ċ // ĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġstr ) Ċ // ĠĠĠ Ġ} Ċ //} Ċ