* fix: eslint operator-linebreak issue * fix: eslint quotes issue * fix: react jsx indent and props issues * fix: eslint trailing spaces issues * fix: eslint line around directives issue * fix: eslint semi rule * fix: eslint newline per chain rule * fix: eslint space infix ops rule * fix: eslint space-in-parens issue * fix: eslint space before function paren issue * fix: eslint space before blocks issue * fix: eslint arrow body style issue * fix: eslint dot-location issue * fix: eslint quotes issue * fix: eslint quote props issue * fix: eslint operator assignment issue * fix: eslint new line after import issue * fix: indent issues * fix: operator assignment issue * fix: all autofixable eslint issues * fix: all react related fixable issues * fix: autofixable eslint issues * chore: remove all template literals * fix: remaining autofixable issues * chore: apply amnesty on all existing issues * fix: failing xss-lint issues * refactor: apply amnesty on remaining issues * refactor: apply amnesty on new issues * fix: remove file level suppressions * refactor: apply amnesty on new issues
385 lines
18 KiB
JavaScript
385 lines
18 KiB
JavaScript
// eslint-disable-next-line no-shadow-restricted-names
|
|
(function(undefined) {
|
|
describe('Video HTML5Video', function() {
|
|
var STATUS = window.STATUS;
|
|
var state,
|
|
oldOTBD,
|
|
playbackRates = [0.75, 1.0, 1.25, 1.5, 2.0],
|
|
describeInfo,
|
|
POSTER_URL = '/media/video-images/poster.png';
|
|
|
|
beforeEach(function() {
|
|
oldOTBD = window.onTouchBasedDevice;
|
|
window.onTouchBasedDevice = jasmine
|
|
.createSpy('onTouchBasedDevice').and.returnValue(null);
|
|
|
|
state = jasmine.initializePlayer('video_html5.html');
|
|
});
|
|
|
|
afterEach(function() {
|
|
state.storage.clear();
|
|
state.videoPlayer.destroy();
|
|
$.fn.scrollTo.calls.reset();
|
|
$('source').remove();
|
|
window.onTouchBasedDevice = oldOTBD;
|
|
});
|
|
|
|
describeInfo = new jasmine.DescribeInfo('on non-Touch devices ', function() {
|
|
beforeEach(function() {
|
|
state.videoPlayer.player.config.events.onReady = jasmine.createSpy('onReady');
|
|
});
|
|
|
|
describe('events:', function() {
|
|
beforeEach(function() {
|
|
spyOn(state.videoPlayer.player, 'callStateChangeCallback').and.callThrough();
|
|
});
|
|
|
|
describe('[click]', function() {
|
|
describe('when player is paused', function() {
|
|
beforeEach(function() {
|
|
spyOn(state.videoPlayer.player.video, 'play').and.callThrough();
|
|
state.videoPlayer.player.playerState = STATUS.PAUSED;
|
|
$(state.videoPlayer.player.videoEl).trigger('click');
|
|
});
|
|
|
|
it('native play event was called', function() {
|
|
expect(state.videoPlayer.player.video.play).toHaveBeenCalled();
|
|
});
|
|
|
|
it('player state was changed', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() === STATUS.PLAYING;
|
|
}).always(done);
|
|
});
|
|
});
|
|
|
|
describe('[player is playing]', function() {
|
|
beforeEach(function() {
|
|
spyOn(state.videoPlayer.player.video, 'pause').and.callThrough();
|
|
state.videoPlayer.player.playerState = STATUS.PLAYING;
|
|
$(state.videoPlayer.player.videoEl).trigger('click');
|
|
});
|
|
|
|
it('native event was called', function() {
|
|
expect(state.videoPlayer.player.video.pause).toHaveBeenCalled();
|
|
});
|
|
|
|
it('player state was changed', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.PLAYING;
|
|
}).then(function() {
|
|
expect(state.videoPlayer.player.getPlayerState())
|
|
.toBe(STATUS.PAUSED);
|
|
}).always(done);
|
|
});
|
|
|
|
it('callback was not called', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.PLAYING;
|
|
}).then(function() {
|
|
expect(state.videoPlayer.player.callStateChangeCallback)
|
|
.not.toHaveBeenCalled();
|
|
}).always(done);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('[play]', function() {
|
|
beforeEach(function() {
|
|
spyOn(state.videoPlayer.player.video, 'play').and.callThrough();
|
|
state.videoPlayer.player.playerState = STATUS.PAUSED;
|
|
state.videoPlayer.player.playVideo();
|
|
});
|
|
|
|
it('native event was called', function() {
|
|
expect(state.videoPlayer.player.video.play).toHaveBeenCalled();
|
|
});
|
|
|
|
it('player state was changed', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.PAUSED;
|
|
}).then(function() {
|
|
expect([STATUS.BUFFERING, STATUS.PLAYING]).toContain(
|
|
state.videoPlayer.player.getPlayerState()
|
|
);
|
|
}).always(done);
|
|
});
|
|
|
|
it('callback was called', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.PAUSED;
|
|
}).then(function() {
|
|
expect(state.videoPlayer.player.callStateChangeCallback)
|
|
.toHaveBeenCalled();
|
|
}).always(done);
|
|
});
|
|
});
|
|
|
|
describe('[pause]', function() {
|
|
beforeEach(function(done) {
|
|
spyOn(state.videoPlayer.player.video, 'pause').and.callThrough();
|
|
state.videoPlayer.player.playerState = STATUS.UNSTARTED;
|
|
state.videoPlayer.player.playVideo();
|
|
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.UNSTARTED;
|
|
}).done(done);
|
|
|
|
state.videoPlayer.player.pauseVideo();
|
|
});
|
|
|
|
it('native event was called', function() {
|
|
expect(state.videoPlayer.player.video.pause).toHaveBeenCalled();
|
|
});
|
|
|
|
it('player state was changed', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.PLAYING;
|
|
}).then(function() {
|
|
expect(state.videoPlayer.player.getPlayerState())
|
|
.toBe(STATUS.PAUSED);
|
|
}).always(done);
|
|
});
|
|
|
|
it('callback was called', function(done) {
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.PLAYING;
|
|
}).then(function() {
|
|
expect(state.videoPlayer.player.callStateChangeCallback)
|
|
.toHaveBeenCalled();
|
|
}).always(done);
|
|
});
|
|
});
|
|
|
|
describe('[loadedmetadata]', function() {
|
|
it(
|
|
'player state was changed, start/end was defined, '
|
|
+ 'onReady called', function(done) {
|
|
jasmine.fireEvent(state.videoPlayer.player.video, 'loadedmetadata');
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.UNSTARTED;
|
|
}).then(function() {
|
|
expect(state.videoPlayer.player.getPlayerState())
|
|
.toBe(STATUS.PAUSED);
|
|
expect(state.videoPlayer.player.video.currentTime).toBe(0);
|
|
expect(state.videoPlayer.player.config.events.onReady)
|
|
.toHaveBeenCalled();
|
|
}).always(done);
|
|
});
|
|
});
|
|
|
|
describe('[ended]', function() {
|
|
beforeEach(function(done) {
|
|
state.videoPlayer.player.playVideo();
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() !== STATUS.UNSTARTED;
|
|
}).done(done);
|
|
});
|
|
|
|
it('player state was changed', function() {
|
|
jasmine.fireEvent(state.videoPlayer.player.video, 'ended');
|
|
expect(state.videoPlayer.player.getPlayerState()).toBe(STATUS.ENDED);
|
|
});
|
|
|
|
it('callback was called', function() {
|
|
jasmine.fireEvent(state.videoPlayer.player.video, 'ended');
|
|
expect(state.videoPlayer.player.callStateChangeCallback)
|
|
.toHaveBeenCalled();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('methods', function() {
|
|
var volume, seek, duration, playbackRate;
|
|
|
|
beforeEach(function() {
|
|
volume = state.videoPlayer.player.video.volume;
|
|
});
|
|
|
|
it('pauseVideo', function() {
|
|
spyOn(state.videoPlayer.player.video, 'pause').and.callThrough();
|
|
state.videoPlayer.player.pauseVideo();
|
|
expect(state.videoPlayer.player.video.pause).toHaveBeenCalled();
|
|
});
|
|
|
|
describe('seekTo', function() {
|
|
it('set new correct value', function(done) {
|
|
state.videoPlayer.player.playVideo();
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() === STATUS.PLAYING;
|
|
}).then(function() {
|
|
state.videoPlayer.player.seekTo(2);
|
|
expect(state.videoPlayer.player.getCurrentTime()).toBe(2);
|
|
}).done(done);
|
|
});
|
|
|
|
it('set new incorrect values', function() {
|
|
// eslint-disable-next-line no-shadow
|
|
var seek = state.videoPlayer.player.video.currentTime;
|
|
state.videoPlayer.player.seekTo(-50);
|
|
expect(state.videoPlayer.player.getCurrentTime()).toBe(seek);
|
|
state.videoPlayer.player.seekTo('5');
|
|
expect(state.videoPlayer.player.getCurrentTime()).toBe(seek);
|
|
state.videoPlayer.player.seekTo(500000);
|
|
expect(state.videoPlayer.player.getCurrentTime()).toBe(seek);
|
|
});
|
|
});
|
|
|
|
describe('setVolume', function() {
|
|
it('set new correct value', function() {
|
|
state.videoPlayer.player.setVolume(50);
|
|
expect(state.videoPlayer.player.getVolume()).toBe(50 * 0.01);
|
|
});
|
|
|
|
it('set new incorrect values', function() {
|
|
state.videoPlayer.player.setVolume(-50);
|
|
expect(state.videoPlayer.player.getVolume()).toBe(volume);
|
|
state.videoPlayer.player.setVolume('5');
|
|
expect(state.videoPlayer.player.getVolume()).toBe(volume);
|
|
state.videoPlayer.player.setVolume(500000);
|
|
expect(state.videoPlayer.player.getVolume()).toBe(volume);
|
|
});
|
|
});
|
|
|
|
it('getCurrentTime', function(done) {
|
|
state.videoPlayer.player.playVideo();
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() === STATUS.PLAYING;
|
|
}).then(function() {
|
|
state.videoPlayer.player.video.currentTime = 3;
|
|
expect(state.videoPlayer.player.getCurrentTime())
|
|
.toBe(state.videoPlayer.player.video.currentTime);
|
|
}).done(done);
|
|
});
|
|
|
|
it('playVideo', function() {
|
|
spyOn(state.videoPlayer.player.video, 'play').and.callThrough();
|
|
state.videoPlayer.player.playVideo();
|
|
expect(state.videoPlayer.player.video.play).toHaveBeenCalled();
|
|
});
|
|
|
|
it('getPlayerState', function() {
|
|
state.videoPlayer.player.playerState = STATUS.PLAYING;
|
|
expect(state.videoPlayer.player.getPlayerState()).toBe(STATUS.PLAYING);
|
|
state.videoPlayer.player.playerState = STATUS.ENDED;
|
|
expect(state.videoPlayer.player.getPlayerState()).toBe(STATUS.ENDED);
|
|
});
|
|
|
|
it('getVolume', function() {
|
|
// eslint-disable-next-line no-multi-assign
|
|
volume = state.videoPlayer.player.video.volume = 0.5;
|
|
expect(state.videoPlayer.player.getVolume()).toBe(volume);
|
|
});
|
|
|
|
it('getDuration', function(done) {
|
|
state.videoPlayer.player.playVideo();
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() === STATUS.PLAYING;
|
|
}).then(function() {
|
|
duration = state.videoPlayer.player.video.duration;
|
|
expect(state.videoPlayer.player.getDuration()).toBe(duration);
|
|
}).always(done);
|
|
});
|
|
|
|
describe('setPlaybackRate', function() {
|
|
it('set a slow value', function() {
|
|
playbackRate = 0.75;
|
|
state.videoPlayer.player.setPlaybackRate(playbackRate);
|
|
expect(state.videoPlayer.player.video.playbackRate).toBe(playbackRate);
|
|
});
|
|
|
|
it('set a fast value', function() {
|
|
playbackRate = 2.0;
|
|
state.videoPlayer.player.setPlaybackRate(playbackRate);
|
|
expect(state.videoPlayer.player.video.playbackRate).toBe(playbackRate);
|
|
});
|
|
|
|
it('set NaN value', function() {
|
|
var oldPlaybackRate = state.videoPlayer.player.video.playbackRate;
|
|
|
|
// When we try setting the playback rate to some
|
|
// non-numerical value, nothing should happen.
|
|
playbackRate = NaN;
|
|
state.videoPlayer.player.setPlaybackRate(playbackRate);
|
|
expect(state.videoPlayer.player.video.playbackRate)
|
|
.toBe(oldPlaybackRate);
|
|
});
|
|
});
|
|
|
|
it('getAvailablePlaybackRates', function() {
|
|
expect(state.videoPlayer.player.getAvailablePlaybackRates())
|
|
.toEqual(playbackRates);
|
|
});
|
|
|
|
it('_getLogs', function(done) {
|
|
state.videoPlayer.player.playVideo();
|
|
jasmine.waitUntil(function() {
|
|
return state.videoPlayer.player.getPlayerState() === STATUS.PLAYING;
|
|
}).then(function() {
|
|
var logs = state.videoPlayer.player._getLogs();
|
|
expect(logs).toEqual(jasmine.any(Array));
|
|
expect(logs.length).toBeGreaterThan(0);
|
|
}).done(done);
|
|
});
|
|
});
|
|
|
|
describe('poster', function() {
|
|
it('has url in player config', function() {
|
|
expect(state.videoPlayer.player.config.poster).toEqual(POSTER_URL);
|
|
expect(state.videoPlayer.player.videoEl).toHaveAttrs({
|
|
poster: POSTER_URL
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('non-hls encoding', function() {
|
|
beforeEach(function(done) {
|
|
state = jasmine.initializePlayer('video_html5.html');
|
|
done();
|
|
});
|
|
jasmine.getEnv().describe(describeInfo.description, describeInfo.specDefinitions);
|
|
});
|
|
|
|
describe('hls encoding', function() {
|
|
beforeEach(function(done) {
|
|
state = jasmine.initializeHLSPlayer();
|
|
done();
|
|
});
|
|
jasmine.getEnv().describe(describeInfo.description, describeInfo.specDefinitions);
|
|
});
|
|
|
|
it('does not show poster for html5 video if url is not present', function() {
|
|
state = jasmine.initializePlayer(
|
|
'video_html5.html',
|
|
{
|
|
poster: null
|
|
}
|
|
);
|
|
expect(state.videoPlayer.player.config.poster).toEqual(null);
|
|
expect(state.videoPlayer.player.videoEl).not.toHaveAttr('poster');
|
|
});
|
|
|
|
it('does not show poster for hls video if url is not present', function() {
|
|
state = jasmine.initializePlayer(
|
|
'video_hls.html',
|
|
{
|
|
poster: null
|
|
}
|
|
);
|
|
expect(state.videoPlayer.player.config.poster).toEqual(null);
|
|
expect(state.videoPlayer.player.videoEl).not.toHaveAttr('poster');
|
|
});
|
|
|
|
it('native controls are used on iPhone', function() {
|
|
window.onTouchBasedDevice.and.returnValue(['iPhone']);
|
|
|
|
state = jasmine.initializePlayer('video_html5.html');
|
|
|
|
state.videoPlayer.player.config.events.onReady = jasmine.createSpy('onReady');
|
|
|
|
expect($('video')).toHaveAttr('controls');
|
|
});
|
|
});
|
|
}).call(this);
|