UNPKG

playable

Version:

Video player based on HTML5Video

133 lines 6.5 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 chrome_1 = (0, tslib_1.__importDefault)(require("./chrome")); describe('ChromePictureInPicture', function () { var callback = sinon.spy(); var element; var pictureInPicture; beforeEach(function () { element = document.createDocumentFragment(); pictureInPicture = new chrome_1.default(element, callback); }); afterEach(function () { callback.resetHistory(); }); describe('enable state', function () { it('should return true in native state is true', function () { document.pictureInPictureEnabled = true; (0, chai_1.expect)(pictureInPicture.isEnabled).to.be.true; }); it('should return false in native state is false', function () { document.pictureInPictureEnabled = false; (0, chai_1.expect)(pictureInPicture.isEnabled).to.be.false; }); }); describe('picture-in-picture state', function () { it('should return true in native state is true', function () { document.pictureInPictureElement = element; (0, chai_1.expect)(pictureInPicture.isInPictureInPicture).to.be.true; }); it('should return false in native state is false', function () { document.pictureInPictureElement = null; (0, chai_1.expect)(pictureInPicture.isInPictureInPicture).to.be.false; }); }); describe('method for entering picture-in-picture', function () { it('should use native method', function () { document.pictureInPictureEnabled = true; element.requestPictureInPicture = sinon.spy(function () { return Promise.resolve(); }); pictureInPicture.request(); (0, chai_1.expect)(element.requestPictureInPicture.called).to.be.true; }); it('should make postpone enter if do not have metadata', function () { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var metadataEvent; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: document.pictureInPictureEnabled = true; element.readyState = 0; metadataEvent = new Event('loadedmetadata'); element.requestPictureInPicture = function () { return Promise.reject(); }; return [4 /*yield*/, pictureInPicture.request()]; case 1: _a.sent(); return [4 /*yield*/, pictureInPicture.request()]; case 2: _a.sent(); element.requestPictureInPicture = sinon.spy(function () { return Promise.resolve(); }); element.dispatchEvent(metadataEvent); (0, chai_1.expect)(element.requestPictureInPicture.calledOnce).to.be.true; return [2 /*return*/]; } }); }); }); it('should do nothing if already in picture-in-picture', function () { element.requestPictureInPicture = sinon.spy(function () { return Promise.resolve(); }); document.pictureInPictureElement = element; pictureInPicture.request(); (0, chai_1.expect)(element.requestPictureInPicture.called).to.be.false; }); }); describe('method for exit picture-in-picture', function () { it('should use native method', function () { document.exitPictureInPicture = sinon.spy(); document.pictureInPictureElement = element; pictureInPicture.exit(); (0, chai_1.expect)(document.exitPictureInPicture .called).to.be.true; }); it('should do nothing if not in picture-in-picture', function () { document.exitPictureInPicture = sinon.spy(); document.pictureInPictureElement = null; pictureInPicture.exit(); (0, chai_1.expect)(document.exitPictureInPicture .called).to.be.false; }); }); describe('due to reaction on native picture-in-picture change', function () { it('should call callback if enter', function () { var changeEvent = new Event('enterpictureinpicture'); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.true; }); it('should call callback if exit', function () { var changeEvent = new Event('leavepictureinpicture'); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.true; }); }); describe('destroy method', function () { it('should clear loadedmetadata listener', function () { document.pictureInPictureEnabled = true; element.readyState = 0; var metadataEvent = new Event('loadedmetadata'); element.requestPictureInPicture = function () { return Promise.reject(); }; pictureInPicture.request(); element.webkitSetPresentationMode = sinon.spy(); pictureInPicture.destroy(); element.dispatchEvent(metadataEvent); (0, chai_1.expect)(element.webkitSetPresentationMode.called).to.be.false; }); it('should clear webkitbeginfullscreen listener', function () { var changeEvent = new Event('enterpictureinpicture'); element.requestPictureInPicture = function () { return Promise.reject(); }; pictureInPicture.destroy(); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.false; }); it('should clear webkitendfullscreen listener', function () { var changeEvent = new Event('leavepictureinpicture'); element.requestPictureInPicture = function () { return Promise.reject(); }; pictureInPicture.destroy(); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.false; }); }); }); //# sourceMappingURL=chrome.spec.js.map