UNPKG

videogular2

Version:

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

129 lines 16.8 kB
"use strict"; var vg_volume_1 = require("./vg-volume"); var vg_api_1 = require("../../core/services/vg-api"); describe('Volume control', function () { var vgVol; var ref; var api; beforeEach(function () { ref = { nativeElement: { getAttribute: function (name) { return name; } } }; api = new vg_api_1.VgAPI(); vgVol = new vg_volume_1.VgVolume(ref, api); }); it('Should have isDragging set to false initially', function () { expect(vgVol.isDragging).toBe(false); }); describe('onPlayerReady', function () { it('Should set vgFor', function () { vgVol.vgFor = 'test'; vgVol.onPlayerReady(); expect(vgVol.vgFor).toBe('test'); }); it('Should set target', function () { spyOn(api, 'getMediaById'); vgVol.onPlayerReady(); expect(api.getMediaById).toHaveBeenCalled(); }); }); describe('onMouseDown', function () { it('Should set isDragging to true', function () { vgVol.onMouseDown({ clientX: 0 }); expect(vgVol.isDragging).toBe(true); }); it('Should set mouseDownPosX to event.x', function () { vgVol.onMouseDown({ clientX: 99 }); expect(vgVol.mouseDownPosX).toBe(99); }); }); describe('onDrag', function () { beforeEach(function () { spyOn(vgVol, 'setVolume'); spyOn(vgVol, 'calculateVolume'); }); it('Should call setVolume when dragging', function () { vgVol.isDragging = true; vgVol.onDrag({ clientX: 0 }); expect(vgVol.setVolume).toHaveBeenCalled(); }); it('Should not call setVolume when not dragging', function () { vgVol.isDragging = false; vgVol.onDrag({ clientX: 0 }); expect(vgVol.setVolume).not.toHaveBeenCalled(); }); }); describe('onStopDrag', function () { beforeEach(function () { spyOn(vgVol, 'setVolume'); spyOn(vgVol, 'calculateVolume'); }); it('Should toggle dragging value when dragging', function () { vgVol.isDragging = true; vgVol.mouseDownPosX = 0; vgVol.onStopDrag({ clientX: 0 }); expect(vgVol.isDragging).toBe(false); }); it('Should call setVolume when dragging and x positions match', function () { vgVol.isDragging = true; vgVol.mouseDownPosX = 0; vgVol.onStopDrag({ clientX: 0 }); expect(vgVol.setVolume).toHaveBeenCalled(); }); it('Should not call setVolume when dragging but x positions dont match', function () { vgVol.isDragging = true; vgVol.mouseDownPosX = 1; vgVol.onStopDrag({ clientX: 0 }); expect(vgVol.setVolume).not.toHaveBeenCalled(); }); it('Should not call setVolume when not dragging', function () { vgVol.isDragging = false; vgVol.mouseDownPosX = 0; vgVol.onStopDrag({ clientX: 0 }); expect(vgVol.setVolume).not.toHaveBeenCalled(); }); }); describe('calculateVolume', function () { it('Shoud calculate volume based on volumeBar position', function () { // mock volumeBarRef ViewChild vgVol.volumeBarRef = { nativeElement: { getBoundingClientRect: function () { return { left: 5, width: 100 }; } } }; expect(vgVol.calculateVolume(10)).toBe(5); }); }); describe('setVolume', function () { it('Shoud convert volume to a value between 0 and 1', function () { vgVol.target = { volume: 3.33 }; vgVol.setVolume(50); expect(vgVol.target.volume).toBe(0.5); vgVol.setVolume(110); expect(vgVol.target.volume).toBe(1); vgVol.setVolume(-10); expect(vgVol.target.volume).toBe(0); }); }); describe('getVolume', function () { it('Shoud get target volume when target is set', function () { vgVol.target = { volume: 3.33 }; expect(vgVol.getVolume()).toBe(3.33); }); it('Shoud get 0 volume when target is not set', function () { vgVol.target = undefined; expect(vgVol.getVolume()).toBe(0); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctdm9sdW1lLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2Zy12b2x1bWUuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCLGFBQWEsQ0FBQyxDQUFBO0FBQ3JDLHVCQUFvQiw0QkFBNEIsQ0FBQyxDQUFBO0FBR2pELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN2QixJQUFJLEtBQWMsQ0FBQztJQUNuQixJQUFJLEdBQWMsQ0FBQztJQUNuQixJQUFJLEdBQVMsQ0FBQztJQUVkLFVBQVUsQ0FBQztRQUNQLEdBQUcsR0FBRztZQUNGLGFBQWEsRUFBRTtnQkFDWCxZQUFZLEVBQUUsVUFBQyxJQUFJO29CQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLENBQUM7YUFDSjtTQUNKLENBQUM7UUFFRixHQUFHLEdBQUcsSUFBSSxjQUFLLEVBQUUsQ0FBQztRQUNsQixLQUFLLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtRQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxlQUFlLEVBQUU7UUFDdEIsRUFBRSxDQUFDLGtCQUFrQixFQUFFO1lBQ25CLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxtQkFBbUIsRUFBRTtZQUNwQixLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzNCLEtBQUssQ0FB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LENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV0QyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ2xCLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUM3QyxLQUFLLENBQUMsTUFBTSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxJQUFJO2FBQ2YsQ0FBQztZQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDNUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ZnVm9sdW1lfSBmcm9tIFwiLi92Zy12b2x1bWVcIjtcbmltcG9ydCB7VmdBUEl9IGZyb20gXCIuLi8uLi9jb3JlL3NlcnZpY2VzL3ZnLWFwaVwiO1xuaW1wb3J0IHtFbGVtZW50UmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5kZXNjcmliZSgnVm9sdW1lIGNvbnRyb2wnLCAoKSA9PiB7XG4gICAgbGV0IHZnVm9sOlZnVm9sdW1lO1xuICAgIGxldCByZWY6RWxlbWVudFJlZjtcbiAgICBsZXQgYXBpOlZnQVBJO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHJlZiA9IHtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBhcGkgPSBuZXcgVmdBUEkoKTtcbiAgICAgICAgdmdWb2wgPSBuZXcgVmdWb2x1bWUocmVmLCBhcGkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYXZlIGlzRHJhZ2dpbmcgc2V0IHRvIGZhbHNlIGluaXRpYWxseScsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHZnVm9sLmlzRHJhZ2dpbmcpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdvblBsYXllclJlYWR5JywgKCk9PntcbiAgICAgICAgaXQoJ1Nob3VsZCBzZXQgdmdGb3InLCAoKSA9PiB7XG4gICAgICAgICAgICB2Z1ZvbC52Z0ZvciA9ICd0ZXN0JztcbiAgICAgICAgICAgIHZnVm9sLm9uUGxheWVyUmVhZHkoKTtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC52Z0ZvcikudG9CZSgndGVzdCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ1Nob3VsZCBzZXQgdGFyZ2V0JywgKCkgPT4ge1xuICAgICAgICAgICAgc3B5T24oYXBpLCAnZ2V0TWVkaWFCeUlkJyk7XG4gICAgICAgICAgICB2Z1ZvbC5vblBsYXllclJlYWR5KCk7XG4gICAgICAgICAgICBleHBlY3QoYXBpLmdldE1lZGlhQnlJZCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvbk1vdXNlRG93bicsICgpPT57XG4gICAgICAgIGl0KCdTaG91bGQgc2V0IGlzRHJhZ2dpbmcgdG8gdHJ1ZScsICgpPT57XG4gICAgICAgICAgICB2Z1ZvbC5vbk1vdXNlRG93bih7Y2xpZW50WDogMH0pO1xuICAgICAgICAgICAgZXhwZWN0KHZnVm9sLmlzRHJhZ2dpbmcpLnRvQmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnU2hvdWxkIHNldCBtb3VzZURvd25Qb3NYIHRvIGV2ZW50LngnLCAoKT0+e1xuICAgICAgICAgICAgdmdWb2wub25Nb3VzZURvd24oe2NsaWVudFg6IDk5fSk7XG4gICAgICAgICAgICBleHBlY3QodmdWb2wubW91c2VEb3duUG9zWCkudG9CZSg5OSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdvbkRyYWcnLCAoKT0+e1xuICAgICAgICBiZWZvcmVFYWNoKCgpPT57XG4gICAgICAgICAgICBzcHlPbih2Z1ZvbCwgJ3NldFZvbHVtZScpO1xuICAgICAgICAgICAgc3B5T24odmdWb2wsICdjYWxjdWxhdGVWb2x1bWUnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdTaG91bGQgY2FsbCBzZXRWb2x1bWUgd2hlbiBkcmFnZ2luZycsICgpPT57XG4gICAgICAgICAgICB2Z1ZvbC5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHZnVm9sLm9uRHJhZyh7Y2xpZW50WDogMH0pO1xuICAgICAgICAgICAgZXhwZWN0KHZnVm9sLnNldFZvbHVtZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ1Nob3VsZCBub3QgY2FsbCBzZXRWb2x1bWUgd2hlbiBub3QgZHJhZ2dpbmcnLCAoKT0+e1xuICAgICAgICAgICAgdmdWb2wuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgdmdWb2wub25EcmFnKHtjbGllbnRYOiAwfSk7XG4gICAgICAgICAgICBleHBlY3QodmdWb2wuc2V0Vm9sdW1lKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvblN0b3BEcmFnJywgKCk9PntcbiAgICAgICAgYmVmb3JlRWFjaCgoKT0+e1xuICAgICAgICAgICAgc3B5T24odmdWb2wsICdzZXRWb2x1bWUnKTtcbiAgICAgICAgICAgIHNweU9uKHZnVm9sLCAnY2FsY3VsYXRlVm9sdW1lJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnU2hvdWxkIHRvZ2dsZSBkcmFnZ2luZyB2YWx1ZSB3aGVuIGRyYWdnaW5nJywgKCk9PntcbiAgICAgICAgICAgIHZnVm9sLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdmdWb2wubW91c2VEb3duUG9zWCA9IDA7XG4gICAgICAgICAgICB2Z1ZvbC5vblN0b3BEcmFnKHtjbGllbnRYOjB9KTtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC5pc0RyYWdnaW5nKS50b0JlKGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdTaG91bGQgY2FsbCBzZXRWb2x1bWUgd2hlbiBkcmFnZ2luZyBhbmQgeCBwb3NpdGlvbnMgbWF0Y2gnLCAoKT0+e1xuICAgICAgICAgICAgdmdWb2wuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB2Z1ZvbC5tb3VzZURvd25Qb3NYID0gMDtcbiAgICAgICAgICAgIHZnVm9sLm9uU3RvcERyYWcoe2NsaWVudFg6MH0pO1xuICAgICAgICAgICAgZXhwZWN0KHZnVm9sLnNldFZvbHVtZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ1Nob3VsZCBub3QgY2FsbCBzZXRWb2x1bWUgd2hlbiBkcmFnZ2luZyBidXQgeCBwb3NpdGlvbnMgZG9udCBtYXRjaCcsICgpPT57XG4gICAgICAgICAgICB2Z1ZvbC5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHZnVm9sLm1vdXNlRG93blBvc1ggPSAxO1xuICAgICAgICAgICAgdmdWb2wub25TdG9wRHJhZyh7Y2xpZW50WDowfSk7XG4gICAgICAgICAgICBleHBlY3QodmdWb2wuc2V0Vm9sdW1lKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ1Nob3VsZCBub3QgY2FsbCBzZXRWb2x1bWUgd2hlbiBub3QgZHJhZ2dpbmcnLCAoKT0+e1xuICAgICAgICAgICAgdmdWb2wuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgdmdWb2wubW91c2VEb3duUG9zWCA9IDA7XG4gICAgICAgICAgICB2Z1ZvbC5vblN0b3BEcmFnKHtjbGllbnRYOjB9KTtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC5zZXRWb2x1bWUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NhbGN1bGF0ZVZvbHVtZScsICgpPT57XG4gICAgICAgIGl0KCdTaG91ZCBjYWxjdWxhdGUgdm9sdW1lIGJhc2VkIG9uIHZvbHVtZUJhciBwb3NpdGlvbicsICgpPT57XG4gICAgICAgICAgICAvLyBtb2NrIHZvbHVtZUJhclJlZiBWaWV3Q2hpbGRcbiAgICAgICAgICAgIHZnVm9sLnZvbHVtZUJhclJlZiA9IHtcbiAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudDoge1xuICAgICAgICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7IGxlZnQ6IDUsIHdpZHRoOiAxMDAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC5jYWxjdWxhdGVWb2x1bWUoMTApKS50b0JlKDUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRWb2x1bWUnLCAoKT0+e1xuICAgICAgICBpdCgnU2hvdWQgY29udmVydCB2b2x1bWUgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEnLCAoKT0+e1xuICAgICAgICAgICAgdmdWb2wudGFyZ2V0ID0ge1xuICAgICAgICAgICAgICAgIHZvbHVtZTogMy4zM1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZnVm9sLnNldFZvbHVtZSg1MCk7XG4gICAgICAgICAgICBleHBlY3QodmdWb2wudGFyZ2V0LnZvbHVtZSkudG9CZSgwLjUpO1xuXG4gICAgICAgICAgICB2Z1ZvbC5zZXRWb2x1bWUoMTEwKTtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC50YXJnZXQudm9sdW1lKS50b0JlKDEpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2Z1ZvbC5zZXRWb2x1bWUoLTEwKTtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC50YXJnZXQudm9sdW1lKS50b0JlKDApO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnZ2V0Vm9sdW1lJywgKCk9PntcbiAgICAgICAgaXQoJ1Nob3VkIGdldCB0YXJnZXQgdm9sdW1lIHdoZW4gdGFyZ2V0IGlzIHNldCcsICgpPT57XG4gICAgICAgICAgICB2Z1ZvbC50YXJnZXQgPSB7XG4gICAgICAgICAgICAgICAgdm9sdW1lOiAzLjMzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZXhwZWN0KHZnVm9sLmdldFZvbHVtZSgpKS50b0JlKDMuMzMpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ1Nob3VkIGdldCAwIHZvbHVtZSB3aGVuIHRhcmdldCBpcyBub3Qgc2V0JywgKCk9PntcbiAgICAgICAgICAgIHZnVm9sLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGV4cGVjdCh2Z1ZvbC5nZXRWb2x1bWUoKSkudG9CZSgwKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcblxuaW50ZXJmYWNlIERlY29yYXRvckludm9jYXRpb24ge1xuICB0eXBlOiBGdW5jdGlvbjtcbiAgYXJncz86IGFueVtdO1xufVxuIl19