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'
 | |
|   );
 | |
| });
 |