1
0
mirror of https://github.com/videojs/video.js.git synced 2024-12-25 02:42:10 +02:00
video.js/test/api/api.js
heff a8ff970d4a Broke up Lib and Util into smaller libraries of functions
Broke out bind, guid, and element data functions from Lib

Separated out more dom functions in to dom.js

Broke out URL functions into url.js

Removed setLocalStorage since it wasn't being used

Moved browser tests out of lib

Moved log functions into their own file

Removed trim() since it wasn't being used

Moved formatTime into its own file

Moved round into its own file and renamed roundFloat()

Moved capitalize into its own file and renamed as toTitleCase()

Moved createTimeRange into its own file

Removed Lib.arr.forEach infavor of the native forEach

Removed Lib.obj.create in favor of native Object.create (ES6-sham)

Removed obj.each in favor of native Object.getOwnPropertyNames().forEach()

Removed obj.merge and copy. Using lodash.assign instead.

Replaced Lib.obj.isPlain with lodash.isPlainObject

Removed Lib.obj.isArray in favor of the native Array.isArray

Also removed the lib.js tests file as all tests have been moved
or removed.

Removed Lib.isEmpty in favor of !Object.getOwnPropertyNames().length

Switched Util.mergeOptions and deepMerge to use new mergeOptions()

Moved Lib.TEST_VID to Html5.TEST_VID

Removed Lib references everywhere. Woo!

Attempting to fix sourcemap test errors by setting grunt-browserify version

Switched to object.assign from lodash.assign

Removed unused 'inherits' dependency

Reorganzied test files and added '.test' to file names

Combined js/core.js and js/video.js

Moved events.js into the utils directory
2015-05-15 18:20:35 -07:00

281 lines
11 KiB
JavaScript

