150 lines
4.6 KiB
JavaScript
150 lines
4.6 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
describe('VideoPlayPlaceholder', function() {
|
|
var state, oldOTBD;
|
|
|
|
beforeEach(function() {
|
|
oldOTBD = window.onTouchBasedDevice;
|
|
window.onTouchBasedDevice = jasmine
|
|
.createSpy('onTouchBasedDevice').and.returnValue(['iPad']);
|
|
|
|
state = jasmine.initializePlayer();
|
|
spyOn(state.videoCommands, 'execute');
|
|
});
|
|
|
|
afterEach(function() {
|
|
$('source').remove();
|
|
state.storage.clear();
|
|
state.videoPlayer.destroy();
|
|
window.onTouchBasedDevice = oldOTBD;
|
|
});
|
|
|
|
var cases = [
|
|
{
|
|
name: 'PC',
|
|
isShown: false,
|
|
isTouch: null
|
|
}, {
|
|
name: 'iPad',
|
|
isShown: true,
|
|
isTouch: ['iPad']
|
|
}, {
|
|
name: 'Android',
|
|
isShown: true,
|
|
isTouch: ['Android']
|
|
}, {
|
|
name: 'iPhone',
|
|
isShown: false,
|
|
isTouch: ['iPhone']
|
|
}
|
|
];
|
|
|
|
beforeEach(function() {
|
|
jasmine.stubRequests();
|
|
spyOn(window.YT, 'Player').and.callThrough();
|
|
});
|
|
|
|
it('works correctly on calling proper methods', function() {
|
|
var btnPlay;
|
|
|
|
state = jasmine.initializePlayer();
|
|
btnPlay = state.el.find('.btn-play');
|
|
|
|
state.videoPlayPlaceholder.show();
|
|
|
|
expect(btnPlay).not.toHaveClass('is-hidden');
|
|
expect(btnPlay).toHaveAttrs({
|
|
'aria-hidden': 'false',
|
|
tabindex: '0'
|
|
});
|
|
|
|
state.videoPlayPlaceholder.hide();
|
|
|
|
expect(btnPlay).toHaveClass('is-hidden');
|
|
expect(btnPlay).toHaveAttrs({
|
|
'aria-hidden': 'true',
|
|
tabindex: '-1'
|
|
});
|
|
});
|
|
|
|
$.each(cases, function(index, data) {
|
|
var message = [
|
|
(data.isShown) ? 'is' : 'is not',
|
|
' shown on',
|
|
data.name
|
|
].join('');
|
|
|
|
it(message, function() {
|
|
var btnPlay;
|
|
|
|
window.onTouchBasedDevice.and.returnValue(data.isTouch);
|
|
state = jasmine.initializePlayer();
|
|
btnPlay = state.el.find('.btn-play');
|
|
|
|
if (data.isShown) {
|
|
expect(btnPlay).not.toHaveClass('is-hidden');
|
|
} else {
|
|
expect(btnPlay).toHaveClass('is-hidden');
|
|
}
|
|
});
|
|
});
|
|
|
|
$.each(['iPad', 'Android'], function(index, device) {
|
|
it(
|
|
'is shown on paused video on ' + device
|
|
+ ' in HTML5 player',
|
|
function() {
|
|
var btnPlay;
|
|
|
|
window.onTouchBasedDevice.and.returnValue([device]);
|
|
state = jasmine.initializePlayer();
|
|
btnPlay = state.el.find('.btn-play');
|
|
|
|
state.el.trigger('play');
|
|
state.el.trigger('pause');
|
|
expect(btnPlay).not.toHaveClass('is-hidden');
|
|
});
|
|
|
|
it(
|
|
'is hidden on playing video on ' + device
|
|
+ ' in HTML5 player',
|
|
function() {
|
|
var btnPlay;
|
|
|
|
window.onTouchBasedDevice.and.returnValue([device]);
|
|
state = jasmine.initializePlayer();
|
|
btnPlay = state.el.find('.btn-play');
|
|
|
|
state.el.trigger('play');
|
|
expect(btnPlay).toHaveClass('is-hidden');
|
|
});
|
|
|
|
it(
|
|
'is hidden on paused video on ' + device
|
|
+ ' in YouTube player',
|
|
function() {
|
|
var btnPlay;
|
|
|
|
window.onTouchBasedDevice.and.returnValue([device]);
|
|
state = jasmine.initializePlayerYouTube();
|
|
btnPlay = state.el.find('.btn-play');
|
|
|
|
state.el.trigger('play');
|
|
state.el.trigger('pause');
|
|
expect(btnPlay).toHaveClass('is-hidden');
|
|
});
|
|
});
|
|
|
|
it('starts play the video on click', function() {
|
|
$('.btn-play').click();
|
|
expect(state.videoCommands.execute).toHaveBeenCalledWith('play');
|
|
});
|
|
|
|
it('can destroy itself', function() {
|
|
state.videoPlayPlaceholder.destroy();
|
|
expect(state.videoPlayPlaceholder).toBeUndefined();
|
|
});
|
|
});
|
|
}).call(this);
|