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