playable
Version:
Video player based on HTML5Video
152 lines • 7.66 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 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