videogular2
Version:
Videogular is a video application framework for desktop and mobile powered by Angular 2.0
95 lines • 17.1 kB
JavaScript
;
var core_1 = require("@angular/core");
var vg_fullscreen_api_1 = require("./vg-fullscreen-api");
var vg_utils_1 = require("./vg-utils");
describe('Videogular Player', function () {
var medias;
var elem;
var fsAPI;
beforeEach(function () {
medias = new core_1.QueryList();
elem = document.createElement('video');
fsAPI = new vg_fullscreen_api_1.VgFullscreenAPI();
fsAPI.isAvailable = true;
fsAPI.nativeFullscreen = true;
fsAPI.init(elem, medias);
});
it('Should create polyfills on init', function () {
expect(fsAPI.polyfill.enabled).toBe('webkitFullscreenEnabled');
expect(fsAPI.polyfill.element).toBe('webkitFullscreenElement');
expect(fsAPI.polyfill.request).toBe('webkitRequestFullscreen');
expect(fsAPI.polyfill.exit).toBe('webkitExitFullscreen');
expect(fsAPI.polyfill.onchange).toBe('webkitfullscreenchange');
expect(fsAPI.polyfill.onerror).toBe('webkitfullscreenerror');
});
it('Should request an element to enter in fullscreen mode (desktop)', function () {
spyOn(fsAPI, 'enterElementInFullScreen').and.callFake(function () { });
fsAPI.request(null);
expect(fsAPI.isFullscreen).toBeTruthy();
expect(fsAPI.enterElementInFullScreen).toHaveBeenCalledWith(elem);
});
it('Should request an element to enter in fullscreen mode (mobile)', function () {
spyOn(vg_utils_1.VgUtils, 'isMobileDevice').and.callFake(function () { return true; });
spyOn(fsAPI, 'enterElementInFullScreen').and.callFake(function () { });
fsAPI.request(null);
expect(fsAPI.isFullscreen).toBeTruthy();
expect(vg_utils_1.VgUtils.isMobileDevice).toHaveBeenCalled();
expect(fsAPI.enterElementInFullScreen).toHaveBeenCalledWith(elem);
});
it('Should request an element to enter in fullscreen mode (mobile with param elem)', function () {
spyOn(vg_utils_1.VgUtils, 'isMobileDevice').and.callFake(function () { return true; });
spyOn(fsAPI, 'enterElementInFullScreen').and.callFake(function () { });
fsAPI.request(elem);
expect(fsAPI.isFullscreen).toBeTruthy();
expect(vg_utils_1.VgUtils.isMobileDevice).toHaveBeenCalled();
expect(fsAPI.enterElementInFullScreen).toHaveBeenCalledWith(elem);
});
it('Should not request an element to enter in fullscreen mode', function () {
spyOn(fsAPI, 'enterElementInFullScreen').and.callFake(function () { });
fsAPI.nativeFullscreen = false;
fsAPI.request(elem);
expect(fsAPI.enterElementInFullScreen).not.toHaveBeenCalled();
});
it('Should enter in fullscreen mode', function () {
spyOn(elem, 'webkitRequestFullscreen').and.callThrough();
fsAPI.enterElementInFullScreen(elem);
expect(elem.webkitRequestFullscreen).toHaveBeenCalled();
});
it('Should request an element to exit from fullscreen mode (native)', function () {
fsAPI.polyfill.exit = 'mockedExitFunction';
document.mockedExitFunction = function () { };
spyOn(document, 'mockedExitFunction').and.callThrough();
fsAPI.exit();
expect(fsAPI.isFullscreen).toBeFalsy();
expect(document.mockedExitFunction).toHaveBeenCalled();
});
it('Should request an element to exit from fullscreen mode (emulated)', function () {
fsAPI.polyfill.exit = 'mockedExitFunction';
document.mockedExitFunction = function () { };
spyOn(document, 'mockedExitFunction').and.callThrough();
fsAPI.nativeFullscreen = false;
fsAPI.exit();
expect(fsAPI.isFullscreen).toBeFalsy();
expect(document.mockedExitFunction).not.toHaveBeenCalled();
});
it('Should enter videogular element to fullscreen mode', function () {
fsAPI.videogularElement = { id: 'vgElem' };
spyOn(fsAPI, 'request').and.callFake(function () { });
fsAPI.toggleFullscreen();
expect(fsAPI.request).toHaveBeenCalledWith(null);
});
it('Should enter other element to fullscreen mode', function () {
var element = { id: 'main' };
fsAPI.videogularElement = { id: 'vgElem' };
spyOn(fsAPI, 'request').and.callFake(function () { });
fsAPI.toggleFullscreen(element);
expect(fsAPI.request).toHaveBeenCalledWith(element);
});
it('Should exit from fullscreen mode', function () {
fsAPI.isFullscreen = true;
spyOn(fsAPI, 'exit').and.callFake(function () { });
fsAPI.toggleFullscreen();
expect(fsAPI.exit).toHaveBeenCalled();
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctZnVsbHNjcmVlbi1hcGkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZnLWZ1bGxzY3JlZW4tYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFCQUF3QixlQUFlLENBQUMsQ0FBQTtBQUN4QyxrQ0FBOEIscUJBQXFCLENBQUMsQ0FBQTtBQUVwRCx5QkFBc0IsWUFBWSxDQUFDLENBQUE7QUFFbkMsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzFCLElBQUksTUFBcUIsQ0FBQztJQUMxQixJQUFJLElBQWdCLENBQUM7SUFDckIsSUFBSSxLQUFzQixDQUFDO0lBRTNCLFVBQVUsQ0FBQztRQUNQLE1BQU0sR0FBRyxJQUFJLGdCQUFTLEVBQUUsQ0FBQztRQUN6QixJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QyxLQUFLLEdBQUcsSUFBSSxtQ0FBZSxFQUFFLENBQUM7UUFDOUIsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDekIsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMs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QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtRdWVyeUxpc3R9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1ZnRnVsbHNjcmVlbkFQSX0gZnJvbSBcIi4vdmctZnVsbHNjcmVlbi1hcGlcIjtcbmltcG9ydCB7VmdNZWRpYX0gZnJvbSBcIi4uL3ZnLW1lZGlhL3ZnLW1lZGlhXCI7XG5pbXBvcnQge1ZnVXRpbHN9IGZyb20gXCIuL3ZnLXV0aWxzXCI7XG5cbmRlc2NyaWJlKCdWaWRlb2d1bGFyIFBsYXllcicsICgpID0+IHtcbiAgICBsZXQgbWVkaWFzOlF1ZXJ5TGlzdDxhbnk+O1xuICAgIGxldCBlbGVtOkhUTUxFbGVtZW50O1xuICAgIGxldCBmc0FQSTogVmdGdWxsc2NyZWVuQVBJO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIG1lZGlhcyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAgICAgZnNBUEkgPSBuZXcgVmdGdWxsc2NyZWVuQVBJKCk7XG4gICAgICAgIGZzQVBJLmlzQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgZnNBUEkubmF0aXZlRnVsbHNjcmVlbiA9IHRydWU7XG4gICAgICAgIGZzQVBJLmluaXQoZWxlbSwgbWVkaWFzKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgY3JlYXRlIHBvbHlmaWxscyBvbiBpbml0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZnNBUEkucG9seWZpbGwuZW5hYmxlZCkudG9CZSgnd2Via2l0RnVsbHNjcmVlbkVuYWJsZWQnKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLnBvbHlmaWxsLmVsZW1lbnQpLnRvQmUoJ3dlYmtpdEZ1bGxzY3JlZW5FbGVtZW50Jyk7XG4gICAgICAgIGV4cGVjdChmc0FQSS5wb2x5ZmlsbC5yZXF1ZXN0KS50b0JlKCd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbicpO1xuICAgICAgICBleHBlY3QoZnNBUEkucG9seWZpbGwuZXhpdCkudG9CZSgnd2Via2l0RXhpdEZ1bGxzY3JlZW4nKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLnBvbHlmaWxsLm9uY2hhbmdlKS50b0JlKCd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJyk7XG4gICAgICAgIGV4cGVjdChmc0FQSS5wb2x5ZmlsbC5vbmVycm9yKS50b0JlKCd3ZWJraXRmdWxsc2NyZWVuZXJyb3InKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVxdWVzdCBhbiBlbGVtZW50IHRvIGVudGVyIGluIGZ1bGxzY3JlZW4gbW9kZSAoZGVza3RvcCknLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKGZzQVBJLCAnZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuJykuYW5kLmNhbGxGYWtlKCgpID0+IHt9KTtcblxuICAgICAgICBmc0FQSS5yZXF1ZXN0KG51bGwpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5pc0Z1bGxzY3JlZW4pLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLmVudGVyRWxlbWVudEluRnVsbFNjcmVlbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZWxlbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlcXVlc3QgYW4gZWxlbWVudCB0byBlbnRlciBpbiBmdWxsc2NyZWVuIG1vZGUgKG1vYmlsZSknLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKFZnVXRpbHMsICdpc01vYmlsZURldmljZScpLmFuZC5jYWxsRmFrZSgoKSA9PiB7cmV0dXJuIHRydWU7fSk7XG4gICAgICAgIHNweU9uKGZzQVBJLCAnZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuJykuYW5kLmNhbGxGYWtlKCgpID0+IHt9KTtcblxuICAgICAgICBmc0FQSS5yZXF1ZXN0KG51bGwpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5pc0Z1bGxzY3JlZW4pLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KFZnVXRpbHMuaXNNb2JpbGVEZXZpY2UpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLmVudGVyRWxlbWVudEluRnVsbFNjcmVlbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZWxlbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlcXVlc3QgYW4gZWxlbWVudCB0byBlbnRlciBpbiBmdWxsc2NyZWVuIG1vZGUgKG1vYmlsZSB3aXRoIHBhcmFtIGVsZW0pJywgKCkgPT4ge1xuICAgICAgICBzcHlPbihWZ1V0aWxzLCAnaXNNb2JpbGVEZXZpY2UnKS5hbmQuY2FsbEZha2UoKCkgPT4ge3JldHVybiB0cnVlO30pO1xuICAgICAgICBzcHlPbihmc0FQSSwgJ2VudGVyRWxlbWVudEluRnVsbFNjcmVlbicpLmFuZC5jYWxsRmFrZSgoKSA9PiB7fSk7XG5cbiAgICAgICAgZnNBUEkucmVxdWVzdChlbGVtKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkuaXNGdWxsc2NyZWVuKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGV4cGVjdChWZ1V0aWxzLmlzTW9iaWxlRGV2aWNlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIGV4cGVjdChmc0FQSS5lbnRlckVsZW1lbnRJbkZ1bGxTY3JlZW4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGVsZW0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBub3QgcmVxdWVzdCBhbiBlbGVtZW50IHRvIGVudGVyIGluIGZ1bGxzY3JlZW4gbW9kZScsICgpID0+IHtcbiAgICAgICAgc3B5T24oZnNBUEksICdlbnRlckVsZW1lbnRJbkZ1bGxTY3JlZW4nKS5hbmQuY2FsbEZha2UoKCkgPT4ge30pO1xuXG4gICAgICAgIGZzQVBJLm5hdGl2ZUZ1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZnNBUEkucmVxdWVzdChlbGVtKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkuZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBlbnRlciBpbiBmdWxsc2NyZWVuIG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKDxhbnk+ZWxlbSwgJ3dlYmtpdFJlcXVlc3RGdWxsc2NyZWVuJykuYW5kLmNhbGxUaHJvdWdoKCk7XG5cbiAgICAgICAgZnNBUEkuZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuKGVsZW0pO1xuXG4gICAgICAgIGV4cGVjdCgoPGFueT5lbGVtKS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCByZXF1ZXN0IGFuIGVsZW1lbnQgdG8gZXhpdCBmcm9tIGZ1bGxzY3JlZW4gbW9kZSAobmF0aXZlKScsICgpID0+IHtcbiAgICAgICAgZnNBUEkucG9seWZpbGwuZXhpdCA9ICdtb2NrZWRFeGl0RnVuY3Rpb24nO1xuXG4gICAgICAgICg8YW55PmRvY3VtZW50KS5tb2NrZWRFeGl0RnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgICAgICBzcHlPbihkb2N1bWVudCwgJ21vY2tlZEV4aXRGdW5jdGlvbicpLmFuZC5jYWxsVGhyb3VnaCgpO1xuXG4gICAgICAgIGZzQVBJLmV4aXQoKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkuaXNGdWxsc2NyZWVuKS50b0JlRmFsc3koKTtcbiAgICAgICAgZXhwZWN0KCg8YW55PmRvY3VtZW50KS5tb2NrZWRFeGl0RnVuY3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVxdWVzdCBhbiBlbGVtZW50IHRvIGV4aXQgZnJvbSBmdWxsc2NyZWVuIG1vZGUgKGVtdWxhdGVkKScsICgpID0+IHtcbiAgICAgICAgZnNBUEkucG9seWZpbGwuZXhpdCA9ICdtb2NrZWRFeGl0RnVuY3Rpb24nO1xuXG4gICAgICAgICg8YW55PmRvY3VtZW50KS5tb2NrZWRFeGl0RnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgICAgICBzcHlPbihkb2N1bWVudCwgJ21vY2tlZEV4aXRGdW5jdGlvbicpLmFuZC5jYWxsVGhyb3VnaCgpO1xuXG4gICAgICAgIGZzQVBJLm5hdGl2ZUZ1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZnNBUEkuZXhpdCgpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5pc0Z1bGxzY3JlZW4pLnRvQmVGYWxzeSgpO1xuICAgICAgICBleHBlY3QoKDxhbnk+ZG9jdW1lbnQpLm1vY2tlZEV4aXRGdW5jdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgZW50ZXIgdmlkZW9ndWxhciBlbGVtZW50IHRvIGZ1bGxzY3JlZW4gbW9kZScsICgpID0+IHtcbiAgICAgICAgZnNBUEkudmlkZW9ndWxhckVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+e2lkOiAndmdFbGVtJ307XG5cbiAgICAgICAgc3B5T24oZnNBUEksICdyZXF1ZXN0JykuYW5kLmNhbGxGYWtlKCgpID0+IHt9KTtcblxuICAgICAgICBmc0FQSS50b2dnbGVGdWxsc2NyZWVuKCk7XG5cbiAgICAgICAgZXhwZWN0KGZzQVBJLnJlcXVlc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBlbnRlciBvdGhlciBlbGVtZW50IHRvIGZ1bGxzY3JlZW4gbW9kZScsICgpID0+IHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB7aWQ6ICdtYWluJ307XG5cbiAgICAgICAgZnNBUEkudmlkZW9ndWxhckVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+e2lkOiAndmdFbGVtJ307XG5cbiAgICAgICAgc3B5T24oZnNBUEksICdyZXF1ZXN0JykuYW5kLmNhbGxGYWtlKCgpID0+IHt9KTtcblxuICAgICAgICBmc0FQSS50b2dnbGVGdWxsc2NyZWVuKGVsZW1lbnQpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5yZXF1ZXN0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgZXhpdCBmcm9tIGZ1bGxzY3JlZW4gbW9kZScsICgpID0+IHtcbiAgICAgICAgZnNBUEkuaXNGdWxsc2NyZWVuID0gdHJ1ZTtcblxuICAgICAgICBzcHlPbihmc0FQSSwgJ2V4aXQnKS5hbmQuY2FsbEZha2UoKCkgPT4ge30pO1xuXG4gICAgICAgIGZzQVBJLnRvZ2dsZUZ1bGxzY3JlZW4oKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkuZXhpdCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xufSk7XG5cbmludGVyZmFjZSBEZWNvcmF0b3JJbnZvY2F0aW9uIHtcbiAgdHlwZTogRnVuY3Rpb247XG4gIGFyZ3M/OiBhbnlbXTtcbn1cbiJdfQ==