UNPKG

playable

Version:

Video player based on HTML5Video

103 lines 5.97 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 event_emitter_1 = (0, tslib_1.__importDefault)(require("../../../../modules/event-emitter/event-emitter")); var native_1 = (0, tslib_1.__importDefault)(require("./adapters/native")); var adapters_strategy_1 = (0, tslib_1.__importDefault)(require("./adapters-strategy")); var constants_1 = require("../../../../constants"); describe('AdapterStrategy', function () { var video = document.createElement('video'); var strategy; var eventEmitter; var playbackAdapters; beforeEach(function () { eventEmitter = new event_emitter_1.default(); // @ts-ignore strategy = new adapters_strategy_1.default(eventEmitter, video); }); it('should do nothing if src not passed', function () { strategy.connectAdapter(); (0, chai_1.expect)(strategy.attachedAdapter).to.be.null; }); it('should generate list of available stream creator in env on construction', function () { var availableStream = (0, native_1.default)(constants_1.MediaStreamType.HLS, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE); var unavailableStream = (0, native_1.default)(constants_1.MediaStreamType.DASH, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE); availableStream.isSupported = function () { return true; }; unavailableStream.isSupported = function () { return false; }; var newStrategy = new adapters_strategy_1.default(eventEmitter, video, [ availableStream, unavailableStream, ]); (0, chai_1.expect)(newStrategy._availableAdapters.length).to.be.equal(1); (0, chai_1.expect)(newStrategy._availableAdapters[0].constructor).to.be.equal(availableStream); }); it('should choose proper media stream for proper format', function () { playbackAdapters = [ (0, native_1.default)(constants_1.MediaStreamType.HLS, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), (0, native_1.default)(constants_1.MediaStreamType.DASH, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), (0, native_1.default)(constants_1.MediaStreamType.MP4, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), ]; playbackAdapters.forEach(function (adapter) { return strategy._availableAdapters.push(new adapter(strategy._eventEmitter)); }); strategy.connectAdapter('http://www.dash.com/dash.mpd'); (0, chai_1.expect)(strategy.attachedAdapter.mediaStreamType).to.be.equal(constants_1.MediaStreamType.DASH); strategy.connectAdapter('http://www.hls.com/hls.m3u8'); (0, chai_1.expect)(strategy.attachedAdapter.mediaStreamType).to.be.equal(constants_1.MediaStreamType.HLS); strategy.connectAdapter({ url: 'http://www.mp4.com/mp4.mp4', type: constants_1.MediaStreamType.MP4, }); }); it('should choose proper media stream based on priority', function () { playbackAdapters = [ (0, native_1.default)(constants_1.MediaStreamType.DASH, constants_1.MediaStreamDeliveryPriority.NATIVE_PROGRESSIVE), (0, native_1.default)(constants_1.MediaStreamType.DASH, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), ]; playbackAdapters.forEach(function (adapter) { return strategy._availableAdapters.push(new adapter(strategy._eventEmitter)); }); strategy.connectAdapter('http://www.dash.com/dash.mpd'); (0, chai_1.expect)(strategy.attachedAdapter.mediaStreamDeliveryPriority).to.be.equal(constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE); playbackAdapters = [ (0, native_1.default)(constants_1.MediaStreamType.HLS, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), (0, native_1.default)(constants_1.MediaStreamType.HLS, constants_1.MediaStreamDeliveryPriority.NATIVE_PROGRESSIVE), ]; playbackAdapters.forEach(function (adapter) { return strategy._availableAdapters.push(new adapter(strategy._eventEmitter)); }); strategy.connectAdapter('http://www.hls.com/hls.m3u8'); (0, chai_1.expect)(strategy.attachedAdapter.mediaStreamDeliveryPriority).to.be.equal(constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE); }); it('should detach current stream on changing of stream and destroy', function () { playbackAdapters = [ (0, native_1.default)(constants_1.MediaStreamType.DASH, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), ]; playbackAdapters.forEach(function (adapter) { return strategy._availableAdapters.push(new adapter(strategy._eventEmitter)); }); strategy.connectAdapter('http://www.dash.com/dash.mpd'); var attachedAdapter = strategy.attachedAdapter; sinon.spy(attachedAdapter, 'detach'); strategy.connectAdapter('http://www.dash.com/dash2.mpd'); (0, chai_1.expect)(attachedAdapter.detach.called).to.be.true; }); it('should detach current stream on destroy', function () { playbackAdapters = [ (0, native_1.default)(constants_1.MediaStreamType.DASH, constants_1.MediaStreamDeliveryPriority.NATIVE_ADAPTIVE), ]; // @ts-ignore playbackAdapters.forEach(function (adapter) { return strategy._availableAdapters.push(new adapter(strategy._eventEmitter)); }); strategy.connectAdapter('http://www.dash.com/dash.mpd'); var attachedAdapter = strategy.attachedAdapter; sinon.spy(attachedAdapter, 'detach'); strategy.destroy(); (0, chai_1.expect)(attachedAdapter.detach.called).to.be.true; }); }); //# sourceMappingURL=adapters-strategy.spec.js.map