123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- import QUnit from 'qunit';
- import {
- createPlayer,
- useFakeEnvironment,
- openMediaSource,
- useFakeMediaSource
- } from './test-helpers.js';
- import videojs from 'video.js';
- /* eslint-disable no-unused-vars */
- // we need this so that it can register hls with videojs
- import {HlsSourceHandler, HlsHandler, Hls} from '../src/videojs-contrib-hls';
- /* eslint-enable no-unused-vars */
- import Config from '../src/config';
- // list of posible options
- // name - the proprety name
- // default - the default value
- // test - alternative value to verify that default is not used
- // alt - another alternative value to very that test/default are not used
- const options = [{
- name: 'withCredentials',
- default: false,
- test: true,
- alt: false
- }, {
- name: 'bandwidth',
- default: 4194304,
- test: 5,
- alt: 555
- }];
- const CONFIG_KEYS = Object.keys(Config);
- QUnit.module('Configuration - Deprication', {
- beforeEach(assert) {
- this.env = useFakeEnvironment(assert);
- this.requests = this.env.requests;
- this.mse = useFakeMediaSource();
- this.clock = this.env.clock;
- this.old = {};
- CONFIG_KEYS.forEach((key) => this.old[key] = Config[key]);
- // force the HLS tech to run
- this.old.NativeHlsSupport = videojs.Hls.supportsNativeHls;
- videojs.Hls.supportsNativeHls = false;
- },
- afterEach() {
- CONFIG_KEYS.forEach((key) => Config[key] = this.old[key]);
- this.env.restore();
- this.mse.restore();
- videojs.Hls.supportsNativeHls = this.old.NativeHlsSupport;
- }
- });
- QUnit.test('GOAL_BUFFER_LENGTH get warning', function(assert) {
- assert.equal(Hls.GOAL_BUFFER_LENGTH,
- Config.GOAL_BUFFER_LENGTH,
- 'Hls.GOAL_BUFFER_LENGTH returns the default');
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- });
- QUnit.test('GOAL_BUFFER_LENGTH set warning', function(assert) {
- Hls.GOAL_BUFFER_LENGTH = 10;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.GOAL_BUFFER_LENGTH, 10, 'returns what we set it to');
- });
- QUnit.test('GOAL_BUFFER_LENGTH set warning and invalid', function(assert) {
- Hls.GOAL_BUFFER_LENGTH = 'nope';
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.GOAL_BUFFER_LENGTH, 30, 'default');
- Hls.GOAL_BUFFER_LENGTH = -1;
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.GOAL_BUFFER_LENGTH, 30, 'default');
- });
- QUnit.test('MAX_GOAL_BUFFER_LENGTH get warning', function(assert) {
- assert.equal(Hls.MAX_GOAL_BUFFER_LENGTH,
- Config.MAX_GOAL_BUFFER_LENGTH,
- 'Hls.MAX_GOAL_BUFFER_LENGTH returns the default');
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- });
- QUnit.test('MAX_GOAL_BUFFER_LENGTH set warning', function(assert) {
- Hls.MAX_GOAL_BUFFER_LENGTH = 10;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.MAX_GOAL_BUFFER_LENGTH, 10, 'returns what we set it to');
- });
- QUnit.test('MAX_GOAL_BUFFER_LENGTH set warning and invalid', function(assert) {
- Hls.MAX_GOAL_BUFFER_LENGTH = 'nope';
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.MAX_GOAL_BUFFER_LENGTH, 60, 'default');
- Hls.MAX_GOAL_BUFFER_LENGTH = -1;
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.MAX_GOAL_BUFFER_LENGTH, 60, 'default');
- });
- QUnit.test('GOAL_BUFFER_LENGTH_RATE get warning', function(assert) {
- assert.equal(Hls.GOAL_BUFFER_LENGTH_RATE,
- Config.GOAL_BUFFER_LENGTH_RATE,
- 'Hls.GOAL_BUFFER_LENGTH_RATE returns the default');
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- });
- QUnit.test('GOAL_BUFFER_LENGTH_RATE set warning', function(assert) {
- Hls.GOAL_BUFFER_LENGTH_RATE = 10;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.GOAL_BUFFER_LENGTH_RATE, 10, 'returns what we set it to');
- });
- QUnit.test('GOAL_BUFFER_LENGTH_RATE set warning and invalid', function(assert) {
- Hls.GOAL_BUFFER_LENGTH_RATE = 'nope';
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.GOAL_BUFFER_LENGTH_RATE, 1, 'default');
- Hls.GOAL_BUFFER_LENGTH_RATE = -1;
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.GOAL_BUFFER_LENGTH_RATE, 1, 'default');
- });
- QUnit.test('BUFFER_LOW_WATER_LINE get warning', function(assert) {
- assert.equal(Hls.BUFFER_LOW_WATER_LINE,
- Config.BUFFER_LOW_WATER_LINE,
- 'Hls.BUFFER_LOW_WATER_LINE returns the default');
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- });
- QUnit.test('BUFFER_LOW_WATER_LINE set warning', function(assert) {
- Hls.BUFFER_LOW_WATER_LINE = 20;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.BUFFER_LOW_WATER_LINE, 20, 'returns what we set it to');
- // Allow setting to 0
- Hls.BUFFER_LOW_WATER_LINE = 0;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.BUFFER_LOW_WATER_LINE, 0, 'returns what we set it to');
- });
- QUnit.test('BUFFER_LOW_WATER_LINE set warning and invalid', function(assert) {
- Hls.BUFFER_LOW_WATER_LINE = 'nope';
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.BUFFER_LOW_WATER_LINE, 0, 'default');
- Hls.BUFFER_LOW_WATER_LINE = -1;
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.BUFFER_LOW_WATER_LINE, 0, 'default');
- });
- QUnit.test('MAX_BUFFER_LOW_WATER_LINE get warning', function(assert) {
- assert.equal(Hls.MAX_BUFFER_LOW_WATER_LINE,
- Config.MAX_BUFFER_LOW_WATER_LINE,
- 'Hls.MAX_BUFFER_LOW_WATER_LINE returns the default');
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- });
- QUnit.test('MAX_BUFFER_LOW_WATER_LINE set warning', function(assert) {
- Hls.MAX_BUFFER_LOW_WATER_LINE = 20;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 20, 'returns what we set it to');
- // Allow setting to 0
- Hls.MAX_BUFFER_LOW_WATER_LINE = 0;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 0, 'returns what we set it to');
- });
- QUnit.test('MAX_BUFFER_LOW_WATER_LINE set warning and invalid', function(assert) {
- Hls.MAX_BUFFER_LOW_WATER_LINE = 'nope';
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 30, 'default');
- Hls.MAX_BUFFER_LOW_WATER_LINE = -1;
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.MAX_BUFFER_LOW_WATER_LINE, 30, 'default');
- });
- QUnit.test('BUFFER_LOW_WATER_LINE_RATE get warning', function(assert) {
- assert.equal(Hls.BUFFER_LOW_WATER_LINE_RATE,
- Config.BUFFER_LOW_WATER_LINE_RATE,
- 'Hls.BUFFER_LOW_WATER_LINE_RATE returns the default');
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- });
- QUnit.test('BUFFER_LOW_WATER_LINE_RATE set warning', function(assert) {
- Hls.BUFFER_LOW_WATER_LINE_RATE = 10;
- assert.equal(this.env.log.warn.calls, 1, 'logged a warning');
- assert.equal(Config.BUFFER_LOW_WATER_LINE_RATE, 10, 'returns what we set it to');
- });
- QUnit.test('BUFFER_LOW_WATER_LINE_RATE set warning and invalid', function(assert) {
- Hls.BUFFER_LOW_WATER_LINE_RATE = 'nope';
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.BUFFER_LOW_WATER_LINE_RATE, 1, 'default');
- Hls.BUFFER_LOW_WATER_LINE_RATE = -1;
- assert.equal(this.env.log.warn.calls, 2, 'logged two warnings');
- assert.equal(Config.BUFFER_LOW_WATER_LINE_RATE, 1, 'default');
- });
- QUnit.module('Configuration - Options', {
- beforeEach(assert) {
- this.env = useFakeEnvironment(assert);
- this.requests = this.env.requests;
- this.mse = useFakeMediaSource();
- this.clock = this.env.clock;
- this.old = {};
- // force the HLS tech to run
- this.old.NativeHlsSupport = videojs.Hls.supportsNativeHls;
- videojs.Hls.supportsNativeHls = false;
- },
- afterEach() {
- this.env.restore();
- this.mse.restore();
- videojs.Hls.supportsNativeHls = this.old.NativeHlsSupport;
- this.player.dispose();
- videojs.options.hls = {};
- }
- });
- options.forEach((opt) => {
- QUnit.test(`default ${opt.name}`, function(assert) {
- this.player = createPlayer();
- this.player.src({
- src: 'http://example.com/media.m3u8',
- type: 'application/vnd.apple.mpegurl'
- });
- openMediaSource(this.player, this.clock);
- let hls = this.player.tech_.hls;
- assert.equal(hls.options_[opt.name],
- opt.default,
- `${opt.name} should be default`);
- });
- QUnit.test(`global ${opt.name}`, function(assert) {
- videojs.options.hls[opt.name] = opt.test;
- this.player = createPlayer();
- this.player.src({
- src: 'http://example.com/media.m3u8',
- type: 'application/vnd.apple.mpegurl'
- });
- openMediaSource(this.player, this.clock);
- let hls = this.player.tech_.hls;
- assert.equal(hls.options_[opt.name],
- opt.test,
- `${opt.name} should be equal to global`);
- });
- QUnit.test(`sourceHandler ${opt.name}`, function(assert) {
- let sourceHandlerOptions = {html5: {hls: {}}};
- sourceHandlerOptions.html5.hls[opt.name] = opt.test;
- this.player = createPlayer(sourceHandlerOptions);
- this.player.src({
- src: 'http://example.com/media.m3u8',
- type: 'application/vnd.apple.mpegurl'
- });
- openMediaSource(this.player, this.clock);
- let hls = this.player.tech_.hls;
- assert.equal(hls.options_[opt.name],
- opt.test,
- `${opt.name} should be equal to sourceHandler Option`);
- });
- QUnit.test(`src ${opt.name}`, function(assert) {
- let srcOptions = {
- src: 'http://example.com/media.m3u8',
- type: 'application/vnd.apple.mpegurl'
- };
- srcOptions[opt.name] = opt.test;
- this.player = createPlayer();
- this.player.src(srcOptions);
- openMediaSource(this.player, this.clock);
- let hls = this.player.tech_.hls;
- assert.equal(hls.options_[opt.name],
- opt.test,
- `${opt.name} should be equal to src option`);
- });
- QUnit.test(`srcHandler overrides global ${opt.name}`, function(assert) {
- let sourceHandlerOptions = {html5: {hls: {}}};
- sourceHandlerOptions.html5.hls[opt.name] = opt.test;
- videojs.options.hls[opt.name] = opt.alt;
- this.player = createPlayer(sourceHandlerOptions);
- this.player.src({
- src: 'http://example.com/media.m3u8',
- type: 'application/vnd.apple.mpegurl'
- });
- openMediaSource(this.player, this.clock);
- let hls = this.player.tech_.hls;
- assert.equal(hls.options_[opt.name],
- opt.test,
- `${opt.name} should be equal to sourchHandler option`);
- });
- QUnit.test(`src overrides sourceHandler ${opt.name}`, function(assert) {
- let sourceHandlerOptions = {html5: {hls: {}}};
- let srcOptions = {
- src: 'http://example.com/media.m3u8',
- type: 'application/vnd.apple.mpegurl'
- };
- sourceHandlerOptions.html5.hls[opt.name] = opt.alt;
- srcOptions[opt.name] = opt.test;
- this.player = createPlayer(sourceHandlerOptions);
- this.player.src(srcOptions);
- openMediaSource(this.player, this.clock);
- let hls = this.player.tech_.hls;
- assert.equal(hls.options_[opt.name],
- opt.test,
- `${opt.name} should be equal to sourchHandler option`);
- });
- });
- QUnit.module('Configuration - Global Only', {
- beforeEach() {
- videojs.options.hls = {};
- },
- afterEach() {
- videojs.options.hls = {};
- }
- });
- QUnit.test('global mode override - flash', function(assert) {
- videojs.options.hls.mode = 'flash';
- let htmlSourceHandler = new HlsSourceHandler('html5');
- let flashSourceHandler = new HlsSourceHandler('flash');
- assert.equal(
- htmlSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
- false,
- 'Cannot play html as we are overriden not to');
- assert.equal(
- flashSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
- true,
- 'Can play flash as it is supported and overides allow');
- });
- QUnit.test('global mode override - html', function(assert) {
- videojs.options.hls.mode = 'html5';
- let htmlSourceHandler = new HlsSourceHandler('html5');
- let flashSourceHandler = new HlsSourceHandler('flash');
- assert.equal(
- htmlSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
- true,
- 'Can play html as we support it and overides allow');
- assert.equal(
- flashSourceHandler.canHandleSource({type: 'application/x-mpegURL'}),
- false,
- 'Cannot play flash as we are overiden not to');
- });
|