UNPKG

playable

Version:

Video player based on HTML5Video

222 lines 11.2 kB
"use strict"; 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