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