UNPKG

videogular2

Version:

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

170 lines 22.2 kB
"use strict"; var vg_media_1 = require("./vg-media"); var vg_api_1 = require("../services/vg-api"); var vg_states_1 = require("../states/vg-states"); describe('Videogular Media', function () { var media; var ref; var cdRef; var api; 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: elem }; 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; }); it('Should load a new media if a change on dom have been happened', function () { jasmine.clock().install(); spyOn(elem, 'load').and.callThrough(); spyOn(elem, 'pause').and.callThrough(); media.onMutation([ { type: 'attributes', attributeName: 'src', target: { src: 'my-new-file.mp4' } } ]); jasmine.clock().tick(10); expect(elem.load).toHaveBeenCalled(); expect(elem.pause).toHaveBeenCalled(); expect(elem.currentTime).toBe(0); jasmine.clock().uninstall(); }); it('Should not be master by default', function () { expect(media.vgMaster).toBeFalsy(); }); it('Should have a play method', function () { spyOn(elem, 'play'); media.play(); expect(elem.play).toHaveBeenCalled(); }); it('Should have a pause method', function () { spyOn(elem, 'pause'); media.pause(); expect(elem.pause).toHaveBeenCalled(); }); it('Should have setter/getter props', function () { expect(media.duration).toBe(100); expect(media.currentTime).toBe(0); expect(media.volume).toBe(1); expect(media.playbackRate).toBe(1); expect(media.buffered.length).toEqual(2); media.currentTime = 50; media.volume = 0.5; media.playbackRate = 0.5; expect(elem.currentTime).toBe(50); expect(elem.volume).toBe(0.5); expect(elem.playbackRate).toBe(0.5); }); it('Should handle onCanPlay native event', function () { expect(media.canPlay).toBeFalsy(); media.onCanPlay({}); expect(media.canPlay).toBeTruthy(); }); it('Should handle onCanPlayThrough native event', function () { expect(media.canPlayThrough).toBeFalsy(); media.onCanPlayThrough({}); expect(media.canPlayThrough).toBeTruthy(); }); it('Should handle onLoadMetadata native event', function () { expect(media.isMetadataLoaded).toBeFalsy(); media.onLoadMetadata({}); expect(media.isMetadataLoaded).toBeTruthy(); expect(media.time.total).toBe(100000); }); it('Should handle onWait native event', function () { expect(media.isWaiting).toBeFalsy(); media.onWait({}); expect(media.isWaiting).toBeTruthy(); }); it('Should handle onComplete native event', function () { expect(media.isCompleted).toBeFalsy(); media.state = vg_states_1.VgStates.VG_PLAYING; media.onComplete({}); expect(media.isCompleted).toBeTruthy(); expect(media.state).toBe(vg_states_1.VgStates.VG_ENDED); }); it('Should handle onStartPlaying native event', function () { expect(media.state).toBe(vg_states_1.VgStates.VG_PAUSED); media.onStartPlaying({}); expect(media.state).toBe(vg_states_1.VgStates.VG_PLAYING); }); it('Should handle onPlay native event', function () { expect(media.state).toBe(vg_states_1.VgStates.VG_PAUSED); media.onPlay({}); expect(media.state).toBe(vg_states_1.VgStates.VG_PLAYING); }); it('Should handle onPause native event', function () { media.state = vg_states_1.VgStates.VG_PLAYING; media.onPause({}); expect(media.state).toBe(vg_states_1.VgStates.VG_PAUSED); }); it('Should handle onTimeUpdate native event (with buffer)', function () { elem.currentTime = 25; media.onTimeUpdate({}); expect(media.time.current).toBe(25000); expect(media.time.left).toBe(75000); expect(media.buffer.end).toBe(50000); }); it('Should handle onTimeUpdate native event (without buffer)', function () { elem.currentTime = 25; elem.buffered = { length: 0, end: function () { return 0; } }; media.onTimeUpdate({}); expect(media.time.current).toBe(25000); expect(media.time.left).toBe(75000); expect(media.buffer.end).toBe(0); elem.buffered = { length: 2, end: function () { return 50; } }; }); it('Should handle onProgress native event (with buffer)', function () { media.onProgress({}); expect(media.buffer.end).toBe(50000); }); it('Should handle onProgress native event (without buffer)', function () { elem.buffered = { length: 0, end: function () { return 0; } }; media.onProgress({}); expect(media.buffer.end).toBe(0); elem.buffered = { length: 2, end: function () { return 50; } }; }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctbWVkaWEuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZnLW1lZGlhLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUFzQixZQUFZLENBQUMsQ0FBQTtBQUNuQyx1QkFBb0Isb0JBQW9CLENBQUMsQ0FBQTtBQUV6QywwQkFBdUIscUJBQXFCLENBQUMsQ0FBQTtBQUc3QyxRQUFRLENBQUMsa0JBQWtCLEVBQUU7SUFDekIsSUFBSSxLQUFhLENBQUM7SUFDbEIsSUFBSSxHQUFjLENBQUM7SUFDbkIsSUFBSSxLQUF1QixDQUFDO0lBQzVCLElBQUksR0FBUyxDQUFDO0lBQ2QsSUFBSSxJQUFJLEdBQUc7UUFDUCxJQUFJLEVBQUUsY0FBTyxDQUFDO1FBQ2QsS0FBSyxFQUFFLGNBQU8sQ0FBQztRQUNmLElBQUksRUFBRSxjQUFPLENBQUM7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFdBQVcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxFQUFFLENBQUM7UUFDVCxZQUFZLEVBQUUsQ0FBQztRQUNmLFFBQVEsRUFBRTtZQUNOLE1BQU0sRUFBRSxDQUFDO1lBQ1QsR0FBRyxFQUFFLGNBQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7U0FDMUI7UUFDRCxFQUFFLEVBQUUsV0FBVztRQUNmLE9BQU8sRUFBRTtZQUNMLE1BQU0sQ0FBTSxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELGFBQWEsRUFBRSxjQUFPLENBQUM7S0FDMUIsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNQLEdBQUcsR0FBRztZQUNGLGFBQWEsRUFBRSxJQUFJO1NBQ3RCLENBQUM7UUFDRixLQUFLLEdBQUc7WUFDSixhQUFhLEVBQUUsY0FBTyxDQUFDO1lBQ3ZCLFlBQVksRUFBRSxjQUFPLENBQUM7WUFDdEIsTUFBTSxFQUFFLGNBQU8sQ0FBQztZQUNoQixRQUFRLEVBQUUsY0FBTyxDQUFDO1lBQ2xCLGNBQWMsRUFBRSxjQUFPLENBQUM7U0FDM0IsQ0FBQztRQUNGLEdBQUcsR0FBRyxJQUFJLGNBQUssRUFBRSxDQUFDO1FBQ2xCLEtBQUssR0FBRyxJQUFJLGtCQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFO1FBQ2hFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUUxQixLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2QyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ1I7Z0JBQ0QsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixNQUFNLEVBQUU7b0JBQ0osR0FBRyxFQUFFLGlCQUFpQjtpQkFDekI7YUFDSjtTQUNKLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7UUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtRQUM1QixLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXBCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUViLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0QkFBNEIsRUFBRTtRQUM3QixLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXJCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVkLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekMsS0FBSyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFFekIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUU7UUFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVsQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUU7UUFDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV6QyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtRQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFM0MsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFcEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFO1FBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsS0FBSyxDQUFDLEtBQUssR0FBRyxvQkFBUSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXJCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtRQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtRQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtRQUNyQyxLQUFLLENBQUMsS0FBSyxHQUFHLG9CQUFRLENBQUMsVUFBVSxDQUFDO1FBRWxDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRTtRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUV0QixLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1FBQzNELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULEdBQUcsRUFBRSxjQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO1NBQ3pCLENBQUM7UUFFRixLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULEdBQUcsRUFBRSxjQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQSxDQUFDO1NBQzFCLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtRQUN0RCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXJCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRTtRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osTUFBTSxFQUFFLENBQUM7WUFDVCxHQUFHLEVBQUUsY0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztTQUN6QixDQUFDO1FBRUYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsR0FBRyxFQUFFLGNBQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7U0FDMUIsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ZnTWVkaWF9IGZyb20gXCIuL3ZnLW1lZGlhXCI7XG5pbXBvcnQge1ZnQVBJfSBmcm9tIFwiLi4vc2VydmljZXMvdmctYXBpXCI7XG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtWZ1N0YXRlc30gZnJvbSBcIi4uL3N0YXRlcy92Zy1zdGF0ZXNcIjtcblxuXG5kZXNjcmliZSgnVmlkZW9ndWxhciBNZWRpYScsICgpID0+IHtcbiAgICBsZXQgbWVkaWE6VmdNZWRpYTtcbiAgICBsZXQgcmVmOkVsZW1lbnRSZWY7XG4gICAgbGV0IGNkUmVmOkNoYW5nZURldGVjdG9yUmVmO1xuICAgIGxldCBhcGk6VmdBUEk7XG4gICAgbGV0IGVsZW0gPSB7XG4gICAgICAgIHBsYXk6ICgpID0+IHt9LFxuICAgICAgICBwYXVzZTogKCkgPT4ge30sXG4gICAgICAgIGxvYWQ6ICgpID0+IHt9LFxuICAgICAgICBkdXJhdGlvbjogMTAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgdm9sdW1lOiAxLFxuICAgICAgICBwbGF5YmFja1JhdGU6IDEsXG4gICAgICAgIGJ1ZmZlcmVkOiB7XG4gICAgICAgICAgICBsZW5ndGg6IDIsXG4gICAgICAgICAgICBlbmQ6ICgpID0+IHtyZXR1cm4gNTA7fVxuICAgICAgICB9LFxuICAgICAgICBpZDogJ3Rlc3RWaWRlbycsXG4gICAgICAgIG9ic2VydmU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8YW55Pnt9O1xuICAgICAgICB9LFxuICAgICAgICBkaXNwYXRjaEV2ZW50OiAoKSA9PiB7fVxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcmVmID0ge1xuICAgICAgICAgICAgbmF0aXZlRWxlbWVudDogZWxlbVxuICAgICAgICB9O1xuICAgICAgICBjZFJlZiA9IHtcbiAgICAgICAgICAgIGRldGVjdENoYW5nZXM6ICgpID0+IHt9LFxuICAgICAgICAgICAgbWFya0ZvckNoZWNrOiAoKSA9PiB7fSxcbiAgICAgICAgICAgIGRldGFjaDogKCkgPT4ge30sXG4gICAgICAgICAgICByZWF0dGFjaDogKCkgPT4ge30sXG4gICAgICAgICAgICBjaGVja05vQ2hhbmdlczogKCkgPT4ge31cbiAgICAgICAgfTtcbiAgICAgICAgYXBpID0gbmV3IFZnQVBJKCk7XG4gICAgICAgIG1lZGlhID0gbmV3IFZnTWVkaWEoYXBpLCBjZFJlZik7XG4gICAgICAgIG1lZGlhLnZnTWVkaWEgPSBlbGVtO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBsb2FkIGEgbmV3IG1lZGlhIGlmIGEgY2hhbmdlIG9uIGRvbSBoYXZlIGJlZW4gaGFwcGVuZWQnLCAoKSA9PiB7XG4gICAgICAgIGphc21pbmUuY2xvY2soKS5pbnN0YWxsKCk7XG5cbiAgICAgICAgc3B5T24oZWxlbSwgJ2xvYWQnKS5hbmQuY2FsbFRocm91Z2goKTtcbiAgICAgICAgc3B5T24oZWxlbSwgJ3BhdXNlJykuYW5kLmNhbGxUaHJvdWdoKCk7XG5cbiAgICAgICAgbWVkaWEub25NdXRhdGlvbihbXG4gICAgICAgICAgICA8YW55PntcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlcycsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogJ3NyYycsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogJ215LW5ldy1maWxlLm1wNCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF0pO1xuXG4gICAgICAgIGphc21pbmUuY2xvY2soKS50aWNrKDEwKTtcblxuICAgICAgICBleHBlY3QoZWxlbS5sb2FkKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIGV4cGVjdChlbGVtLnBhdXNlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIGV4cGVjdChlbGVtLmN1cnJlbnRUaW1lKS50b0JlKDApO1xuXG4gICAgICAgIGphc21pbmUuY2xvY2soKS51bmluc3RhbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgbm90IGJlIG1hc3RlciBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QobWVkaWEudmdNYXN0ZXIpLnRvQmVGYWxzeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYXZlIGEgcGxheSBtZXRob2QnLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKGVsZW0sICdwbGF5Jyk7XG5cbiAgICAgICAgbWVkaWEucGxheSgpO1xuXG4gICAgICAgIGV4cGVjdChlbGVtLnBsYXkpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGF2ZSBhIHBhdXNlIG1ldGhvZCcsICgpID0+IHtcbiAgICAgICAgc3B5T24oZWxlbSwgJ3BhdXNlJyk7XG5cbiAgICAgICAgbWVkaWEucGF1c2UoKTtcblxuICAgICAgICBleHBlY3QoZWxlbS5wYXVzZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYXZlIHNldHRlci9nZXR0ZXIgcHJvcHMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5kdXJhdGlvbikudG9CZSgxMDApO1xuICAgICAgICBleHBlY3QobWVkaWEuY3VycmVudFRpbWUpLnRvQmUoMCk7XG4gICAgICAgIGV4cGVjdChtZWRpYS52b2x1bWUpLnRvQmUoMSk7XG4gICAgICAgIGV4cGVjdChtZWRpYS5wbGF5YmFja1JhdGUpLnRvQmUoMSk7XG4gICAgICAgIGV4cGVjdChtZWRpYS5idWZmZXJlZC5sZW5ndGgpLnRvRXF1YWwoMik7XG5cbiAgICAgICAgbWVkaWEuY3VycmVudFRpbWUgPSA1MDtcbiAgICAgICAgbWVkaWEudm9sdW1lID0gMC41O1xuICAgICAgICBtZWRpYS5wbGF5YmFja1JhdGUgPSAwLjU7XG5cbiAgICAgICAgZXhwZWN0KGVsZW0uY3VycmVudFRpbWUpLnRvQmUoNTApO1xuICAgICAgICBleHBlY3QoZWxlbS52b2x1bWUpLnRvQmUoMC41KTtcbiAgICAgICAgZXhwZWN0KGVsZW0ucGxheWJhY2tSYXRlKS50b0JlKDAuNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvbkNhblBsYXkgbmF0aXZlIGV2ZW50JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QobWVkaWEuY2FuUGxheSkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgbWVkaWEub25DYW5QbGF5KHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuY2FuUGxheSkudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgb25DYW5QbGF5VGhyb3VnaCBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5jYW5QbGF5VGhyb3VnaCkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgbWVkaWEub25DYW5QbGF5VGhyb3VnaCh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLmNhblBsYXlUaHJvdWdoKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvbkxvYWRNZXRhZGF0YSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5pc01ldGFkYXRhTG9hZGVkKS50b0JlRmFsc3koKTtcblxuICAgICAgICBtZWRpYS5vbkxvYWRNZXRhZGF0YSh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLmlzTWV0YWRhdGFMb2FkZWQpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KG1lZGlhLnRpbWUudG90YWwpLnRvQmUoMTAwMDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uV2FpdCBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5pc1dhaXRpbmcpLnRvQmVGYWxzeSgpO1xuXG4gICAgICAgIG1lZGlhLm9uV2FpdCh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLmlzV2FpdGluZykudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgb25Db21wbGV0ZSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5pc0NvbXBsZXRlZCkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgbWVkaWEuc3RhdGUgPSBWZ1N0YXRlcy5WR19QTEFZSU5HO1xuICAgICAgICBtZWRpYS5vbkNvbXBsZXRlKHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuaXNDb21wbGV0ZWQpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KG1lZGlhLnN0YXRlKS50b0JlKFZnU3RhdGVzLlZHX0VOREVEKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uU3RhcnRQbGF5aW5nIG5hdGl2ZSBldmVudCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG1lZGlhLnN0YXRlKS50b0JlKFZnU3RhdGVzLlZHX1BBVVNFRCk7XG5cbiAgICAgICAgbWVkaWEub25TdGFydFBsYXlpbmcoe30pO1xuXG4gICAgICAgIGV4cGVjdChtZWRpYS5zdGF0ZSkudG9CZShWZ1N0YXRlcy5WR19QTEFZSU5HKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uUGxheSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5zdGF0ZSkudG9CZShWZ1N0YXRlcy5WR19QQVVTRUQpO1xuXG4gICAgICAgIG1lZGlhLm9uUGxheSh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLnN0YXRlKS50b0JlKFZnU3RhdGVzLlZHX1BMQVlJTkcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgb25QYXVzZSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIG1lZGlhLnN0YXRlID0gVmdTdGF0ZXMuVkdfUExBWUlORztcblxuICAgICAgICBtZWRpYS5vblBhdXNlKHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuc3RhdGUpLnRvQmUoVmdTdGF0ZXMuVkdfUEFVU0VEKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uVGltZVVwZGF0ZSBuYXRpdmUgZXZlbnQgKHdpdGggYnVmZmVyKScsICgpID0+IHtcbiAgICAgICAgZWxlbS5jdXJyZW50VGltZSA9IDI1O1xuXG4gICAgICAgIG1lZGlhLm9uVGltZVVwZGF0ZSh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLnRpbWUuY3VycmVudCkudG9CZSgyNTAwMCk7XG4gICAgICAgIGV4cGVjdChtZWRpYS50aW1lLmxlZnQpLnRvQmUoNzUwMDApO1xuICAgICAgICBleHBlY3QobWVkaWEuYnVmZmVyLmVuZCkudG9CZSg1MDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvblRpbWVVcGRhdGUgbmF0aXZlIGV2ZW50ICh3aXRob3V0IGJ1ZmZlciknLCAoKSA9PiB7XG4gICAgICAgIGVsZW0uY3VycmVudFRpbWUgPSAyNTtcbiAgICAgICAgZWxlbS5idWZmZXJlZCA9IHtcbiAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgIGVuZDogKCkgPT4ge3JldHVybiAwO31cbiAgICAgICAgfTtcblxuICAgICAgICBtZWRpYS5vblRpbWVVcGRhdGUoe30pO1xuXG4gICAgICAgIGV4cGVjdChtZWRpYS50aW1lLmN1cnJlbnQpLnRvQmUoMjUwMDApO1xuICAgICAgICBleHBlY3QobWVkaWEudGltZS5sZWZ0KS50b0JlKDc1MDAwKTtcbiAgICAgICAgZXhwZWN0KG1lZGlhLmJ1ZmZlci5lbmQpLnRvQmUoMCk7XG5cbiAgICAgICAgZWxlbS5idWZmZXJlZCA9IHtcbiAgICAgICAgICAgIGxlbmd0aDogMixcbiAgICAgICAgICAgIGVuZDogKCkgPT4ge3JldHVybiA1MDt9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvblByb2dyZXNzIG5hdGl2ZSBldmVudCAod2l0aCBidWZmZXIpJywgKCkgPT4ge1xuICAgICAgICBtZWRpYS5vblByb2dyZXNzKHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuYnVmZmVyLmVuZCkudG9CZSg1MDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvblByb2dyZXNzIG5hdGl2ZSBldmVudCAod2l0aG91dCBidWZmZXIpJywgKCkgPT4ge1xuICAgICAgICBlbGVtLmJ1ZmZlcmVkID0ge1xuICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgZW5kOiAoKSA9PiB7cmV0dXJuIDA7fVxuICAgICAgICB9O1xuXG4gICAgICAgIG1lZGlhLm9uUHJvZ3Jlc3Moe30pO1xuXG4gICAgICAgIGV4cGVjdChtZWRpYS5idWZmZXIuZW5kKS50b0JlKDApO1xuXG4gICAgICAgIGVsZW0uYnVmZmVyZWQgPSB7XG4gICAgICAgICAgICBsZW5ndGg6IDIsXG4gICAgICAgICAgICBlbmQ6ICgpID0+IHtyZXR1cm4gNTA7fVxuICAgICAgICB9O1xuICAgIH0pO1xufSk7XG5cbmludGVyZmFjZSBEZWNvcmF0b3JJbnZvY2F0aW9uIHtcbiAgdHlwZTogRnVuY3Rpb247XG4gIGFyZ3M/OiBhbnlbXTtcbn1cbiJdfQ==