videogular2
Version:
Videogular is a video application framework for desktop and mobile powered by Angular 2.0
129 lines • 16.8 kB
JavaScript
;
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