videogular2
Version:
Videogular is a video application framework for desktop and mobile powered by Angular 2.0
170 lines • 22.2 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctbWVkaWEuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZnLW1lZGlhLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlCQUFzQixZQUFZLENBQUMsQ0FBQTtBQUNuQyx1QkFBb0Isb0JBQW9CLENBQUMsQ0FBQTtBQUV6QywwQkFBdUIscUJBQXFCLENBQUMsQ0FBQTtBQUc3QyxRQUFRLENBQUMsa0JBQWtCLEVBQUU7SUFDekIsSUFBSSxLQUFhLENBQUM7SUFDbEIsSUFBSSxHQUFjLENBQUM7SUFDbkIsSUFBSSxLQUF1QixDQUFDO0lBQzVCLElBQUksR0FBUyxDQUFDO0lBQ2QsSUFBSSxJQUFJLEdBQUc7UUFDUCxJQUFJLEVBQUUsY0FBTyxDQUFDO1FBQ2QsS0FBSyxFQUFFLGNBQU8sQ0FBQztRQUNmLElBQUksRUFBRSxjQUFPLENBQUM7UUFDZCxRQUFRLEVBQUUsR0FBRztRQUNiLFdBQVcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxFQUFFLENBQUM7UUFDVCxZQUFZLEVBQUUsQ0FBQztRQUNmLFFBQVEsRUFBRTtZQUNOLE1BQU0sRUFBRSxDQUFDO1lBQ1QsR0FBRyxFQUFFLGNBQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7U0FDMUI7UUFDRCxFQUFFLEVBQUUsV0FBVztRQUNmLE9BQU8sRUFBRTtZQUNMLE1BQU0sQ0FBTSxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELGFBQWEsRUFBRSxjQUFPLENBQUM7S0FDMUIsQ0FBQztJQUVGLFVBQVUsQ0FBQztRQUNQLEdBQUcsR0FBRztZQUNGLGFBQWEsRUFBRSxJQUFJO1NBQ3RCLENBQUM7UUFDRixLQUFLLEdBQUc7WUFDSixhQUFhLEVBQUUsY0FBTyxDQUFDO1lBQ3ZCLFlBQVksRUFBRSxjQUFPLENBQUM7WUFDdEIsTUFBTSxFQUFFLGNBQU8sQ0FBQztZQUNoQixRQUFRLEVBQUUsY0FBTyxDQUFDO1lBQ2xCLGNBQWMsRUFBRSxjQUFPLENBQUM7U0FDM0IsQ0FBQztR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bXBvcnQge1ZnQVBJfSBmcm9tIFwiLi4vc2VydmljZXMvdmctYXBpXCI7XG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtWZ1N0YXRlc30gZnJvbSBcIi4uL3N0YXRlcy92Zy1zdGF0ZXNcIjtcblxuXG5kZXNjcmliZSgnVmlkZW9ndWxhciBNZWRpYScsICgpID0+IHtcbiAgICBsZXQgbWVkaWE6VmdNZWRpYTtcbiAgICBsZXQgcmVmOkVsZW1lbnRSZWY7XG4gICAgbGV0IGNkUmVmOkNoYW5nZURldGVjdG9yUmVmO1xuICAgIGxldCBhcGk6VmdBUEk7XG4gICAgbGV0IGVsZW0gPSB7XG4gICAgICAgIHBsYXk6ICgpID0+IHt9LFxuICAgICAgICBwYXVzZTogKCkgPT4ge30sXG4gICAgICAgIGxvYWQ6ICgpID0+IHt9LFxuICAgICAgICBkdXJhdGlvbjogMTAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgdm9sdW1lOiAxLFxuICAgICAgICBwbGF5YmFja1JhdGU6IDEsXG4gICAgICAgIGJ1ZmZlcmVkOiB7XG4gICAgICAgICAgICBsZW5ndGg6IDIsXG4gICAgICAgICAgICBlbmQ6ICgpID0+IHtyZXR1cm4gNTA7fVxuICAgICAgICB9LFxuICAgICAgICBpZDogJ3Rlc3RWaWRlbycsXG4gICAgICAgIG9ic2VydmU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8YW55Pnt9O1xuICAgICAgICB9LFxuICAgICAgICBkaXNwYXRjaEV2ZW50OiAoKSA9PiB7fVxuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcmVmID0ge1xuICAgICAgICAgICAgbmF0aXZlRWxlbWVudDogZWxlbVxuICAgICAgICB9O1xuICAgICAgICBjZFJlZiA9IHtcbiAgICAgICAgICAgIGRldGVjdENoYW5nZXM6ICgpID0+IHt9LFxuICAgICAgICAgICAgbWFya0ZvckNoZWNrOiAoKSA9PiB7fSxcbiAgICAgICAgICAgIGRldGFjaDogKCkgPT4ge30sXG4gICAgICAgICAgICByZWF0dGFjaDogKCkgPT4ge30sXG4gICAgICAgICAgICBjaGVja05vQ2hhbmdlczogKCkgPT4ge31cbiAgICAgICAgfTtcbiAgICAgICAgYXBpID0gbmV3IFZnQVBJKCk7XG4gICAgICAgIG1lZGlhID0gbmV3IFZnTWVkaWEoYXBpLCBjZFJlZik7XG4gICAgICAgIG1lZGlhLnZnTWVkaWEgPSBlbGVtO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBsb2FkIGEgbmV3IG1lZGlhIGlmIGEgY2hhbmdlIG9uIGRvbSBoYXZlIGJlZW4gaGFwcGVuZWQnLCAoKSA9PiB7XG4gICAgICAgIGphc21pbmUuY2xvY2soKS5pbnN0YWxsKCk7XG5cbiAgICAgICAgc3B5T24oZWxlbSwgJ2xvYWQnKS5hbmQuY2FsbFRocm91Z2goKTtcbiAgICAgICAgc3B5T24oZWxlbSwgJ3BhdXNlJykuYW5kLmNhbGxUaHJvdWdoKCk7XG5cbiAgICAgICAgbWVkaWEub25NdXRhdGlvbihbXG4gICAgICAgICAgICA8YW55PntcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXR0cmlidXRlcycsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogJ3NyYycsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogJ215LW5ldy1maWxlLm1wNCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIF0pO1xuXG4gICAgICAgIGphc21pbmUuY2xvY2soKS50aWNrKDEwKTtcblxuICAgICAgICBleHBlY3QoZWxlbS5sb2FkKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIGV4cGVjdChlbGVtLnBhdXNlKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgIGV4cGVjdChlbGVtLmN1cnJlbnRUaW1lKS50b0JlKDApO1xuXG4gICAgICAgIGphc21pbmUuY2xvY2soKS51bmluc3RhbGwoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgbm90IGJlIG1hc3RlciBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QobWVkaWEudmdNYXN0ZXIpLnRvQmVGYWxzeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYXZlIGEgcGxheSBtZXRob2QnLCAoKSA9PiB7XG4gICAgICAgIHNweU9uKGVsZW0sICdwbGF5Jyk7XG5cbiAgICAgICAgbWVkaWEucGxheSgpO1xuXG4gICAgICAgIGV4cGVjdChlbGVtLnBsYXkpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGF2ZSBhIHBhdXNlIG1ldGhvZCcsICgpID0+IHtcbiAgICAgICAgc3B5T24oZWxlbSwgJ3BhdXNlJyk7XG5cbiAgICAgICAgbWVkaWEucGF1c2UoKTtcblxuICAgICAgICBleHBlY3QoZWxlbS5wYXVzZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYXZlIHNldHRlci9nZXR0ZXIgcHJvcHMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5kdXJhdGlvbikudG9CZSgxMDApO1xuICAgICAgICBleHBlY3QobWVkaWEuY3VycmVudFRpbWUpLnRvQmUoMCk7XG4gICAgICAgIGV4cGVjdChtZWRpYS52b2x1bWUpLnRvQmUoMSk7XG4gICAgICAgIGV4cGVjdChtZWRpYS5wbGF5YmFja1JhdGUpLnRvQmUoMSk7XG4gICAgICAgIGV4cGVjdChtZWRpYS5idWZmZXJlZC5sZW5ndGgpLnRvRXF1YWwoMik7XG5cbiAgICAgICAgbWVkaWEuY3VycmVudFRpbWUgPSA1MDtcbiAgICAgICAgbWVkaWEudm9sdW1lID0gMC41O1xuICAgICAgICBtZWRpYS5wbGF5YmFja1JhdGUgPSAwLjU7XG5cbiAgICAgICAgZXhwZWN0KGVsZW0uY3VycmVudFRpbWUpLnRvQmUoNTApO1xuICAgICAgICBleHBlY3QoZWxlbS52b2x1bWUpLnRvQmUoMC41KTtcbiAgICAgICAgZXhwZWN0KGVsZW0ucGxheWJhY2tSYXRlKS50b0JlKDAuNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvbkNhblBsYXkgbmF0aXZlIGV2ZW50JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QobWVkaWEuY2FuUGxheSkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgbWVkaWEub25DYW5QbGF5KHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuY2FuUGxheSkudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgb25DYW5QbGF5VGhyb3VnaCBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5jYW5QbGF5VGhyb3VnaCkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgbWVkaWEub25DYW5QbGF5VGhyb3VnaCh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLmNhblBsYXlUaHJvdWdoKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvbkxvYWRNZXRhZGF0YSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5pc01ldGFkYXRhTG9hZGVkKS50b0JlRmFsc3koKTtcblxuICAgICAgICBtZWRpYS5vbkxvYWRNZXRhZGF0YSh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLmlzTWV0YWRhdGFMb2FkZWQpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KG1lZGlhLnRpbWUudG90YWwpLnRvQmUoMTAwMDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uV2FpdCBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5pc1dhaXRpbmcpLnRvQmVGYWxzeSgpO1xuXG4gICAgICAgIG1lZGlhLm9uV2FpdCh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLmlzV2FpdGluZykudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgb25Db21wbGV0ZSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5pc0NvbXBsZXRlZCkudG9CZUZhbHN5KCk7XG5cbiAgICAgICAgbWVkaWEuc3RhdGUgPSBWZ1N0YXRlcy5WR19QTEFZSU5HO1xuICAgICAgICBtZWRpYS5vbkNvbXBsZXRlKHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuaXNDb21wbGV0ZWQpLnRvQmVUcnV0aHkoKTtcbiAgICAgICAgZXhwZWN0KG1lZGlhLnN0YXRlKS50b0JlKFZnU3RhdGVzLlZHX0VOREVEKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uU3RhcnRQbGF5aW5nIG5hdGl2ZSBldmVudCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG1lZGlhLnN0YXRlKS50b0JlKFZnU3RhdGVzLlZHX1BBVVNFRCk7XG5cbiAgICAgICAgbWVkaWEub25TdGFydFBsYXlpbmcoe30pO1xuXG4gICAgICAgIGV4cGVjdChtZWRpYS5zdGF0ZSkudG9CZShWZ1N0YXRlcy5WR19QTEFZSU5HKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uUGxheSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChtZWRpYS5zdGF0ZSkudG9CZShWZ1N0YXRlcy5WR19QQVVTRUQpO1xuXG4gICAgICAgIG1lZGlhLm9uUGxheSh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLnN0YXRlKS50b0JlKFZnU3RhdGVzLlZHX1BMQVlJTkcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYW5kbGUgb25QYXVzZSBuYXRpdmUgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIG1lZGlhLnN0YXRlID0gVmdTdGF0ZXMuVkdfUExBWUlORztcblxuICAgICAgICBtZWRpYS5vblBhdXNlKHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuc3RhdGUpLnRvQmUoVmdTdGF0ZXMuVkdfUEFVU0VEKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgaGFuZGxlIG9uVGltZVVwZGF0ZSBuYXRpdmUgZXZlbnQgKHdpdGggYnVmZmVyKScsICgpID0+IHtcbiAgICAgICAgZWxlbS5jdXJyZW50VGltZSA9IDI1O1xuXG4gICAgICAgIG1lZGlhLm9uVGltZVVwZGF0ZSh7fSk7XG5cbiAgICAgICAgZXhwZWN0KG1lZGlhLnRpbWUuY3VycmVudCkudG9CZSgyNTAwMCk7XG4gICAgICAgIGV4cGVjdChtZWRpYS50aW1lLmxlZnQpLnRvQmUoNzUwMDApO1xuICAgICAgICBleHBlY3QobWVkaWEuYnVmZmVyLmVuZCkudG9CZSg1MDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvblRpbWVVcGRhdGUgbmF0aXZlIGV2ZW50ICh3aXRob3V0IGJ1ZmZlciknLCAoKSA9PiB7XG4gICAgICAgIGVsZW0uY3VycmVudFRpbWUgPSAyNTtcbiAgICAgICAgZWxlbS5idWZmZXJlZCA9IHtcbiAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgIGVuZDogKCkgPT4ge3JldHVybiAwO31cbiAgICAgICAgfTtcblxuICAgICAgICBtZWRpYS5vblRpbWVVcGRhdGUoe30pO1xuXG4gICAgICAgIGV4cGVjdChtZWRpYS50aW1lLmN1cnJlbnQpLnRvQmUoMjUwMDApO1xuICAgICAgICBleHBlY3QobWVkaWEudGltZS5sZWZ0KS50b0JlKDc1MDAwKTtcbiAgICAgICAgZXhwZWN0KG1lZGlhLmJ1ZmZlci5lbmQpLnRvQmUoMCk7XG5cbiAgICAgICAgZWxlbS5idWZmZXJlZCA9IHtcbiAgICAgICAgICAgIGxlbmd0aDogMixcbiAgICAgICAgICAgIGVuZDogKCkgPT4ge3JldHVybiA1MDt9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvblByb2dyZXNzIG5hdGl2ZSBldmVudCAod2l0aCBidWZmZXIpJywgKCkgPT4ge1xuICAgICAgICBtZWRpYS5vblByb2dyZXNzKHt9KTtcblxuICAgICAgICBleHBlY3QobWVkaWEuYnVmZmVyLmVuZCkudG9CZSg1MDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGhhbmRsZSBvblByb2dyZXNzIG5hdGl2ZSBldmVudCAod2l0aG91dCBidWZmZXIpJywgKCkgPT4ge1xuICAgICAgICBlbGVtLmJ1ZmZlcmVkID0ge1xuICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgZW5kOiAoKSA9PiB7cmV0dXJuIDA7fVxuICAgICAgICB9O1xuXG4gICAgICAgIG1lZGlhLm9uUHJvZ3Jlc3Moe30pO1xuXG4gICAgICAgIGV4cGVjdChtZWRpYS5idWZmZXIuZW5kKS50b0JlKDApO1xuXG4gICAgICAgIGVsZW0uYnVmZmVyZWQgPSB7XG4gICAgICAgICAgICBsZW5ndGg6IDIsXG4gICAgICAgICAgICBlbmQ6ICgpID0+IHtyZXR1cm4gNTA7fVxuICAgICAgICB9O1xuICAgIH0pO1xufSk7XG5cbmludGVyZmFjZSBEZWNvcmF0b3JJbnZvY2F0aW9uIHtcbiAgdHlwZTogRnVuY3Rpb247XG4gIGFyZ3M/OiBhbnlbXTtcbn1cbiJdfQ==