Files
edx-platform/xmodule/js/spec/video/html5_video_spec.js
Syed Ali Abbas Zaidi 8480dbc228 chore: apply amnesty on existing not fixable issues (#32215)
* 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
2023-08-07 19:13:19 +05:00

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