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