/**
* These tests run on the minified, window.videojs and ensure the needed
* APIs still exist
*/
(function(){
q.module('Player API');
test('videojs should exist on the window', function() {
ok(window.videojs, 'videojs exists on the window');
});
test('should be able to access expected player API methods', function() {
var player = videojs.getComponent('Player').prototype;
// Native HTML5 Methods
ok(player.error, 'error exists');
ok(player.src, 'src exists');
ok(player.currentSrc, 'currentSrc exists');
ok(player.buffered, 'buffered exists');
ok(player.load, 'load exists');
ok(player.seeking, 'seeking exists');
ok(player.currentTime, 'currentTime exists');
ok(player.duration, 'duration exists');
ok(player.paused, 'paused exists');
ok(player.ended, 'ended exists');
ok(player.autoplay, 'autoplay exists');
ok(player.loop, 'loop exists');
ok(player.play , 'play exists');
ok(player.pause , 'pause exists');
ok(player.controls, 'controls exists');
ok(player.volume, 'volume exists');
ok(player.muted, 'muted exists');
ok(player.width, 'width exists');
ok(player.height, 'height exists');
ok(player.poster, 'poster exists');
ok(player.textTracks, 'textTracks exists');
ok(player.requestFullscreen, 'requestFullscreen exists');
ok(player.exitFullscreen, 'exitFullscreen exists');
ok(player.playbackRate, 'playbackRate exists');
ok(player.networkState, 'networkState exists');
ok(player.readyState, 'readyState exists');
// Unsupported Native HTML5 Methods
// ok(player.canPlayType, 'canPlayType exists');
// ok(player.startTime, 'startTime exists');
// ok(player.defaultPlaybackRate, 'defaultPlaybackRate exists');
// ok(player.playbackRate, 'playbackRate exists');
// ok(player.played, 'played exists');
// ok(player.seekable, 'seekable exists');
// ok(player.videoWidth, 'videoWidth exists');
// ok(player.videoHeight, 'videoHeight exists');
// Additional player methods
ok(player.bufferedPercent, 'bufferedPercent exists');
ok(player.reportUserActivity, 'reportUserActivity exists');
ok(player.userActive, 'userActive exists');
ok(player.usingNativeControls, 'usingNativeControls exists');
ok(player.isFullscreen, 'isFullscreen exists');
// TextTrack methods
ok(player.textTracks, 'textTracks exists');
ok(player.remoteTextTracks, 'remoteTextTracks exists');
ok(player.addTextTrack, 'addTextTrack exists');
ok(player.addRemoteTextTrack, 'addRemoteTextTrack exists');
ok(player.removeRemoteTextTrack, 'removeRemoteTextTrack exists');
// Deprecated methods that should still exist
ok(player.requestFullScreen, 'requestFullScreen exists');
ok(player.isFullScreen, 'isFullScreen exists');
ok(player.cancelFullScreen, 'cancelFullScreen exists');
});
test('should be able to access expected component API methods', function() {
var Component = videojs.getComponent('Component');
var comp = new Component({ id: function(){ return 1; }, reportUserActivity: function(){} });
// Component methods
ok(comp.player, 'player exists');
ok(comp.options, 'options exists');
ok(comp.init, 'init exists');
ok(comp.dispose, 'dispose exists');
ok(comp.createEl, 'createEl exists');
ok(comp.contentEl, 'contentEl exists');
ok(comp.el, 'el exists');
ok(comp.addChild, 'addChild exists');
ok(comp.getChild, 'getChild exists');
ok(comp.getChildById, 'getChildById exists');
ok(comp.children, 'children exists');
ok(comp.initChildren, 'initChildren exists');
ok(comp.removeChild, 'removeChild exists');
ok(comp.on, 'on exists');
ok(comp.off, 'off exists');
ok(comp.one, 'one exists');
ok(comp.trigger, 'trigger exists');
ok(comp.triggerReady, 'triggerReady exists');
ok(comp.show, 'show exists');
ok(comp.hide, 'hide exists');
ok(comp.width, 'width exists');
ok(comp.height, 'height exists');
ok(comp.dimensions, 'dimensions exists');
ok(comp.ready, 'ready exists');
ok(comp.addClass, 'addClass exists');
ok(comp.removeClass, 'removeClass exists');
ok(comp.buildCSSClass, 'buildCSSClass exists');
ok(comp.setInterval, 'setInterval exists');
ok(comp.clearInterval, 'clearInterval exists');
ok(comp.setTimeout, 'setTimeout exists');
ok(comp.clearTimeout, 'clearTimeout exists');
});
test('should be able to access expected MediaTech API methods', function() {
var media = videojs.getComponent('Tech');
var mediaProto = media.prototype;
var html5 = videojs.getComponent('Html5');
var html5Proto = html5.prototype;
var flash = videojs.getComponent('Flash');
var flashProto = flash.prototype;
ok(mediaProto.setPoster, 'setPoster should exist on the Media tech');
ok(html5Proto.setPoster, 'setPoster should exist on the HTML5 tech');
ok(flashProto.setPoster, 'setPoster should exist on the Flash tech');
ok(html5.patchCanPlayType, 'patchCanPlayType should exist for HTML5');
ok(html5.unpatchCanPlayType, 'unpatchCanPlayType should exist for HTML5');
// Source Handler Functions
ok(media.withSourceHandlers, 'withSourceHandlers should exist for Media Tech');
ok(html5.canPlaySource, 'canPlaySource should exist for HTML5');
ok(html5.registerSourceHandler, 'registerSourceHandler should exist for Html5');
ok(html5.selectSourceHandler, 'selectSourceHandler should exist for Html5');
ok(html5.prototype.setSource, 'setSource should exist for Html5');
ok(html5.prototype.disposeSourceHandler, 'disposeSourceHandler should exist for Html5');
ok(flash.canPlaySource, 'canPlaySource should exist for Flash');
ok(flash.registerSourceHandler, 'registerSourceHandler should exist for Flash');
ok(flash.selectSourceHandler, 'selectSourceHandler should exist for Flash');
ok(flash.prototype.setSource, 'setSource should exist for Flash');
ok(flash.prototype.disposeSourceHandler, 'disposeSourceHandler should exist for Flash');
});
test('should export ready api call to public', function() {
var videoTag = testHelperMakeTag();
var fixture = document.getElementById('qunit-fixture');
fixture.appendChild(videoTag);
var player = videojs('example_1');
ok(player.ready !== undefined, 'ready callback is defined');
player.dispose();
});
test('should export useful components to the public', function () {
ok(videojs.TOUCH_ENABLED !== undefined, 'Touch detection should be public');
ok(videojs.getComponent('ControlBar'), 'ControlBar should be public');
ok(videojs.getComponent('Button'), 'Button should be public');
ok(videojs.getComponent('PlayToggle'), 'PlayToggle should be public');
ok(videojs.getComponent('FullscreenToggle'), 'FullscreenToggle should be public');
ok(videojs.getComponent('BigPlayButton'), 'BigPlayButton should be public');
ok(videojs.getComponent('LoadingSpinner'), 'LoadingSpinner should be public');
ok(videojs.getComponent('CurrentTimeDisplay'), 'CurrentTimeDisplay should be public');
ok(videojs.getComponent('DurationDisplay'), 'DurationDisplay should be public');
ok(videojs.getComponent('TimeDivider'), 'TimeDivider should be public');
ok(videojs.getComponent('RemainingTimeDisplay'), 'RemainingTimeDisplay should be public');
ok(videojs.getComponent('Slider'), 'Slider should be public');
ok(videojs.getComponent('ProgressControl'), 'ProgressControl should be public');
ok(videojs.getComponent('SeekBar'), 'SeekBar should be public');
ok(videojs.getComponent('LoadProgressBar'), 'LoadProgressBar should be public');
ok(videojs.getComponent('PlayProgressBar'), 'PlayProgressBar should be public');
ok(videojs.getComponent('SeekHandle'), 'SeekHandle should be public');
ok(videojs.getComponent('VolumeControl'), 'VolumeControl should be public');
ok(videojs.getComponent('VolumeBar'), 'VolumeBar should be public');
ok(videojs.getComponent('VolumeLevel'), 'VolumeLevel should be public');
ok(videojs.getComponent('VolumeMenuButton'), 'VolumeMenuButton should be public');
ok(videojs.getComponent('VolumeHandle'), 'VolumeHandle should be public');
ok(videojs.getComponent('MuteToggle'), 'MuteToggle should be public');
ok(videojs.getComponent('PosterImage'), 'PosterImage should be public');
ok(videojs.getComponent('Menu'), 'Menu should be public');
ok(videojs.getComponent('MenuItem'), 'MenuItem should be public');
ok(videojs.getComponent('MenuButton'), 'MenuButton should be public');
ok(videojs.getComponent('PlaybackRateMenuButton'), 'PlaybackRateMenuButton should be public');
ok(videojs.getComponent('CaptionSettingsMenuItem'), 'CaptionSettingsMenuItem should be public');
ok(videojs.getComponent('OffTextTrackMenuItem'), 'OffTextTrackMenuItem should be public');
ok(videojs.getComponent('TextTrackMenuItem'), 'TextTrackMenuItem should be public');
ok(videojs.getComponent('TextTrackDisplay'), 'TextTrackDisplay should be public');
ok(videojs.getComponent('TextTrackButton'), 'TextTrackButton should be public');
ok(videojs.getComponent('CaptionsButton'), 'CaptionsButton should be public');
ok(videojs.getComponent('SubtitlesButton'), 'SubtitlesButton should be public');
ok(videojs.getComponent('ChaptersButton'), 'ChaptersButton should be public');
ok(videojs.getComponent('ChaptersTrackMenuItem'), 'ChaptersTrackMenuItem should be public');
ok(videojs.mergeOptions, 'mergeOptions should be public');
});
test('should be able to initialize player twice on the same tag using string reference', function() {
var videoTag = testHelperMakeTag();
var id = videoTag.id;
var fixture = document.getElementById('qunit-fixture');
fixture.appendChild(videoTag);
var player = videojs('example_1');
player.dispose();
ok(!document.getElementById(id), 'element is removed');
videoTag = testHelperMakeTag();
fixture.appendChild(videoTag);
player = videojs('example_1');
player.dispose();
});
test('videojs.players should be available after minification', function() {
var videoTag = testHelperMakeTag();
var id = videoTag.id;
var fixture = document.getElementById('qunit-fixture');
fixture.appendChild(videoTag);
var player = videojs(id);
ok(videojs.players[id] === player, 'videojs.players is available');
player.dispose();
});
test('component can be subclassed externally', function(){
var Component = videojs.getComponent('Component');
var ControlBar = videojs.getComponent('ControlBar');
var player = new (Component.extend({
languages: function(){},
reportUserActivity: function(){},
language: function(){},
textTracks: function(){ return {
addEventListener: Function.prototype,
removeEventListener: Function.prototype
};
}
}))({
id: function(){},
reportUserActivity: function(){}
});
ok(new ControlBar(player), 'created a control bar without throwing');
});
function testHelperMakeTag(){
var videoTag = document.createElement('video');
videoTag.id = 'example_1';
videoTag.className = 'video-js vjs-default-skin';
return videoTag;
}
test('should extend Component', function(){
var Component = videojs.getComponent('Component');
var MyComponent = videojs.extends(Component, {
constructor: function() {
this.bar = true;
},
foo: function() {
return true;
}
});
var myComponent = new MyComponent();
ok(myComponent instanceof Component, 'creates an instance of Component');
ok(myComponent instanceof MyComponent, 'creates an instance of MyComponent');
ok(myComponent.bar, 'the constructor function is used');
ok(myComponent.foo(), 'instance methods are applied');
var NoMethods = videojs.extends(Component);
var noMethods = new NoMethods({});
ok(noMethods.on, 'should extend component with no methods or constructor');
});
})();