playable
Version:
Video player based on HTML5Video
222 lines • 11.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
require("jsdom-global/register");
var chai_1 = require("chai");
var sinon = (0, tslib_1.__importStar)(require("sinon"));
var testkit_1 = (0, tslib_1.__importDefault)(require("../../testkit"));
var desktop_1 = (0, tslib_1.__importDefault)(require("./desktop"));
var ios_1 = (0, tslib_1.__importDefault)(require("./ios"));
var testkit_2 = require("../../testkit");
var constants_1 = require("../../constants");
var mockedFullscreenHelper = {
isInFullScreen: false,
isEnabled: true,
request: sinon.spy(),
exit: sinon.spy(),
destroy: sinon.spy(),
_reset: function () {
this.isInFullScreen = false;
this.isEnabled = true;
this.request.resetHistory();
this.exit.resetHistory();
this.destroy.resetHistory();
},
};
describe('FullScreenManager', function () {
var testkit;
var fullScreenManager;
var eventEmitter;
var engine;
beforeEach(function () {
testkit = (0, testkit_1.default)();
eventEmitter = testkit.getModule('eventEmitter');
engine = testkit.getModule('engine');
fullScreenManager = testkit.getModule('fullScreenManager');
fullScreenManager._helper = mockedFullscreenHelper;
});
afterEach(function () {
mockedFullscreenHelper._reset();
});
describe('chosen helper', function () {
afterEach(function () {
(0, testkit_2.resetProperty)(navigator, 'userAgent');
});
it('should be for desktop if not on iOS', function () {
(0, testkit_2.setProperty)(navigator, 'userAgent', 'Computer');
testkit = (0, testkit_1.default)();
fullScreenManager = testkit.getModule('fullScreenManager');
(0, chai_1.expect)(fullScreenManager._helper instanceof desktop_1.default).to.be.true;
});
it('should be for iPhone', function () {
(0, testkit_2.setProperty)(navigator, 'userAgent', 'iPhone');
testkit = (0, testkit_1.default)();
fullScreenManager = testkit.getModule('fullScreenManager');
(0, chai_1.expect)(fullScreenManager._helper instanceof ios_1.default).to.be.true;
});
it('should be for iPod', function () {
(0, testkit_2.setProperty)(navigator, 'userAgent', 'iPod');
testkit = (0, testkit_1.default)();
fullScreenManager = testkit.getModule('fullScreenManager');
(0, chai_1.expect)(fullScreenManager._helper instanceof ios_1.default).to.be.true;
});
it('should be for iPad', function () {
(0, testkit_2.setProperty)(navigator, 'userAgent', 'iPad');
testkit = (0, testkit_1.default)();
fullScreenManager = testkit.getModule('fullScreenManager');
(0, chai_1.expect)(fullScreenManager._helper instanceof ios_1.default).to.be.true;
});
});
describe('enable state', function () {
it('should be based on helper state and config', function () {
(0, chai_1.expect)(fullScreenManager.isEnabled).to.be.true;
mockedFullscreenHelper.isEnabled = false;
(0, chai_1.expect)(fullScreenManager.isEnabled).to.be.false;
});
it('should return false in disabled flag passed in config', function () {
mockedFullscreenHelper.isEnabled = true;
fullScreenManager._isEnabled = false;
(0, chai_1.expect)(fullScreenManager.isEnabled).to.be.false;
});
});
describe('full screen state', function () {
it('should return state of helper', function () {
mockedFullscreenHelper.isInFullScreen = true;
(0, chai_1.expect)(fullScreenManager.isInFullScreen).to.be.true;
});
it('should return false if disabled', function () {
mockedFullscreenHelper.isEnabled = false;
mockedFullscreenHelper.isInFullScreen = true;
(0, chai_1.expect)(fullScreenManager.isInFullScreen).to.be.false;
});
});
describe('method for entering full screen', function () {
it("should call helper's method for request full screen", function () {
fullScreenManager.enterFullScreen();
(0, chai_1.expect)(mockedFullscreenHelper.request.called).to.be.true;
});
it('should do nothing if full screen is not enable', function () {
mockedFullscreenHelper.isEnabled = false;
fullScreenManager.enterFullScreen();
(0, chai_1.expect)(mockedFullscreenHelper.request.called).to.be.false;
});
});
describe('method for exiting full screen', function () {
it("should call helper's method for request full screen", function () {
fullScreenManager.exitFullScreen();
(0, chai_1.expect)(mockedFullscreenHelper.exit.called).to.be.true;
});
it('should do nothing if full screen is not enable', function () {
mockedFullscreenHelper.isEnabled = false;
fullScreenManager.exitFullScreen();
(0, chai_1.expect)(mockedFullscreenHelper.exit.called).to.be.false;
});
});
describe('due to reaction on fullscreen change', function () {
it('should trigger proper event', function () {
var spy = sinon.spy(eventEmitter, 'emitAsync');
mockedFullscreenHelper.isInFullScreen = true;
fullScreenManager._onChange({ target: fullScreenManager._element });
(0, chai_1.expect)(spy.calledWith(constants_1.UIEvent.FULL_SCREEN_STATE_CHANGED, mockedFullscreenHelper.isInFullScreen)).to.be.true;
eventEmitter.emitAsync.restore();
});
it('should not trigger if fullscreen target is not proper element', function () {
var spy = sinon.spy(eventEmitter, 'emitAsync');
mockedFullscreenHelper.isInFullScreen = true;
fullScreenManager._onChange({ target: null });
(0, chai_1.expect)(spy.calledWith(constants_1.UIEvent.FULL_SCREEN_STATE_CHANGED, mockedFullscreenHelper.isInFullScreen)).to.be.false;
eventEmitter.emitAsync.restore();
});
it('should pause video on exit from full screen if proper config passed', function () {
var spy = sinon.stub(engine, 'pause');
fullScreenManager._pauseVideoOnFullScreenExit = true;
mockedFullscreenHelper.isInFullScreen = false;
fullScreenManager._onChange({ target: fullScreenManager._element });
(0, chai_1.expect)(spy.called).to.be.true;
engine.pause.restore();
});
});
describe('due to reaction on play request', function () {
it('should enter full screen if proper config passed', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var spy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
spy = sinon.spy(fullScreenManager, 'enterFullScreen');
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.PLAY_REQUEST)];
case 1:
_a.sent();
fullScreenManager._enterFullScreenOnPlay = true;
mockedFullscreenHelper.isInFullScreen = false;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.PLAY_REQUEST)];
case 2:
_a.sent();
(0, chai_1.expect)(spy.calledOnce).to.be.true;
fullScreenManager.enterFullScreen.restore();
return [2 /*return*/];
}
});
});
});
});
describe('due to reaction on state changed', function () {
describe('to end state', function () {
it('should exit full screen if config passed', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var spy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
spy = sinon.spy(fullScreenManager, 'exitFullScreen');
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.STATE_CHANGED, {
nextState: constants_1.EngineState.ENDED,
})];
case 1:
_a.sent();
fullScreenManager._exitFullScreenOnEnd = true;
mockedFullscreenHelper.isInFullScreen = true;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.STATE_CHANGED, {
nextState: constants_1.EngineState.ENDED,
})];
case 2:
_a.sent();
(0, chai_1.expect)(spy.calledOnce).to.be.true;
fullScreenManager.exitFullScreen.restore();
return [2 /*return*/];
}
});
});
});
});
describe('to pause state', function () {
it('should exit full screen if config passed', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var spy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
spy = sinon.spy(fullScreenManager, 'exitFullScreen');
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.STATE_CHANGED, {
nextState: constants_1.EngineState.PAUSED,
})];
case 1:
_a.sent();
fullScreenManager._exitFullScreenOnPause = true;
mockedFullscreenHelper.isInFullScreen = true;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.STATE_CHANGED, {
nextState: constants_1.EngineState.PAUSED,
})];
case 2:
_a.sent();
(0, chai_1.expect)(spy.calledOnce).to.be.true;
fullScreenManager.exitFullScreen.restore();
return [2 /*return*/];
}
});
});
});
});
});
});
//# sourceMappingURL=full-screen-manager.spec.js.map