UNPKG

videogular2

Version:

Videogular is a video application framework for desktop and mobile powered by Angular

96 lines 16.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 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('fullscreenEnabled'); expect(fsAPI.polyfill.element).toBe('fullscreenElement'); expect(fsAPI.polyfill.request).toBe('requestFullscreen'); expect(fsAPI.polyfill.exit).toBe('exitFullscreen'); expect(fsAPI.polyfill.onchange).toBe('fullscreenchange'); expect(fsAPI.polyfill.onerror).toBe('fullscreenerror'); }); 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, 'requestFullscreen').and.callThrough(); fsAPI.enterElementInFullScreen(elem); expect(elem.requestFullscreen).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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctZnVsbHNjcmVlbi1hcGkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3NlcnZpY2VzL3ZnLWZ1bGxzY3JlZW4tYXBpLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBd0M7QUFDeEMseURBQW9EO0FBQ3BELHVDQUFtQztBQUVuQyxRQUFRLENBQUMsbUJBQW1CLEVBQUU7SUFDMUIsSUFBSSxNQUFxQixDQUFDO0lBQzFCLElBQUksSUFBZ0IsQ0FBQztJQUNyQixJQUFJLEtBQXNCLENBQUM7SUFFM0IsVUFBVSxDQUFDO1FBQ1AsTUFBTSxHQUFHLElBQUksZ0JBQVMsRUFBRSxDQUFDO1FBQ3pCLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLEtBQUssR0FBRyxJQUFJLG1DQUFlLEVBQUUsQ0FBQztRQUM5QixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN6QixLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxn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ImltcG9ydCB7UXVlcnlMaXN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtWZ0Z1bGxzY3JlZW5BUEl9IGZyb20gXCIuL3ZnLWZ1bGxzY3JlZW4tYXBpXCI7XG5pbXBvcnQge1ZnVXRpbHN9IGZyb20gXCIuL3ZnLXV0aWxzXCI7XG5cbmRlc2NyaWJlKCdWaWRlb2d1bGFyIFBsYXllcicsICgpID0+IHtcbiAgICBsZXQgbWVkaWFzOlF1ZXJ5TGlzdDxhbnk+O1xuICAgIGxldCBlbGVtOkhUTUxFbGVtZW50O1xuICAgIGxldCBmc0FQSTogVmdGdWxsc2NyZWVuQVBJO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIG1lZGlhcyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG5cbiAgICAgICAgZnNBUEkgPSBuZXcgVmdGdWxsc2NyZWVuQVBJKCk7XG4gICAgICAgIGZzQVBJLmlzQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgZnNBUEkubmF0aXZlRnVsbHNjcmVlbiA9IHRydWU7XG4gICAgICAgIGZzQVBJLmluaXQoZWxlbSwgbWVkaWFzKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgY3JlYXRlIHBvbHlmaWxscyBvbiBpbml0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZnNBUEkucG9seWZpbGwuZW5hYmxlZCkudG9CZSgnZnVsbHNjcmVlbkVuYWJsZWQnKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLnBvbHlmaWxsLmVsZW1lbnQpLnRvQmUoJ2Z1bGxzY3JlZW5FbGVtZW50Jyk7XG4gICAgICAgIGV4cGVjdChmc0FQSS5wb2x5ZmlsbC5yZXF1ZXN0KS50b0JlKCdyZXF1ZXN0RnVsbHNjcmVlbicpO1xuICAgICAgICBleHBlY3QoZnNBUEkucG9seWZpbGwuZXhpdCkudG9CZSgnZXhpdEZ1bGxzY3JlZW4nKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLnBvbHlmaWxsLm9uY2hhbmdlKS50b0JlKCdmdWxsc2NyZWVuY2hhbmdlJyk7XG4gICAgICAgIGV4cGVjdChmc0FQSS5wb2x5ZmlsbC5vbmVycm9yKS50b0JlKCdmdWxsc2NyZWVuZXJyb3InKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVxdWVzdCBhbiBlbGVtZW50IHRvIGVudGVyIGluIGZ1bGxzY3JlZW4gbW9kZSAoZGVza3RvcCknLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKGZzQVBJLCAnZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuJykuYW5kLmNhbGxGYWtlKCgpID0+IHt9KTtcblxuICAgICAgICBmc0FQSS5yZXF1ZXN0KG51bGwpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5pc0Z1bGxzY3JlZW4pLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLmVudGVyRWxlbWVudEluRnVsbFNjcmVlbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZWxlbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlcXVlc3QgYW4gZWxlbWVudCB0byBlbnRlciBpbiBmdWxsc2NyZWVuIG1vZGUgKG1vYmlsZSknLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKFZnVXRpbHMsICdpc01vYmlsZURldmljZScpLmFuZC5jYWxsRmFrZSgoKSA9PiB7cmV0dXJuIHRydWU7fSk7XG4gICAgICAgIHNweU9uKGZzQVBJLCAnZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuJykuYW5kLmNhbGxGYWtlKCgpID0+IHt9KTtcblxuICAgICAgICBmc0FQSS5yZXF1ZXN0KG51bGwpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5pc0Z1bGxzY3JlZW4pLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KFZnVXRpbHMuaXNNb2JpbGVEZXZpY2UpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgZXhwZWN0KGZzQVBJLmVudGVyRWxlbWVudEluRnVsbFNjcmVlbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZWxlbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlcXVlc3QgYW4gZWxlbWVudCB0byBlbnRlciBpbiBmdWxsc2NyZWVuIG1vZGUgKG1vYmlsZSB3aXRoIHBhcmFtIGVsZW0pJywgKCkgPT4ge1xuICAgICAgICBzcHlPbihWZ1V0aWxzLCAnaXNNb2JpbGVEZXZpY2UnKS5hbmQuY2FsbEZha2UoKCkgPT4ge3JldHVybiB0cnVlO30pO1xuICAgICAgICBzcHlPbihmc0FQSSwgJ2VudGVyRWxlbWVudEluRnVsbFNjcmVlbicpLmFuZC5jYWxsRmFrZSgoKSA9PiB7fSk7XG5cbiAgICAgICAgZnNBUEkucmVxdWVzdChlbGVtKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkuaXNGdWxsc2NyZWVuKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGV4cGVjdChWZ1V0aWxzLmlzTW9iaWxlRGV2aWNlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIGV4cGVjdChmc0FQSS5lbnRlckVsZW1lbnRJbkZ1bGxTY3JlZW4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGVsZW0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBub3QgcmVxdWVzdCBhbiBlbGVtZW50IHRvIGVudGVyIGluIGZ1bGxzY3JlZW4gbW9kZScsICgpID0+IHtcbiAgICAgICAgc3B5T24oZnNBUEksICdlbnRlckVsZW1lbnRJbkZ1bGxTY3JlZW4nKS5hbmQuY2FsbEZha2UoKCkgPT4ge30pO1xuXG4gICAgICAgIGZzQVBJLm5hdGl2ZUZ1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgZnNBUEkucmVxdWVzdChlbGVtKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkuZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBlbnRlciBpbiBmdWxsc2NyZWVuIG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKDxhbnk+ZWxlbSwgJ3JlcXVlc3RGdWxsc2NyZWVuJykuYW5kLmNhbGxUaHJvdWdoKCk7XG5cbiAgICAgICAgZnNBUEkuZW50ZXJFbGVtZW50SW5GdWxsU2NyZWVuKGVsZW0pO1xuXG4gICAgICAgIGV4cGVjdCgoPGFueT5lbGVtKS5yZXF1ZXN0RnVsbHNjcmVlbikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCByZXF1ZXN0IGFuIGVsZW1lbnQgdG8gZXhpdCBmcm9tIGZ1bGxzY3JlZW4gbW9kZSAobmF0aXZlKScsICgpID0+IHtcbiAgICAgICAgZnNBUEkucG9seWZpbGwuZXhpdCA9ICdtb2NrZWRFeGl0RnVuY3Rpb24nO1xuXG4gICAgICAgICg8YW55PmRvY3VtZW50KS5tb2NrZWRFeGl0RnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgICAgICBzcHlPbihkb2N1bWVudCwgJ21vY2tlZEV4aXRGdW5jdGlvbicgYXMgYW55KS5hbmQuY2FsbFRocm91Z2goKTtcblxuICAgICAgICBmc0FQSS5leGl0KCk7XG5cbiAgICAgICAgZXhwZWN0KGZzQVBJLmlzRnVsbHNjcmVlbikudG9CZUZhbHN5KCk7XG4gICAgICAgIGV4cGVjdCgoPGFueT5kb2N1bWVudCkubW9ja2VkRXhpdEZ1bmN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHJlcXVlc3QgYW4gZWxlbWVudCB0byBleGl0IGZyb20gZnVsbHNjcmVlbiBtb2RlIChlbXVsYXRlZCknLCAoKSA9PiB7XG4gICAgICAgIGZzQVBJLnBvbHlmaWxsLmV4aXQgPSAnbW9ja2VkRXhpdEZ1bmN0aW9uJztcblxuICAgICAgICAoPGFueT5kb2N1bWVudCkubW9ja2VkRXhpdEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICAgICAgc3B5T24oZG9jdW1lbnQsICdtb2NrZWRFeGl0RnVuY3Rpb24nIGFzIGFueSkuYW5kLmNhbGxUaHJvdWdoKCk7XG5cbiAgICAgICAgZnNBUEkubmF0aXZlRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgICAgICBmc0FQSS5leGl0KCk7XG5cbiAgICAgICAgZXhwZWN0KGZzQVBJLmlzRnVsbHNjcmVlbikudG9CZUZhbHN5KCk7XG4gICAgICAgIGV4cGVjdCgoPGFueT5kb2N1bWVudCkubW9ja2VkRXhpdEZ1bmN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBlbnRlciB2aWRlb2d1bGFyIGVsZW1lbnQgdG8gZnVsbHNjcmVlbiBtb2RlJywgKCkgPT4ge1xuICAgICAgICBmc0FQSS52aWRlb2d1bGFyRWxlbWVudCA9IDxIVE1MRWxlbWVudD57aWQ6ICd2Z0VsZW0nfTtcblxuICAgICAgICBzcHlPbihmc0FQSSwgJ3JlcXVlc3QnKS5hbmQuY2FsbEZha2UoKCkgPT4ge30pO1xuXG4gICAgICAgIGZzQVBJLnRvZ2dsZUZ1bGxzY3JlZW4oKTtcblxuICAgICAgICBleHBlY3QoZnNBUEkucmVxdWVzdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgobnVsbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGVudGVyIG90aGVyIGVsZW1lbnQgdG8gZnVsbHNjcmVlbiBtb2RlJywgKCkgPT4ge1xuICAgICAgICBsZXQgZWxlbWVudCA9IHtpZDogJ21haW4nfTtcblxuICAgICAgICBmc0FQSS52aWRlb2d1bGFyRWxlbWVudCA9IDxIVE1MRWxlbWVudD57aWQ6ICd2Z0VsZW0nfTtcblxuICAgICAgICBzcHlPbihmc0FQSSwgJ3JlcXVlc3QnKS5hbmQuY2FsbEZha2UoKCkgPT4ge30pO1xuXG4gICAgICAgIGZzQVBJLnRvZ2dsZUZ1bGxzY3JlZW4oZWxlbWVudCk7XG5cbiAgICAgICAgZXhwZWN0KGZzQVBJLnJlcXVlc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBleGl0IGZyb20gZnVsbHNjcmVlbiBtb2RlJywgKCkgPT4ge1xuICAgICAgICBmc0FQSS5pc0Z1bGxzY3JlZW4gPSB0cnVlO1xuXG4gICAgICAgIHNweU9uKGZzQVBJLCAnZXhpdCcpLmFuZC5jYWxsRmFrZSgoKSA9PiB7fSk7XG5cbiAgICAgICAgZnNBUEkudG9nZ2xlRnVsbHNjcmVlbigpO1xuXG4gICAgICAgIGV4cGVjdChmc0FQSS5leGl0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG59KTtcbiJdfQ==