Browse Source
Standardize plugin naming and re-organize some tests
Standardize plugin naming and re-organize some tests
Move segment parsing tests into their own file and top-level plugin tests intovideojs-hls_test.js. Use 'videojs' instead of 'video-js'.pull/80/head

7 changed files with 123 additions and 107 deletions
-
2example.html
-
2src/videojs-hls.js
-
7test/m3u8_test.js
-
67test/manifest-loader_test.js
-
30test/segment-parser.js
-
12test/videojs-hls.html
-
110test/videojs-hls_test.js
@ -1,67 +0,0 @@ |
|||
(function(window, videojs, undefined) { |
|||
var player, oldXhr, oldSourceBuffer; |
|||
|
|||
module('HLS', { |
|||
setup: function() { |
|||
var video = document.createElement('video'); |
|||
document.querySelector('#qunit-fixture').appendChild(video); |
|||
player = videojs(video); |
|||
|
|||
oldXhr = window.XMLHttpRequest; |
|||
oldSourceBuffer = window.videojs.SourceBuffer; |
|||
|
|||
// mock out SourceBuffer since it won't be available in phantomjs
|
|||
window.videojs.SourceBuffer = function() { |
|||
this.appendBuffer = function() {}; |
|||
}; |
|||
}, |
|||
teardown: function() { |
|||
window.XMLHttpRequest = oldXhr; |
|||
window.videojs.SourceBuffer = oldSourceBuffer; |
|||
} |
|||
}); |
|||
|
|||
asyncTest('loads the specified manifest URL on init', function() { |
|||
var loadedmanifest = false; |
|||
player.on('loadedmanifest', function() { |
|||
loadedmanifest = true; |
|||
}); |
|||
player.on('loadedmetadata', function() { |
|||
ok(loadedmanifest, 'loadedmanifest fires'); |
|||
ok(player.hls.manifest, 'the manifest is available'); |
|||
ok(player.hls.manifest.segments, 'the segments are parsed'); |
|||
strictEqual(player.hls.manifest, |
|||
player.hls.currentPlaylist, |
|||
'a playlist is selected'); |
|||
strictEqual(player.hls.readyState(), 1, 'the readyState is HAVE_METADATA'); |
|||
start(); |
|||
}); |
|||
|
|||
player.hls('manifest/playlist.m3u8'); |
|||
strictEqual(player.hls.readyState(), 0, 'the readyState is HAVE_NOTHING'); |
|||
videojs.mediaSources[player.currentSrc()].trigger({ |
|||
type: 'sourceopen' |
|||
}); |
|||
}); |
|||
|
|||
test('starts downloading a segment on loadedmetadata', function() { |
|||
var url; |
|||
window.XMLHttpRequest = function() { |
|||
this.open = function() { |
|||
url = arguments[1]; |
|||
}; |
|||
this.send = function() { |
|||
this.readyState = 4; |
|||
this.responseText = window.manifests['media']; |
|||
this.onreadystatechange(); |
|||
}; |
|||
}; |
|||
player.hls('manifest/media.m3u8'); |
|||
videojs.mediaSources[player.currentSrc()].trigger({ |
|||
type: 'sourceopen' |
|||
}); |
|||
|
|||
strictEqual(url, '00001.ts', 'the first segment is requested'); |
|||
}); |
|||
|
|||
})(window, window.videojs); |
@ -0,0 +1,110 @@ |
|||
(function(window, videojs, undefined) { |
|||
/* |
|||
======== A Handy Little QUnit Reference ======== |
|||
http://api.qunitjs.com/
|
|||
|
|||
Test methods: |
|||
module(name, {[setup][ ,teardown]}) |
|||
test(name, callback) |
|||
expect(numberOfAssertions) |
|||
stop(increment) |
|||
start(decrement) |
|||
Test assertions: |
|||
ok(value, [message]) |
|||
equal(actual, expected, [message]) |
|||
notEqual(actual, expected, [message]) |
|||
deepEqual(actual, expected, [message]) |
|||
notDeepEqual(actual, expected, [message]) |
|||
strictEqual(actual, expected, [message]) |
|||
notStrictEqual(actual, expected, [message]) |
|||
throws(block, [expected], [message]) |
|||
*/ |
|||
|
|||
var player, oldXhr, oldSourceBuffer, xhrParams; |
|||
|
|||
module('HLS', { |
|||
setup: function() { |
|||
var video = document.createElement('video'); |
|||
document.querySelector('#qunit-fixture').appendChild(video); |
|||
player = videojs(video); |
|||
|
|||
// make XHR synchronous
|
|||
oldXhr = window.XMLHttpRequest; |
|||
window.XMLHttpRequest = function() { |
|||
this.open = function() { |
|||
xhrParams = arguments; |
|||
}; |
|||
this.send = function() { |
|||
this.readyState = 4; |
|||
this.responseText = window.manifests['media']; |
|||
this.onreadystatechange(); |
|||
}; |
|||
}; |
|||
|
|||
// mock out SourceBuffer since it won't be available in phantomjs
|
|||
oldSourceBuffer = window.videojs.SourceBuffer; |
|||
window.videojs.SourceBuffer = function() { |
|||
this.appendBuffer = function() {}; |
|||
}; |
|||
}, |
|||
teardown: function() { |
|||
window.XMLHttpRequest = oldXhr; |
|||
window.videojs.SourceBuffer = oldSourceBuffer; |
|||
} |
|||
}); |
|||
|
|||
test('loads the specified manifest URL on init', function() { |
|||
var loadedmanifest = false, loadedmetadata = false; |
|||
player.on('loadedmanifest', function() { |
|||
loadedmanifest = true; |
|||
}); |
|||
player.on('loadedmetadata', function() { |
|||
loadedmetadata = true; |
|||
}); |
|||
|
|||
player.hls('manifest/playlist.m3u8'); |
|||
strictEqual(player.hls.readyState(), 0, 'the readyState is HAVE_NOTHING'); |
|||
videojs.mediaSources[player.currentSrc()].trigger({ |
|||
type: 'sourceopen' |
|||
}); |
|||
ok(loadedmanifest, 'loadedmanifest fires'); |
|||
ok(loadedmetadata, 'loadedmetadata fires'); |
|||
ok(player.hls.manifest, 'the manifest is available'); |
|||
ok(player.hls.manifest.segments, 'the segment entries are parsed'); |
|||
strictEqual(player.hls.manifest, |
|||
player.hls.currentPlaylist, |
|||
'a playlist is selected'); |
|||
strictEqual(player.hls.readyState(), 1, 'the readyState is HAVE_METADATA'); |
|||
}); |
|||
|
|||
test('starts downloading a segment on loadedmetadata', function() { |
|||
player.hls('manifest/media.m3u8'); |
|||
videojs.mediaSources[player.currentSrc()].trigger({ |
|||
type: 'sourceopen' |
|||
}); |
|||
|
|||
strictEqual(xhrParams[1], '00001.ts', 'the first segment is requested'); |
|||
}); |
|||
|
|||
module('segment controller', { |
|||
setup: function() { |
|||
segmentController = new window.videojs.hls.SegmentController(); |
|||
this.vjsget = window.videojs.get; |
|||
window.videojs.get = function(url, success) { |
|||
success(window.bcSegment); |
|||
}; |
|||
}, |
|||
teardown: function() { |
|||
window.videojs.get = this.vjsget; |
|||
} |
|||
}); |
|||
|
|||
test('bandwidth calulation test', function() { |
|||
var |
|||
multiSecondData = segmentController.calculateThroughput(10000, 1000, 2000), |
|||
subSecondData = segmentController.calculateThroughput(10000, 1000, 1500); |
|||
equal(multiSecondData, 80000, 'MULTI-Second bits per second calculation'); |
|||
equal(subSecondData, 160000, 'SUB-Second bits per second calculation'); |
|||
}); |
|||
|
|||
})(window, window.videojs); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue