UNPKG

playable

Version:

Video player based on HTML5Video

234 lines 9.99 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 config_1 = (0, tslib_1.__importDefault)(require("./config")); var player_facade_1 = (0, tslib_1.__importDefault)(require("./player-facade")); var dependency_container_1 = (0, tslib_1.__importDefault)(require("./dependency-container")); var player_api_decorator_1 = (0, tslib_1.__importDefault)(require("../core/player-api-decorator")); describe("Player's instance", function () { var container; var player; var defaultModules; var additionalModules; beforeEach(function () { container = dependency_container_1.default.createContainer(); }); describe('rootNode and params', function () { it('should be registered and resolved', function () { var registerValueSpy = sinon.spy(container, 'registerValue'); var params = {}; player = new player_facade_1.default({}, container, []); (0, chai_1.expect)(registerValueSpy.calledWith({ config: (0, config_1.default)(params), })).to.be.true; }); it('should be resolved', function () { var resolveSpy = sinon.spy(container, 'resolve'); player = new player_facade_1.default({}, container, []); (0, chai_1.expect)(resolveSpy.args).to.deep.equal([['config']]); }); }); describe('default modules', function () { it('should be resolved', function () { var ClassA = /** @class */ (function () { function ClassA() { } return ClassA; }()); var resolveSpy = sinon.spy(container, 'resolve'); defaultModules = { ClassA: ClassA, }; container.registerClass('ClassA', ClassA); player = new player_facade_1.default({}, container, Object.keys(defaultModules)); (0, chai_1.expect)(resolveSpy.calledWith('ClassA')).to.be.true; }); it('should call destroy on player destroy', function () { var destroySpy = sinon.spy(); var ClassA = /** @class */ (function () { function ClassA() { } ClassA.prototype.destroy = function () { destroySpy(); }; return ClassA; }()); defaultModules = { ClassA: ClassA, }; container.registerClass('ClassA', ClassA); player = new player_facade_1.default({}, container, Object.keys(defaultModules)); player.destroy(); (0, chai_1.expect)(destroySpy.called).to.be.true; }); }); describe('additional modules', function () { it('should be resolved', function () { var ClassB = /** @class */ (function () { function ClassB() { } return ClassB; }()); var resolveSpy = sinon.spy(container, 'resolve'); container.registerClass('ClassB', ClassB); player = new player_facade_1.default({}, container, [], ['ClassB']); (0, chai_1.expect)(resolveSpy.calledWith('ClassB')).to.be.true; }); it('should call destroy on player destroy', function () { var destroySpy = sinon.spy(); var ClassA = /** @class */ (function () { function ClassA() { } ClassA.prototype.destroy = function () { destroySpy(); }; return ClassA; }()); container.registerClass('ClassA', ClassA); player = new player_facade_1.default({}, container, [], ['ClassA']); player.destroy(); (0, chai_1.expect)(destroySpy.called).to.be.true; }); }); describe('public API', function () { var ClassA; var ClassB; var ClassC; var methodASpy; var methodBSpy; beforeEach(function () { methodASpy = sinon.spy(); methodBSpy = sinon.spy(); var A = /** @class */ (function () { function A() { } A.prototype.methodA = function () { methodASpy(); }; Object.defineProperty(A.prototype, "methodC", { get: function () { return; }, set: function (_) { }, enumerable: false, configurable: true }); A.prototype.destroy = function () { }; (0, tslib_1.__decorate)([ (0, player_api_decorator_1.default)() ], A.prototype, "methodA", null); (0, tslib_1.__decorate)([ (0, player_api_decorator_1.default)() ], A.prototype, "methodC", null); return A; }()); var B = /** @class */ (function () { function B() { } B.prototype.methodB = function () { methodBSpy(); }; B.prototype.destroy = function () { }; (0, tslib_1.__decorate)([ (0, player_api_decorator_1.default)() ], B.prototype, "methodB", null); return B; }()); var C = /** @class */ (function () { function C() { } C.prototype.methodA = function () { }; C.prototype.destroy = function () { }; (0, tslib_1.__decorate)([ (0, player_api_decorator_1.default)('methodA') ], C.prototype, "methodA", null); return C; }()); ClassA = A; ClassB = B; ClassC = C; }); it('should be constructed from default modules', function () { container.registerClass('ClassA', ClassA); defaultModules = { ClassA: ClassA, }; player = new player_facade_1.default({}, container, Object.keys(defaultModules)); (0, chai_1.expect)(Reflect.has(player, 'methodA')).to.be.true; (0, chai_1.expect)(Reflect.has(player, 'methodB')).to.be.false; (0, chai_1.expect)(Reflect.has(player, 'methodC')).to.be.true; container.registerClass('ClassB', ClassB); defaultModules = { ClassA: ClassA, ClassB: ClassB, }; player = new player_facade_1.default({}, container, Object.keys(defaultModules)); (0, chai_1.expect)(Reflect.has(player, 'methodA')).to.be.true; (0, chai_1.expect)(Reflect.has(player, 'methodB')).to.be.true; }); it('should be constructed from additional modules', function () { container.registerClass('ClassA', ClassA); defaultModules = { ClassA: ClassA, }; additionalModules = { ClassA: ClassA, }; player = new player_facade_1.default({}, container, Object.keys(defaultModules), Object.keys(additionalModules)); (0, chai_1.expect)(Reflect.has(player, 'methodA')).to.be.true; (0, chai_1.expect)(Reflect.has(player, 'methodC')).to.be.true; }); it('methods should call proper methods from modules', function () { defaultModules = { ClassA: ClassA, }; additionalModules = { ClassB: ClassB, }; container.registerClass('ClassA', ClassA); container.registerClass('ClassB', ClassB); player = new player_facade_1.default({}, container, Object.keys(defaultModules), Object.keys(additionalModules)); player.methodA(); player.methodB(); (0, chai_1.expect)(methodASpy.called).to.be.true; (0, chai_1.expect)(methodBSpy.called).to.be.true; }); it('should throw error on duplicate method in API', function () { defaultModules = { ClassA: ClassA, ClassC: ClassC, }; container.registerClass('ClassA', ClassA); container.registerClass('ClassC', ClassC); var getDuplicateAPIMethodPlayer = function () { return new player_facade_1.default({}, container, Object.keys(defaultModules)); }; (0, chai_1.expect)(getDuplicateAPIMethodPlayer).to.throw('API method methodA is already defined in Player facade'); }); describe('when instance destroyed', function () { it('should clear instance', function () { defaultModules = { ClassA: ClassA, }; container.registerClass('ClassA', ClassA); player = new player_facade_1.default({}, container, Object.keys(defaultModules)); player.destroy(); (0, chai_1.expect)(Reflect.has(player, 'methodA')).to.be.false; }); it('should not broadcast call methods of module', function () { defaultModules = { ClassA: ClassA, }; container.registerClass('ClassA', ClassA); player = new player_facade_1.default({}, container, Object.keys(defaultModules)); var methodA = player.methodA; player.destroy(); (0, chai_1.expect)(methodA).to.throw('Player instance is destroyed'); }); }); }); }); //# sourceMappingURL=player-facade.spec.js.map