UNPKG

playable

Version:

Video player based on HTML5Video

152 lines 7.66 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 chromecast_manager_1 = (0, tslib_1.__importStar)(require("./chromecast-manager")); var chomecast_api_mock_1 = require("../../testkit/chomecast-api-mock"); describe('ChromecastManager', function () { var testkit; var chromecastManager; var eventEmitter; var engine; var castApi; var video = { addEventListener: sinon.spy(), removeEventListener: sinon.spy(), removeAttribute: sinon.spy(), play: sinon.spy(), pause: sinon.spy(), currentTime: 0, tagName: 'VIDEO', }; var config = { videoElement: video, }; beforeEach(function () { // @ts-ignore window.cast = castApi = new chomecast_api_mock_1.WindowCastAPIMock(); // @ts-ignore window.chrome = new chomecast_api_mock_1.WindowChromeAPIMock(); testkit = (0, testkit_1.default)(config); eventEmitter = testkit.getModule('eventEmitter'); engine = testkit.getModule('engine'); testkit.registerModule(chromecast_manager_1.default.moduleName, chromecast_manager_1.default); chromecastManager = testkit.getModule('chromecastManager'); }); afterEach(function () { chomecast_api_mock_1.WindowCastAPIMock.reset(); chromecast_manager_1.default._chromecastInited = false; }); describe('Initalized ', function () { it('only if casting API is available', function () { var context = castApi.framework.CastContext.getInstance(); var stab = sinon.stub(context, 'setOptions'); chromecastManager._initCastContext(false); (0, chai_1.expect)(stab.called).to.equal(false); stab.reset(); chomecast_api_mock_1.WindowCastAPIMock.init(); }); }); describe('After init', function () { it('adds sсript for chromecast API', function (done) { eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_INITED, function () { (0, chai_1.expect)(document.scripts[0].src).to.equal('https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1'); done(); }); chomecast_api_mock_1.WindowCastAPIMock.init(); }); it('sets static _chromecastInited field to true', function (done) { eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_INITED, function () { (0, chai_1.expect)(chromecast_manager_1.default._chromecastInited).to.equal(true); done(); }); chomecast_api_mock_1.WindowCastAPIMock.init(); }); }); describe('should subscribe on chromecast API events', function () { describe('on start casting ', function () { var event = { sessionState: chomecast_api_mock_1.SessionState.SESSION_STARTED, }; it('changes output to chromecast', function (done) { eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_STARTED, function () { (0, chai_1.expect)(engine._output.getDebugInfo().output).equal('chromecast'); done(); }); chomecast_api_mock_1.WindowCastAPIMock.init(); castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, event); }); it('gets starting time from video tag', function (done) { video.currentTime = 200; eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_STARTED, function () { (0, chai_1.expect)(engine._output.currentTime).equal(200); video.currentTime = 0; done(); }); chomecast_api_mock_1.WindowCastAPIMock.init(); castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, event); }); }); describe('on resume casting changes output to chromecast', function () { var event = { sessionState: chomecast_api_mock_1.SessionState.SESSION_RESUMED, }; it('changes output to chromecast', function (done) { eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_RESUMED, function () { (0, chai_1.expect)(engine._output.getDebugInfo().output).equal('chromecast'); done(); }); chomecast_api_mock_1.WindowCastAPIMock.init(); castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, event); }); it('gets starting time from chromecast session', function (done) { castApi.framework.context._estimatedTime = 500; eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_RESUMED, function () { (0, chai_1.expect)(engine._output.currentTime).equal(500); video.currentTime = 0; done(); }); chomecast_api_mock_1.WindowCastAPIMock.init(); castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, event); }); }); describe('on stop casting changes output to html5video', function () { var endEvent = { sessionState: chomecast_api_mock_1.SessionState.SESSION_ENDED, }; var startEvent = { sessionState: chomecast_api_mock_1.SessionState.SESSION_STARTED, }; it('changes output to native', function (done) { eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_STOPED, function () { (0, chai_1.expect)(engine._output.getDebugInfo().output).equal('html5video'); done(); }); eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_STARTED, function () { castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, endEvent); }); chomecast_api_mock_1.WindowCastAPIMock.init(); castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, startEvent); }); it('gets starting time from chromecast output', function (done) { var player; eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_STOPED, function () { (0, chai_1.expect)(engine._output.currentTime).equal(1000); player.currentTime = 0; done(); }); eventEmitter.on(chromecast_manager_1.ChromecastEvents.CHROMECAST_CASTS_STARTED, function () { player = engine._output._player; player.currentTime = 1000; castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, endEvent); }); chomecast_api_mock_1.WindowCastAPIMock.init(); castApi.framework.trigger(chomecast_api_mock_1.eventType.SESSION_STATE_CHANGED, startEvent); }); }); }); }); //# sourceMappingURL=chromecast-manager.spec.js.map