96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import document from 'global/document';
|
|
import window from 'global/window';
|
|
import QUnit from 'qunit';
|
|
import sinon from 'sinon';
|
|
import videojs from 'video.js';
|
|
import FlashMediaSource from '../src/flash-media-source';
|
|
import HtmlMediaSource from '../src/html-media-source';
|
|
|
|
// we disable this because browserify needs to include these files
|
|
// but the exports are not important
|
|
/* eslint-disable no-unused-vars */
|
|
import {MediaSource, URL} from '../src/videojs-contrib-media-sources.js';
|
|
/* eslint-disable no-unused-vars */
|
|
|
|
QUnit.test('the environment is sane', function(assert) {
|
|
assert.strictEqual(typeof Array.isArray, 'function', 'es5 exists');
|
|
assert.strictEqual(typeof sinon, 'object', 'sinon exists');
|
|
assert.strictEqual(typeof videojs, 'function', 'videojs exists');
|
|
assert.strictEqual(typeof videojs.MediaSource, 'function', 'plugin is a function');
|
|
});
|
|
|
|
QUnit.module('videojs-contrib-media-sources - General', {
|
|
beforeEach() {
|
|
this.fixture = document.getElementById('qunit-fixture');
|
|
this.video = document.createElement('video');
|
|
this.fixture.appendChild(this.video);
|
|
this.player = videojs(this.video);
|
|
|
|
// Mock the environment's timers because certain things - particularly
|
|
// player readiness - are asynchronous in video.js 5.
|
|
this.clock = sinon.useFakeTimers();
|
|
this.oldMediaSource = window.MediaSource || window.WebKitMediaSource;
|
|
},
|
|
|
|
afterEach() {
|
|
|
|
// The clock _must_ be restored before disposing the player; otherwise,
|
|
// certain timeout listeners that happen inside video.js may throw errors.
|
|
this.clock.restore();
|
|
this.player.dispose();
|
|
window.MediaSource = window.WebKitMediaSource = this.oldMediaSource;
|
|
}
|
|
});
|
|
|
|
QUnit.test('Plugin is registered', function(assert) {
|
|
assert.strictEqual(
|
|
typeof videojs.MediaSource,
|
|
'function',
|
|
'MediaSource plugin is attached to videojs'
|
|
);
|
|
assert.strictEqual(
|
|
typeof videojs.URL,
|
|
'object',
|
|
'URL plugin is attached to player'
|
|
);
|
|
});
|
|
|
|
QUnit.test('implementation selection is overridable', function() {
|
|
// mock native MediaSources
|
|
window.MediaSource = videojs.extend(videojs.EventTarget, {
|
|
addSourceBuffer() {
|
|
throw new Error('Testing Mock');
|
|
}
|
|
});
|
|
|
|
window.MediaSource.isTypeSupported = function(mime) {
|
|
return true;
|
|
};
|
|
|
|
QUnit.ok(
|
|
new videojs.MediaSource({ mode: 'flash' }) instanceof FlashMediaSource,
|
|
'forced flash'
|
|
);
|
|
|
|
QUnit.ok(
|
|
new videojs.MediaSource({ mode: 'html5' }) instanceof HtmlMediaSource,
|
|
'forced html5'
|
|
);
|
|
|
|
// 'auto' should use native mediasources when they're available
|
|
QUnit.ok(
|
|
new videojs.MediaSource() instanceof HtmlMediaSource,
|
|
'used html5'
|
|
);
|
|
|
|
window.MediaSource.isTypeSupported = function(mime) {
|
|
return false;
|
|
};
|
|
|
|
// 'auto' should use flash when native mediasources are not available
|
|
QUnit.ok(
|
|
new videojs.MediaSource() instanceof FlashMediaSource,
|
|
'used flash'
|
|
);
|
|
});
|