Browse Source

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
David LaPalomento 12 years ago
parent
commit
26096d0dfc
  1. 2
      example.html
  2. 2
      src/videojs-hls.js
  3. 7
      test/m3u8_test.js
  4. 67
      test/manifest-loader_test.js
  5. 30
      test/segment-parser.js
  6. 12
      test/videojs-hls.html
  7. 110
      test/videojs-hls_test.js

2
example.html

@ -13,7 +13,7 @@
<script src="node_modules/videojs-media-sources/videojs-media-sources.js"></script> <script src="node_modules/videojs-media-sources/videojs-media-sources.js"></script>
<!-- HLS plugin --> <!-- HLS plugin -->
<script src="src/video-js-hls.js"></script>
<script src="src/videojs-hls.js"></script>
<!-- segment handling --> <!-- segment handling -->
<script src="src/flv-tag.js"></script> <script src="src/flv-tag.js"></script>

2
src/video-js-hls.js → src/videojs-hls.js

@ -17,7 +17,7 @@ videojs.plugin('hls', function(options) {
player = this, player = this,
url, url,
loadSegment,
fillBuffer,
selectPlaylist; selectPlaylist;
if (typeof options === 'string') { if (typeof options === 'string') {

7
test/m3u8_test.js

@ -8,13 +8,6 @@
Parser = window.videojs.m3u8.Parser, Parser = window.videojs.m3u8.Parser,
parser; parser;
module('environment');
test('is sane', function() {
expect(1);
ok(true);
});
/* /*
M3U8 Test Suite M3U8 Test Suite
*/ */

67
test/manifest-loader_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);

30
test/video-js-hls_test.js → test/segment-parser.js

@ -35,13 +35,6 @@
testScriptEcmaArray, testScriptEcmaArray,
testNalUnit; testNalUnit;
module('environment');
test('is sane', function() {
expect(1);
ok(true);
});
module('segment parser', { module('segment parser', {
setup: function() { setup: function() {
parser = new window.videojs.hls.SegmentParser(); parser = new window.videojs.hls.SegmentParser();
@ -228,25 +221,4 @@
'the size of the previous tag is correct'); 'the size of the previous tag is correct');
} }
}); });
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');
});
})(this);
})(window);

12
test/video-js-hls.html → test/videojs-hls.html

@ -12,7 +12,7 @@
<script src="../node_modules/videojs-media-sources/videojs-media-sources.js"></script> <script src="../node_modules/videojs-media-sources/videojs-media-sources.js"></script>
<!-- HLS plugin --> <!-- HLS plugin -->
<script src="../src/video-js-hls.js"></script>
<script src="../src/videojs-hls.js"></script>
<script src="../src/flv-tag.js"></script> <script src="../src/flv-tag.js"></script>
<script src="../src/exp-golomb.js"></script> <script src="../src/exp-golomb.js"></script>
<script src="../src/h264-stream.js"></script> <script src="../src/h264-stream.js"></script>
@ -34,7 +34,15 @@
<script src="../src/bin-utils.js"></script> <script src="../src/bin-utils.js"></script>
<!-- Test cases --> <!-- Test cases -->
<script src="video-js-hls_test.js"></script>
<script>
module('environment');
test('is sane', function() {
expect(1);
ok(true);
});
</script>
<script src="videojs-hls_test.js"></script>
<script src="segment-parser.js"></script>
<script src="exp-golomb_test.js"></script> <script src="exp-golomb_test.js"></script>
<script src="flv-tag_test.js"></script> <script src="flv-tag_test.js"></script>
<script src="m3u8_test.js"></script> <script src="m3u8_test.js"></script>

110
test/videojs-hls_test.js

@ -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);
Loading…
Cancel
Save