UNPKG

videogular2

Version:

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

203 lines 29.9 kB
"use strict"; var vg_scrub_bar_1 = require("./vg-scrub-bar"); var vg_api_1 = require("../../core/services/vg-api"); var vg_controls_hidden_1 = require('./../../core/services/vg-controls-hidden'); var vg_media_1 = require("../../core/vg-media/vg-media"); var vg_states_1 = require('../../core/states/vg-states'); describe('Scrub bar', function () { var scrubBar; var ref; var cdRef; var api; var vgControlsHiddenState; var media; var elem = { play: function () { }, pause: function () { }, load: function () { }, duration: 100, currentTime: 0, volume: 1, playbackRate: 1, buffered: { length: 2, end: function () { return 50; } }, id: 'testVideo', observe: function () { return {}; }, dispatchEvent: function () { } }; beforeEach(function () { ref = { nativeElement: { getAttribute: function (name) { return name; }, scrollWidth: 200 } }; cdRef = { detectChanges: function () { }, markForCheck: function () { }, detach: function () { }, reattach: function () { }, checkNoChanges: function () { } }; api = new vg_api_1.VgAPI(); media = new vg_media_1.VgMedia(api, cdRef); media.vgMedia = elem; vgControlsHiddenState = new vg_controls_hidden_1.VgControlsHidden(); scrubBar = new vg_scrub_bar_1.VgScrubBar(ref, api, vgControlsHiddenState); }); it('Should get media by id on init', function () { spyOn(api, 'getMediaById'); scrubBar.vgFor = 'test'; scrubBar.onPlayerReady(); expect(api.getMediaById).toHaveBeenCalledWith('test'); }); it('Should show scrub bar', function () { vgControlsHiddenState.state(false); expect(scrubBar.hideScrubBar).toBe(false); }); it('Should hide scrub bar', function () { vgControlsHiddenState.state(true); expect(scrubBar.hideScrubBar).toBe(true); }); describe('onMouseDownScrubBar', function () { it('should call API seekTime 10 when offsetX is 20 and scrollWidth is 200', function () { api = { seekTime: function () { }, pause: function () { }, registerMedia: function () { }, state: vg_states_1.VgStates.VG_PLAYING, isLive: false, canPlay: true }; spyOn(api, 'pause'); media.onCanPlay({}); api.registerMedia(media); scrubBar.target = api; scrubBar.target.canPlay = true; scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onMouseDownScrubBar({ offsetX: 20 }); expect(api.pause).toHaveBeenCalled(); }); }); describe('onMouseMoveScrubBar', function () { it('should modify time.current to 10 when offsetX is 20 and scrollWidth is 200 and vgSlider is true and isSeeking is true', function () { spyOn(api, 'seekTime'); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onMouseMoveScrubBar({ offsetX: 20 }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onMouseMoveScrubBar({ offsetX: 20 }); expect(api.seekTime).toHaveBeenCalledWith(10, true); }); }); describe('onMouseOutScrubBar', function () { it('should modify time.current to 10 when offsetX is 20 and scrollWidth is 200 and vgSlider is true and isSeeking is true', function () { spyOn(api, 'seekTime'); media.onCanPlay({}); api.registerMedia(media); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onMouseOutScrubBar({ offsetX: 20 }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onMouseOutScrubBar({ offsetX: 20 }); expect(api.seekTime).toHaveBeenCalledWith(10, true); }); }); describe('onMouseUpScrubBar', function () { it('should modify time.current to 10 when offsetX is 20 and scrollWidth is 200 and vgSlider is true and isSeeking is true', function () { spyOn(api, 'seekTime'); media.onCanPlay({}); api.registerMedia(media); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onMouseUpScrubBar({ offsetX: 20 }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onMouseUpScrubBar({ offsetX: 20 }); expect(api.seekTime).toHaveBeenCalledWith(10, true); }); }); describe('onTouchStartScrubBar', function () { it('should call API seekTime 10 when offsetX is 20 and scrollWidth is 200', function () { spyOn(api, 'seekTime'); spyOn(api, 'pause'); media.onCanPlay({}); api.registerMedia(media); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onTouchStartScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledWith(10, true); expect(api.pause).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onTouchStartScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(1); expect(api.pause).toHaveBeenCalledTimes(1); }); }); describe('onTouchMoveScrubBar', function () { it('should modify time.current to 10 when offsetX is 20 and scrollWidth is 200 and vgSlider is true and isSeeking is true', function () { spyOn(api, 'seekTime'); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onTouchMoveScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onTouchMoveScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledWith(10, true); }); }); describe('onTouchCancelScrubBar', function () { it('should not seek', function () { spyOn(api, 'seekTime'); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onTouchCancelScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onTouchCancelScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); }); }); describe('onTouchEndScrubBar', function () { it('should not seek', function () { spyOn(api, 'seekTime'); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onTouchEndScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onTouchEndScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); }); }); describe('onTouchLeaveScrubBar', function () { it('should not seek', function () { spyOn(api, 'seekTime'); scrubBar.target = api; scrubBar.vgSlider = false; scrubBar.onTouchLeaveScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); scrubBar.vgSlider = true; scrubBar.isSeeking = true; scrubBar.onTouchLeaveScrubBar({ touches: [{ pageX: 20 }] }); expect(api.seekTime).toHaveBeenCalledTimes(0); }); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctc2NydWItYmFyLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2Zy1zY3J1Yi1iYXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkJBQXlCLGdCQUFnQixDQUFDLENBQUE7QUFDMUMsdUJBQW9CLDRCQUE0QixDQUFDLENBQUE7QUFFakQsbUNBQStCLDBDQUEwQyxDQUFDLENBQUE7QUFDMUUseUJBQXNCLDhCQUE4QixDQUFDLENBQUE7QUFDckQsMEJBQXlCLDZCQUE2QixDQUFDLENBQUE7QUFFdkQsUUFBUSxDQUFDLFdBQVcsRUFBRTtJQUNsQixJQUFJLFFBQW1CLENBQUM7SUFDeEIsSUFBSSxHQUFjLENBQUM7SUFDbkIsSUFBSSxLQUF1QixDQUFDO0lBQzVCLElBQUksR0FBUyxDQUFDO0lBQ2QsSUFBSSxxQkFBdUMsQ0FBQztJQUM1QyxJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLElBQUksR0FBRztRQUNQLElBQUksRUFBRSxjQUFPLENBQUM7UUFDZCxLQUFLLEVBQUUsY0FBTyxDQUFDO1FBQ2YsSUFBSSxFQUFFLGNBQU8sQ0FBQztRQUNkLFFBQVEsRUFBRSxHQUFHO1FBQ2IsV0FBVyxFQUFFLENBQUM7UUFDZCxNQUFNLEVBQUUsQ0FBQztRQUNULFlBQVksRUFBRSxDQUFDO1FBQ2YsUUFBUSxFQUFFO1lBQ04sTUFBTSxFQUFFLENBQUM7WUFDVCxHQUFHLEVBQUUsY0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztTQUMxQjtRQUNELEVBQUUsRUFBRSxXQUFXO1FBQ2YsT0FBTyxFQUFFO1lBQ0wsTUFBTSxDQUFNLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBQ0QsYUFBYSxFQUFFLGNBQU8sQ0FBQztLQUMxQixDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1AsR0FBRyxHQUFHO1lBQ0YsYUFBYSxFQUFFO2dCQUNYLFlBQVksRUFBRSxVQUFDLElBQUk7b0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDaEIs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QUFHLEdBQUcsQ0FBQztZQUN0QixRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUUxQixRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUUzRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTlDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBRTFCLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBRTNELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtWZ1NjcnViQmFyfSBmcm9tIFwiLi92Zy1zY3J1Yi1iYXJcIjtcbmltcG9ydCB7VmdBUEl9IGZyb20gXCIuLi8uLi9jb3JlL3NlcnZpY2VzL3ZnLWFwaVwiO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7VmdDb250cm9sc0hpZGRlbn0gZnJvbSAnLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3ZnLWNvbnRyb2xzLWhpZGRlbic7XG5pbXBvcnQge1ZnTWVkaWF9IGZyb20gXCIuLi8uLi9jb3JlL3ZnLW1lZGlhL3ZnLW1lZGlhXCI7XG5pbXBvcnQgeyBWZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvcmUvc3RhdGVzL3ZnLXN0YXRlcyc7XG5cbmRlc2NyaWJlKCdTY3J1YiBiYXInLCAoKSA9PiB7XG4gICAgbGV0IHNjcnViQmFyOlZnU2NydWJCYXI7XG4gICAgbGV0IHJlZjpFbGVtZW50UmVmO1xuICAgIGxldCBjZFJlZjpDaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBsZXQgYXBpOlZnQVBJO1xuICAgIGxldCB2Z0NvbnRyb2xzSGlkZGVuU3RhdGU6IFZnQ29udHJvbHNIaWRkZW47XG4gICAgbGV0IG1lZGlhOlZnTWVkaWE7XG4gICAgbGV0IGVsZW0gPSB7XG4gICAgICAgIHBsYXk6ICgpID0+IHt9LFxuICAgICAgICBwYXVzZTogKCkgPT4ge30sXG4gICAgICAgIGxvYWQ6ICgpID0+IHt9LFxuICAgICAgICBkdXJhdGlvbjogMTAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgdm9sdW1lOiAxLFxuICAgICAgICBwbGF5YmFja1JhdGU6IDEsXG4gICAgICAgIGJ1ZmZlcmVkOiB7XG4gICAgICAgICAgICBsZW5ndGg6IDIsXG4gICAgICAgICAgICBlbmQ6ICgpID0+IHtyZXR1cm4gNTA7fVxuICAgICAgICB9LFxuICAgICAgICBpZDogJ3Rlc3RWaWRlbycsXG4gICAgICAgIG9ic2VydmU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8YW55Pnt9O1xuICAgICAgICB9LFxuICAgICAgICBkaXNwYXRjaEV2ZW50OiAoKSA9PiB7fVxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcmVmID0ge1xuICAgICAgICAgICAgbmF0aXZlRWxlbWVudDoge1xuICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aDogMjAwXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNkUmVmID0ge1xuICAgICAgICAgICAgZGV0ZWN0Q2hhbmdlczogKCkgPT4ge30sXG4gICAgICAgICAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHt9LFxuICAgICAgICAgICAgZGV0YWNoOiAoKSA9PiB7fSxcbiAgICAgICAgICAgIHJlYXR0YWNoOiAoKSA9PiB7fSxcbiAgICAgICAgICAgIGNoZWNrTm9DaGFuZ2VzOiAoKSA9PiB7fVxuICAgICAgICB9XG5cbiAgICAgICAgYXBpID0gbmV3IFZnQVBJKCk7XG4gICAgICAgIG1lZGlhID0gbmV3IFZnTWVkaWEoYXBpLCBjZFJlZik7XG4gICAgICAgIG1lZGlhLnZnTWVkaWEgPSBlbGVtO1xuICAgICAgICB2Z0NvbnRyb2xzSGlkZGVuU3RhdGUgPSBuZXcgVmdDb250cm9sc0hpZGRlbigpO1xuXG4gICAgICAgIHNjcnViQmFyID0gbmV3IFZnU2NydWJCYXIocmVmLCBhcGksIHZnQ29udHJvbHNIaWRkZW5TdGF0ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGdldCBtZWRpYSBieSBpZCBvbiBpbml0JywgKCkgPT4ge1xuICAgICAgICBzcHlPbihhcGksICdnZXRNZWRpYUJ5SWQnKTtcblxuICAgICAgICBzY3J1YkJhci52Z0ZvciA9ICd0ZXN0JztcbiAgICAgICAgc2NydWJCYXIub25QbGF5ZXJSZWFkeSgpO1xuXG4gICAgICAgIGV4cGVjdChhcGkuZ2V0TWVkaWFCeUlkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgndGVzdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBzaG93IHNjcnViIGJhcicsICgpID0+IHtcbiAgICAgICAgdmdDb250cm9sc0hpZGRlblN0YXRlLnN0YXRlKGZhbHNlKTtcbiAgICAgICAgZXhwZWN0KHNjcnViQmFyLmhpZGVTY3J1YkJhcikudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhpZGUgc2NydWIgYmFyJywgKCkgPT4ge1xuICAgICAgICB2Z0NvbnRyb2xzSGlkZGVuU3RhdGUuc3RhdGUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChzY3J1YkJhci5oaWRlU2NydWJCYXIpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Nb3VzZURvd25TY3J1YkJhcicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjYWxsIEFQSSBzZWVrVGltZSAxMCB3aGVuIG9mZnNldFggaXMgMjAgYW5kIHNjcm9sbFdpZHRoIGlzIDIwMCcsICgpID0+IHtcbiAgICAgICAgICAgIGFwaSA9IDxhbnk+e1xuICAgICAgICAgICAgICAgIHNlZWtUaW1lOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICBwYXVzZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJNZWRpYTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgc3RhdGU6IFZnU3RhdGVzLlZHX1BMQVlJTkcsXG4gICAgICAgICAgICAgICAgaXNMaXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjYW5QbGF5OiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzcHlPbihhcGksICdwYXVzZScpO1xuXG4gICAgICAgICAgICBtZWRpYS5vbkNhblBsYXkoe30pO1xuICAgICAgICAgICAgYXBpLnJlZ2lzdGVyTWVkaWEobWVkaWEpO1xuXG4gICAgICAgICAgICBzY3J1YkJhci50YXJnZXQgPSBhcGk7XG4gICAgICAgICAgICBzY3J1YkJhci50YXJnZXQuY2FuUGxheSA9IHRydWU7XG4gICAgICAgICAgICBzY3J1YkJhci52Z1NsaWRlciA9IHRydWU7XG4gICAgICAgICAgICBzY3J1YkJhci5pc1NlZWtpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBzY3J1YkJhci5vbk1vdXNlRG93blNjcnViQmFyKHsgb2Zmc2V0WDogMjAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcGkucGF1c2UpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Nb3VzZU1vdmVTY3J1YkJhcicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBtb2RpZnkgdGltZS5jdXJyZW50IHRvIDEwIHdoZW4gb2Zmc2V0WCBpcyAyMCBhbmQgc2Nyb2xsV2lkdGggaXMgMjAwIGFuZCB2Z1NsaWRlciBpcyB0cnVlIGFuZCBpc1NlZWtpbmcgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgICAgICAgIHNweU9uKGFwaSwgJ3NlZWtUaW1lJyk7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLnRhcmdldCA9IGFwaTtcbiAgICAgICAgICAgIHNjcnViQmFyLnZnU2xpZGVyID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLm9uTW91c2VNb3ZlU2NydWJCYXIoeyBvZmZzZXRYOiAyMCB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwaS5zZWVrVGltZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXG4gICAgICAgICAgICBzY3J1YkJhci52Z1NsaWRlciA9IHRydWU7XG4gICAgICAgICAgICBzY3J1YkJhci5pc1NlZWtpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBzY3J1YkJhci5vbk1vdXNlTW92ZVNjcnViQmFyKHsgb2Zmc2V0WDogMjAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcGkuc2Vla1RpbWUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDEwLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Nb3VzZU91dFNjcnViQmFyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIG1vZGlmeSB0aW1lLmN1cnJlbnQgdG8gMTAgd2hlbiBvZmZzZXRYIGlzIDIwIGFuZCBzY3JvbGxXaWR0aCBpcyAyMDAgYW5kIHZnU2xpZGVyIGlzIHRydWUgYW5kIGlzU2Vla2luZyBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgICAgICAgc3B5T24oYXBpLCAnc2Vla1RpbWUnKTtcblxuICAgICAgICAgICAgbWVkaWEub25DYW5QbGF5KHt9KTtcbiAgICAgICAgICAgIGFwaS5yZWdpc3Rlck1lZGlhKG1lZGlhKTtcblxuICAgICAgICAgICAgc2NydWJCYXIudGFyZ2V0ID0gYXBpO1xuICAgICAgICAgICAgc2NydWJCYXIudmdTbGlkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgc2NydWJCYXIub25Nb3VzZU91dFNjcnViQmFyKHsgb2Zmc2V0WDogMjAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcGkuc2Vla1RpbWUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblxuICAgICAgICAgICAgc2NydWJCYXIudmdTbGlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgc2NydWJCYXIuaXNTZWVraW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgc2NydWJCYXIub25Nb3VzZU91dFNjcnViQmFyKHsgb2Zmc2V0WDogMjAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcGkuc2Vla1RpbWUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDEwLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Nb3VzZVVwU2NydWJCYXInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgbW9kaWZ5IHRpbWUuY3VycmVudCB0byAxMCB3aGVuIG9mZnNldFggaXMgMjAgYW5kIHNjcm9sbFdpZHRoIGlzIDIwMCBhbmQgdmdTbGlkZXIgaXMgdHJ1ZSBhbmQgaXNTZWVraW5nIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBzcHlPbihhcGksICdzZWVrVGltZScpO1xuXG4gICAgICAgICAgICBtZWRpYS5vbkNhblBsYXkoe30pO1xuICAgICAgICAgICAgYXBpLnJlZ2lzdGVyTWVkaWEobWVkaWEpO1xuXG4gICAgICAgICAgICBzY3J1YkJhci50YXJnZXQgPSBhcGk7XG4gICAgICAgICAgICBzY3J1YkJhci52Z1NsaWRlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICBzY3J1YkJhci5vbk1vdXNlVXBTY3J1YkJhcih7IG9mZnNldFg6IDIwIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLnZnU2xpZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHNjcnViQmFyLmlzU2Vla2luZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLm9uTW91c2VVcFNjcnViQmFyKHsgb2Zmc2V0WDogMjAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcGkuc2Vla1RpbWUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDEwLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnb25Ub3VjaFN0YXJ0U2NydWJCYXInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgY2FsbCBBUEkgc2Vla1RpbWUgMTAgd2hlbiBvZmZzZXRYIGlzIDIwIGFuZCBzY3JvbGxXaWR0aCBpcyAyMDAnLCAoKSA9PiB7XG4gICAgICAgICAgICBzcHlPbihhcGksICdzZWVrVGltZScpO1xuICAgICAgICAgICAgc3B5T24oYXBpLCAncGF1c2UnKTtcblxuICAgICAgICAgICAgbWVkaWEub25DYW5QbGF5KHt9KTtcbiAgICAgICAgICAgIGFwaS5yZWdpc3Rlck1lZGlhKG1lZGlhKTtcblxuICAgICAgICAgICAgc2NydWJCYXIudGFyZ2V0ID0gYXBpO1xuICAgICAgICAgICAgc2NydWJCYXIudmdTbGlkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgc2NydWJCYXIub25Ub3VjaFN0YXJ0U2NydWJCYXIoeyB0b3VjaGVzOiBbIHtwYWdlWDogMjAgfV19KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwaS5zZWVrVGltZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMTAsIHRydWUpO1xuICAgICAgICAgICAgZXhwZWN0KGFwaS5wYXVzZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXG4gICAgICAgICAgICBzY3J1YkJhci52Z1NsaWRlciA9IHRydWU7XG4gICAgICAgICAgICBzY3J1YkJhci5pc1NlZWtpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBzY3J1YkJhci5vblRvdWNoU3RhcnRTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgICAgICBleHBlY3QoYXBpLnBhdXNlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVG91Y2hNb3ZlU2NydWJCYXInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgbW9kaWZ5IHRpbWUuY3VycmVudCB0byAxMCB3aGVuIG9mZnNldFggaXMgMjAgYW5kIHNjcm9sbFdpZHRoIGlzIDIwMCBhbmQgdmdTbGlkZXIgaXMgdHJ1ZSBhbmQgaXNTZWVraW5nIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgICAgICAgICBzcHlPbihhcGksICdzZWVrVGltZScpO1xuXG4gICAgICAgICAgICBzY3J1YkJhci50YXJnZXQgPSBhcGk7XG4gICAgICAgICAgICBzY3J1YkJhci52Z1NsaWRlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICBzY3J1YkJhci5vblRvdWNoTW92ZVNjcnViQmFyKHsgdG91Y2hlczogWyB7cGFnZVg6IDIwIH1dfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChhcGkuc2Vla1RpbWUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblxuICAgICAgICAgICAgc2NydWJCYXIudmdTbGlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgc2NydWJCYXIuaXNTZWVraW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgc2NydWJCYXIub25Ub3VjaE1vdmVTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgxMCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVG91Y2hDYW5jZWxTY3J1YkJhcicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3Qgc2VlaycsICgpID0+IHtcbiAgICAgICAgICAgIHNweU9uKGFwaSwgJ3NlZWtUaW1lJyk7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLnRhcmdldCA9IGFwaTtcbiAgICAgICAgICAgIHNjcnViQmFyLnZnU2xpZGVyID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLm9uVG91Y2hDYW5jZWxTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLnZnU2xpZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHNjcnViQmFyLmlzU2Vla2luZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLm9uVG91Y2hDYW5jZWxTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVG91Y2hFbmRTY3J1YkJhcicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBub3Qgc2VlaycsICgpID0+IHtcbiAgICAgICAgICAgIHNweU9uKGFwaSwgJ3NlZWtUaW1lJyk7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLnRhcmdldCA9IGFwaTtcbiAgICAgICAgICAgIHNjcnViQmFyLnZnU2xpZGVyID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLm9uVG91Y2hFbmRTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLnZnU2xpZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHNjcnViQmFyLmlzU2Vla2luZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHNjcnViQmFyLm9uVG91Y2hFbmRTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uVG91Y2hMZWF2ZVNjcnViQmFyJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIG5vdCBzZWVrJywgKCkgPT4ge1xuICAgICAgICAgICAgc3B5T24oYXBpLCAnc2Vla1RpbWUnKTtcblxuICAgICAgICAgICAgc2NydWJCYXIudGFyZ2V0ID0gYXBpO1xuICAgICAgICAgICAgc2NydWJCYXIudmdTbGlkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgc2NydWJCYXIub25Ub3VjaExlYXZlU2NydWJCYXIoeyB0b3VjaGVzOiBbIHtwYWdlWDogMjAgfV19KTtcblxuICAgICAgICAgICAgZXhwZWN0KGFwaS5zZWVrVGltZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXG4gICAgICAgICAgICBzY3J1YkJhci52Z1NsaWRlciA9IHRydWU7XG4gICAgICAgICAgICBzY3J1YkJhci5pc1NlZWtpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBzY3J1YkJhci5vblRvdWNoTGVhdmVTY3J1YkJhcih7IHRvdWNoZXM6IFsge3BhZ2VYOiAyMCB9XX0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYXBpLnNlZWtUaW1lKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG5cbmludGVyZmFjZSBEZWNvcmF0b3JJbnZvY2F0aW9uIHtcbiAgdHlwZTogRnVuY3Rpb247XG4gIGFyZ3M/OiBhbnlbXTtcbn1cbiJdfQ==