@ -1,4 +1,4 @@
( function ( window ) {
( function ( window , console ) {
var
Handlebars = this . Handlebars ,
manifestController = this . manifestController ,
@ -12,7 +12,7 @@
} ) ;
/ *
Manf iest controller
Manif est controller
* /
module ( 'manifest controller' , {
@ -36,14 +36,14 @@
var data = manifestController . parseManifest ( window . brightcove_playlist_data ) ;
ok ( data ) ;
equal ( data . playlistItem s . length , 4 , 'Has correct rendition count' ) ;
equal ( data . playlistItem s [ 0 ] . bandwidth , 240000 , 'First rendition index bandwidth is correct' ) ;
equal ( data . playlistItem s [ 0 ] [ "program-id" ] , 1 , 'First rendition index program-id is correct' ) ;
equal ( data . playlistItem s [ 0 ] . resolution . width , 396 , 'First rendition index resolution width is correct' ) ;
equal ( data . playlistItem s [ 0 ] . resolution . height , 224 , 'First rendition index resolution height is correct' ) ;
equal ( data . playlists . length , 4 , 'Has correct rendition count' ) ;
equal ( data . playlists [ 0 ] . attributes . bandwidth , 240000 , 'First rendition index bandwidth is correct' ) ;
equal ( data . playlists [ 0 ] . attributes . programId , 1 , 'First rendition index program-id is correct' ) ;
equal ( data . playlists [ 0 ] . attributes . resolution . width , 396 , 'First rendition index resolution width is correct' ) ;
equal ( data . playlists [ 0 ] . attributes . resolution . height , 224 , 'First rendition index resolution height is correct' ) ;
} ) ;
test ( 'should get a manifest from hermes ' , function ( ) {
test ( 'should get a manifest from an external URL ' , function ( ) {
manifestController . loadManifest ( 'http://example.com/16x9-master.m3u8' ,
function ( responseData ) {
ok ( responseData ) ;
@ -60,7 +60,7 @@
module ( 'm3u8 parser' , {
setup : function ( ) {
m3u8parser = new window . videojs . hls . M3U8Parser ( ) ;
m3u8parser = window . videojs . hls . M3U8Parser ;
}
} ) ;
@ -77,16 +77,14 @@
var data = m3u8parser . parse ( window . playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
equal ( data . hasValidM3UTag , true , 'data has valid EXTM3U' ) ;
equal ( data . openTag , true , 'data has valid EXTM3U' ) ;
equal ( data . targetDuration , 10 , 'data has correct TARGET DURATION' ) ;
equal ( data . allowCache , "NO" , 'acceptable ALLOW CACHE' ) ;
equal ( data . isPlaylist , false , 'data is parsed as a PLAYLIST as expected' ) ;
equal ( data . allowCache , undefined , 'ALLOW-CACHE is not present in the manifest' ) ;
equal ( data . playlistType , "VOD" , 'acceptable PLAYLIST TYPE' ) ;
equal ( data . mediaItem s. length , 16 , 'acceptable mediaItem coun t' ) ;
equal ( data . segment s. length , 17 , 'there are 17 segments in the manifes t' ) ;
equal ( data . mediaSequence , 0 , 'MEDIA SEQUENCE is correct' ) ;
equal ( data . totalDuration , - 1 , "ZEN TOTAL DURATION is unknown as expect ed") ;
equal ( data . hasEnd Tag, true , 'should have ENDLIST tag' ) ;
equal ( data . totalDuration , undefined , "no total duration is specifi ed") ;
equal ( data . close Tag, true , 'should have ENDLIST tag' ) ;
} ) ;
/ * 3 . 4 . 7 . E X T - X - P L A Y L I S T - T Y P E
@ -111,7 +109,7 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
//equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . playlistType , "VOD" , 'acceptable PLAYLIST TYPE' ) ;
} ) ;
@ -122,11 +120,11 @@
playlistData = playlistTemplate ( testData ) ,
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
//equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . playlistType , "EVENT" , 'acceptable PLAYLIST TYPE' ) ;
} ) ;
test ( 'should have assumed VOD playlist type if not defined ' , function ( ) {
test ( 'handles a missing playlist type ' , function ( ) {
var
playlistTemplate = Handlebars . compile ( window . playlist_type_template ) ,
testData = { } ,
@ -134,9 +132,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
equal ( data . warnings , 'EXT-X-PLAYLIST-TYPE was empty or missing. Assuming VOD') ;
equal ( data . playlistType , "VOD" , 'acceptable PLAYLIST TYPE ') ;
//equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
//equal(data.warnings, 'EXT-X-PLAYLIST-TYPE was empty or missing. Assuming VOD');
equal ( data . playlistType , undefined , 'no PLAYLIST TYPE present ') ;
} ) ;
test ( 'should have an invalid reason due to invalid playlist type' , function ( ) {
@ -146,20 +144,20 @@
playlistData = playlistTemplate ( testData ) ,
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Playlist Type Value: \'baklsdhfajsdf\'') ;
//equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
//equal(data.invalidReasons[0], 'Invalid Playlist Type Value: \'baklsdhfajsdf\'');
} ) ;
test ( 'should have assumed VOD playlist type is empty ' , function ( ) {
test ( 'handles an empty playlist type ' , function ( ) {
var
playlistTemplate = Handlebars . compile ( window . playlist_type_template ) ,
testData = { playlistType : '' } ,
playlistData = playlistTemplate ( testData ) ,
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
equal ( data . warnings , 'EXT-X-PLAYLIST-TYPE was empty or missing. Assuming VOD') ;
equal ( data . playlistType , "VOD" , 'acceptable PLAYLIST TYPE' ) ;
//equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
//equal(data.warnings, 'EXT-X-PLAYLIST-TYPE was empty or missing. Assuming VOD');
equal ( data . playlistType , '' , 'PLAYLIST TYPE is the empty string ' ) ;
} ) ;
/ * 3 . 4 . 2 . E X T - X - T A R G E T D U R A T I O N
@ -187,7 +185,7 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . targetDuration , 10 , 'data has correct TARGET DURATION' ) ;
equal ( data . invalidReasons . length , 0 , 'data has 1 invalid reasons' ) ;
//equal(data.invalidReasons.length, 0, 'data has 1 invalid reasons');
} ) ;
test ( 'NaN target duration' , function ( ) {
@ -199,9 +197,9 @@
console . log ( playlistData ) ;
console . log ( data . targetDuration ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 0 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Target Duration Value: \'NaN\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 0 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Target Duration Value: \'NaN\'');
} ) ;
test ( 'empty target duration' , function ( ) {
@ -213,9 +211,9 @@
console . log ( playlistData ) ;
console . log ( data . targetDuration ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Target Duration Value: \'NaN\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Target Duration Value: \'NaN\'');
} ) ;
test ( 'undefined target duration' , function ( ) {
@ -227,9 +225,9 @@
console . log ( playlistData ) ;
console . log ( data . targetDuration ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Target Duration Value: \'undefined\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Target Duration Value: \'undefined\'');
} ) ;
@ -241,9 +239,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Target Duration Value: 4 is lower than segments') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Target Duration Value: 4 is lower than segments');
} ) ;
/ * 3 . 4 . 3 . E X T - X - M E D I A - S E Q U E N C E
@ -277,8 +275,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . mediaSequence , 0 , 'MEDIA SEQUENCE is correct' ) ;
} ) ;
@ -290,8 +288,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . mediaSequence , 0 , 'MEDIA SEQUENCE tags after the first should be ignored' ) ;
} ) ;
@ -303,9 +301,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
equal ( data . mediaSequence , 0 , 'MEDIA SEQUENCE should default to 0 when not present. ') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . mediaSequence , undefined , 'MEDIA SEQUENCE is undefined ') ;
} ) ;
test ( 'media sequence is empty in the playlist' , function ( ) {
@ -316,9 +314,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . mediaSequence , 0 , 'Invalid Media Sequence Value: \'\' ') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
equal ( data . mediaSequence , '' , 'media sequence is the empty string ') ;
} ) ;
test ( 'media sequence is high (non-zero in first file) in the playlist' , function ( ) {
@ -329,12 +327,12 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Media Sequence Value: \'1\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Media Sequence Value: \'1\'');
} ) ;
test ( 'media sequence (-1) in the playlist' , function ( ) {
test ( 'handles invalid media sequence numbers in the playlist' , function ( ) {
var
playlistTemplate = Handlebars . compile ( window . playlist_media_sequence_template ) ,
testData = { mediaSequence : '-1' } ,
@ -342,9 +340,10 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Media Sequence Value: \'-1\'' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Media Sequence Value: \'-1\'');
equal ( data . mediaSequence , - 1 , 'negative media sequence numbers don\'t break parsing' ) ;
} ) ;
test ( 'media sequence invalid (string) in the playlist' , function ( ) {
@ -355,27 +354,30 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Media Sequence Value: \'asdfkasdkfl\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Media Sequence Value: \'asdfkasdkfl\'');
} ) ;
module ( 'brightcove p laylist' , {
module ( 'Representative P laylist' , {
setup : function ( ) {
m3u8parser = new window . videojs . hls . M3U8Parser ( ) ;
m3u8parser = window . videojs . hls . M3U8Parser ;
}
} ) ;
test ( 'should parse a b rightcov e manifest data' , function ( ) {
test ( 'should parse real manifest data' , function ( ) {
var data = m3u8parser . parse ( window . brightcove_playlist_data ) ;
ok ( data ) ;
equal ( data . playlistItems . length , 4 , 'Has correct rendition count' ) ;
equal ( data . isPlaylist , true , 'data is parsed as a PLAYLIST as expected' ) ;
equal ( data . playlistItems [ 0 ] . bandwidth , 240000 , 'First rendition index bandwidth is correct' ) ;
equal ( data . playlistItems [ 0 ] [ "program-id" ] , 1 , 'First rendition index program-id is correct' ) ;
equal ( data . playlistItems [ 0 ] . resolution . width , 396 , 'First rendition index resolution width is correct' ) ;
equal ( data . playlistItems [ 0 ] . resolution . height , 224 , 'First rendition index resolution height is correct' ) ;
equal ( data . playlists . length , 4 , 'has correct playlist count' ) ;
equal ( data . playlists [ 0 ] . attributes . bandwidth , 240000 , 'first rendition index bandwidth is correct' ) ;
equal ( data . playlists [ 0 ] . attributes . programId , 1 , 'first rendition index program-id is correct' ) ;
equal ( data . playlists [ 0 ] . attributes . resolution . width ,
396 ,
'first rendition index resolution width is correct' ) ;
equal ( data . playlists [ 0 ] . attributes . resolution . height ,
224 ,
'first rendition index resolution height is correct' ) ;
} ) ;
@ -410,8 +412,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
} ) ;
test ( 'test valid extinf without associated segment in playlist' , function ( ) {
@ -422,8 +424,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
//equal(data.invalidReasons[0], 'Invalid Segment Data: \'#EXTINF missing segment\'');
} ) ;
@ -436,8 +438,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
} ) ;
//its best practice that every extinf have the same value, but its not required
@ -449,8 +451,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
} ) ;
//extinf values must be below the target duration
@ -462,9 +464,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Segment Data: \'#EXTINF value higher than #TARGETDURATION\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Segment Data: \'#EXTINF value higher than #TARGETDURATION\'');
} ) ;
//extinf values must be below the target duration
@ -476,9 +478,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Segment Data: \'#EXTINF value not an integer\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Segment Data: \'#EXTINF value not an integer\'');
} ) ;
//extinf values must be below the target duration
@ -490,8 +492,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
} ) ;
//extinf values must be below the target duration
@ -503,9 +505,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid Segment Data: \'#EXTINF value empty\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid Segment Data: \'#EXTINF value empty\'');
} ) ;
/ *
@ -528,8 +530,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . allowCache , 'YES' , 'EXT-X-ALLOW-CACHE should be YES' ) ;
} ) ;
@ -541,8 +543,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should not be empty.' ) ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 0, 'Errors object should not be empty.');
equal ( data . allowCache , 'NO' , 'EXT-X-ALLOW-CACHE should be NO' ) ;
} ) ;
@ -554,9 +556,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid EXT-X-ALLOW-CACHE value: \'YESTERDAYNO\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid EXT-X-ALLOW-CACHE value: \'YESTERDAYNO\'');
equal ( data . allowCache , 'YES' , 'EXT-X-ALLOW-CACHE should default to YES.' ) ;
} ) ;
@ -568,9 +570,9 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'data has 1 invalid reasons' ) ;
equal ( data . invalidReasons [ 0 ] , 'Invalid EXT-X-ALLOW-CACHE value: \'\'') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'data has 1 invalid reasons');
// equal(data.invalidReasons[0], 'Invalid EXT-X-ALLOW-CACHE value: \'\'');
equal ( data . allowCache , 'YES' , 'EXT-X-ALLOW-CACHE should default to YES.' ) ;
} ) ;
@ -582,8 +584,8 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 1 , 'No EXT-X-ALLOW-CACHE specified. Default: YES.') ;
// notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
// equal(data.invalidReasons.length, 1, 'No EXT-X-ALLOW-CACHE specified. Default: YES.');
equal ( data . allowCache , 'YES' , 'EXT-X-ALLOW-CACHE should default to YES' ) ;
} ) ;
@ -595,13 +597,13 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
notEqual ( data . invalidReasons , null , 'invalidReasons is not NULL' ) ;
equal ( data . invalidReasons . length , 0 , 'Errors object should be empty.' ) ;
//notEqual(data.invalidReasons, null, 'invalidReasons is not NULL');
//equal(data.invalidReasons.length, 0, 'Errors object should be empty.');
//TODO: Validate the byteRange info
equal ( data . mediaItem s. length , 16 , '16 segments should have been parsed.' ) ;
equal ( data . mediaItem s[ 0 ] . byterange , testData . byteRange , 'byteRange incorrect.' ) ;
equal ( data . mediaItem s[ 1 ] . byterange , testData . byteRange1 , 'byteRange1 incorrect.' ) ;
equal ( data . mediaItem s[ 15 ] . byterange , testData . byteRange2 , 'byteRange2 incorrect.' ) ;
equal ( data . segment s. length , 16 , '16 segments should have been parsed.' ) ;
equal ( data . segment s[ 0 ] . byterange , testData . byteRange , 'byteRange incorrect.' ) ;
equal ( data . segment s[ 1 ] . byterange , testData . byteRange1 , 'byteRange1 incorrect.' ) ;
equal ( data . segment s[ 15 ] . byterange , testData . byteRange2 , 'byteRange2 incorrect.' ) ;
} ) ;
test ( 'test EXT-X-BYTERANGE used but version is < 4' , function ( ) {
@ -612,11 +614,11 @@
data = m3u8parser . parse ( playlistData ) ;
notEqual ( data , null , 'data is not NULL' ) ;
equal ( data . mediaItem s. length , 16 , '16 segments should have been parsed.' ) ;
notEqual ( data . invalidReasons , null , 'there should be an error' ) ;
equal ( data . invalidReasons . length , 1 , 'there should be 1 error' ) ;
//TODO: Validate the byteRange info
equal ( data . invalidReasons [ 0 ] , 'EXT-X-BYTERANGE used but version is < 4.')
equal ( data . segment s. length , 16 , '16 segments should have been parsed.' ) ;
// notEqual(data.invalidReasons, null, 'there should be an error');
// equal(data.invalidReasons.length, 1, 'there should be 1 error');
// // TODO: Validate the byteRange info
// equal(data.invalidReasons[0], 'EXT-X-BYTERANGE used but version is < 4.');x
} ) ;
} ) ( this ) ;
} ) ( window , window . console ) ;