UNPKG

playable

Version:

Video player based on HTML5Video

115 lines 5.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 safari_1 = (0, tslib_1.__importStar)(require("./safari")); describe('SafariPictureInPicture', function () { var callback = sinon.spy(); var element; var pictureInPicture; beforeEach(function () { element = document.createDocumentFragment(); pictureInPicture = new safari_1.default(element, callback); }); afterEach(function () { callback.resetHistory(); }); describe('enable state', function () { it('should return true in native state is true', function () { element.webkitSetPresentationMode = function () { }; (0, chai_1.expect)(pictureInPicture.isEnabled).to.be.true; }); it('should return false in native state is false', function () { element.webkitSetPresentationMode = 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 () { element.webkitPresentationMode = safari_1.PICTURE_IN_PICTURE_MODE; (0, chai_1.expect)(pictureInPicture.isInPictureInPicture).to.be.true; }); it('should return false in native state is false', function () { element.webkitPresentationMode = safari_1.INLINE_MODE; (0, chai_1.expect)(pictureInPicture.isInPictureInPicture).to.be.false; }); }); describe('method for entering picture-in-picture', function () { it('should use native method', function () { element.webkitSetPresentationMode = sinon.spy(); pictureInPicture.request(); (0, chai_1.expect)(element.webkitSetPresentationMode.calledWith(safari_1.PICTURE_IN_PICTURE_MODE)).to.be.true; }); it('should make postpone enter if do not have metadata', function () { element.readyState = 0; var metadataEvent = new Event('loadedmetadata'); element.webkitSetPresentationMode = function () { throw new Error('Catch'); }; pictureInPicture.request(); pictureInPicture.request(); element.webkitSetPresentationMode = sinon.spy(); element.dispatchEvent(metadataEvent); (0, chai_1.expect)(element.webkitSetPresentationMode.calledOnce).to.be.true; }); it('should do nothing if already in picture-in-picture', function () { element.webkitSetPresentationMode = sinon.spy(); element.webkitPresentationMode = safari_1.PICTURE_IN_PICTURE_MODE; pictureInPicture.request(); (0, chai_1.expect)(element.webkitSetPresentationMode.called).to.be.false; }); }); describe('method for exit picture-in-picture', function () { it('should use native method', function () { element.webkitSetPresentationMode = sinon.spy(); element.webkitPresentationMode = safari_1.PICTURE_IN_PICTURE_MODE; pictureInPicture.exit(); (0, chai_1.expect)(element.webkitSetPresentationMode.calledWith(safari_1.INLINE_MODE)).to.be .true; }); it('should do nothing if not in picture-in-picture', function () { element.webkitSetPresentationMode = sinon.spy(); element.webkitPresentationMode = safari_1.INLINE_MODE; pictureInPicture.exit(); (0, chai_1.expect)(element.webkitSetPresentationMode.called).to.be.false; }); }); describe('due to reaction on native picture-in-picture change', function () { it('should call callback if changed', function () { var changeEvent = new Event('webkitpresentationmodechanged'); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.true; }); }); describe('destroy method', function () { it('should clear loadedmetadata listener', function () { var metadataEvent = new Event('loadedmetadata'); element.readyState = 0; element.webkitSetPresentationMode = function () { throw new Error('Catch'); }; 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('webkitpresentationmodechanged'); element.webkitSetPresentationMode = sinon.spy(); pictureInPicture.destroy(); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.false; }); it('should clear webkitendfullscreen listener', function () { var changeEvent = new Event('webkitpresentationmodechanged'); element.webkitSetPresentationMode = sinon.spy(); pictureInPicture.destroy(); element.dispatchEvent(changeEvent); (0, chai_1.expect)(callback.called).to.be.false; }); }); }); //# sourceMappingURL=safari.spec.js.map