UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

196 lines 22.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable import/order */ const context_1 = require("../../lib/commands/context"); const settings_1 = require("../../lib/settings"); describe('context --list', () => { test('runs', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); expect(configuration.context.all).toEqual({ foo: 'bar', }); // WHEN await (0, context_1.realHandler)({ configuration, args: {}, }); }); }); describe('context --reset', () => { test('can remove a context key', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); configuration.context.set('baz', 'quux'); expect(configuration.context.all).toEqual({ foo: 'bar', baz: 'quux', }); // WHEN await (0, context_1.realHandler)({ configuration, args: { reset: 'foo' }, }); // THEN expect(configuration.context.all).toEqual({ baz: 'quux', }); }); test('can remove a context key using number', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); configuration.context.set('baz', 'quux'); expect(configuration.context.all).toEqual({ foo: 'bar', baz: 'quux', }); // WHEN await (0, context_1.realHandler)({ configuration, args: { reset: '1' }, }); // THEN expect(configuration.context.all).toEqual({ foo: 'bar', }); }); test('can reset matched pattern', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); configuration.context.set('match-a', 'baz'); configuration.context.set('match-b', 'qux'); expect(configuration.context.all).toEqual({ 'foo': 'bar', 'match-a': 'baz', 'match-b': 'qux', }); // WHEN await (0, context_1.realHandler)({ configuration, args: { reset: 'match-*' }, }); // THEN expect(configuration.context.all).toEqual({ foo: 'bar', }); }); test('prefers an exact match', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); configuration.context.set('fo*', 'baz'); expect(configuration.context.all).toEqual({ 'foo': 'bar', 'fo*': 'baz', }); // WHEN await (0, context_1.realHandler)({ configuration, args: { reset: 'fo*' }, }); // THEN expect(configuration.context.all).toEqual({ foo: 'bar', }); }); test('doesn\'t throw when at least one match is reset', async () => { // GIVEN const configuration = new settings_1.Configuration(); const readOnlySettings = new settings_1.Settings({ 'foo': 'bar', 'match-a': 'baz', }, true); configuration.context = new settings_1.Context(readOnlySettings, new settings_1.Settings()); configuration.context.set('match-b', 'quux'); // When await expect((0, context_1.realHandler)({ configuration, args: { reset: 'match-*' }, })); // Then expect(configuration.context.all).toEqual({ 'foo': 'bar', 'match-a': 'baz', }); }); test('throws when key not found', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); expect(configuration.context.all).toEqual({ foo: 'bar', }); // THEN await expect((0, context_1.realHandler)({ configuration, args: { reset: 'baz' }, })).rejects.toThrow(/No context value matching key/); }); test('Doesn\'t throw when key not found and --force is set', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); expect(configuration.context.all).toEqual({ foo: 'bar', }); // THEN await expect((0, context_1.realHandler)({ configuration, args: { reset: 'baz', force: true }, })); }); test('throws when no key of index found', async () => { // GIVEN const configuration = new settings_1.Configuration(); configuration.context.set('foo', 'bar'); expect(configuration.context.all).toEqual({ foo: 'bar', }); // THEN await expect((0, context_1.realHandler)({ configuration, args: { reset: '2' }, })).rejects.toThrow(/No context key with number/); }); test('throws when resetting read-only values', async () => { // GIVEN const configuration = new settings_1.Configuration(); const readOnlySettings = new settings_1.Settings({ foo: 'bar', }, true); configuration.context = new settings_1.Context(readOnlySettings); expect(configuration.context.all).toEqual({ foo: 'bar', }); // THEN await expect((0, context_1.realHandler)({ configuration, args: { reset: 'foo' }, })).rejects.toThrow(/Cannot reset readonly context value with key/); }); test('throws when no matches could be reset', async () => { // GIVEN const configuration = new settings_1.Configuration(); const readOnlySettings = new settings_1.Settings({ 'foo': 'bar', 'match-a': 'baz', 'match-b': 'quux', }, true); configuration.context = new settings_1.Context(readOnlySettings); expect(configuration.context.all).toEqual({ 'foo': 'bar', 'match-a': 'baz', 'match-b': 'quux', }); // THEN await expect((0, context_1.realHandler)({ configuration, args: { reset: 'match-*' }, })).rejects.toThrow(/None of the matched context values could be reset/); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1jb21tYW5kLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb250ZXh0LWNvbW1hbmQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQUNqQyx3REFBeUQ7QUFDekQsaURBQXNFO0FBRXRFLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUcsRUFBRTtRQUNyQixRQUFRO1FBQ1IsTUFBTSxhQUFhLEdBQUcsSUFBSSx3QkFBYSxFQUFFLENBQUM7UUFDMUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLElBQUEscUJBQVcsRUFBQztZQUNoQixhQUFhO1lBQ2IsSUFBSSxFQUFFLEVBQUU7U0FDRixDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUMsUUFBUTtRQUNSLE1BQU0sYUFBYSxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3hDLEdBQUcsRUFBRSxLQUFLO1lBQ1YsR0FBRyxFQUFFLE1BQU07U0FDWixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxJQUFBLHFCQUFXLEVBQUM7WUFDaEIsYUFBYTtZQUNiLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO1FBRVYsT0FBTztRQUNQLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELFFBQVE7UUFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSztZQUNWLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sSUFBQSxxQkFBVyxFQUFDO1lBQ2hCLGFBQWE7WUFDYixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO1FBRVYsT0FBTztRQUNQLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLFFBQVE7UUFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1QyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsS0FBSztZQUNoQixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxJQUFBLHFCQUFXLEVBQUM7WUFDaEIsYUFBYTtZQUNiLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO1FBRVYsT0FBTztRQUNQLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hDLFFBQVE7UUFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxLQUFLLEVBQUUsS0FBSztZQUNaLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sSUFBQSxxQkFBVyxFQUFDO1lBQ2hCLGFBQWE7WUFDYixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1NBQ2hCLENBQUMsQ0FBQztRQUVWLE9BQU87UUFDUCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsR0FBRyxFQUFFLEtBQUs7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxpREFBaUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRSxRQUFRO1FBQ1IsTUFBTSxhQUFhLEdBQUcsSUFBSSx3QkFBYSxFQUFFLENBQUM7UUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLG1CQUFRLENBQUM7WUFDcEMsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsS0FBSztTQUNqQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsYUFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLGtCQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxtQkFBUSxFQUFFLENBQUMsQ0FBQztRQUN0RSxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFN0MsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQztZQUN2QixhQUFhO1lBQ2IsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtTQUNwQixDQUFDLENBQUMsQ0FBQztRQUVYLE9BQU87UUFDUCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywyQkFBMkIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzQyxRQUFRO1FBQ1IsTUFBTSxhQUFhLEdBQUcsSUFBSSx3QkFBYSxFQUFFLENBQUM7UUFDMUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLE1BQU0sQ0FBQyxJQUFBLHFCQUFXLEVBQUM7WUFDdkIsYUFBYTtZQUNiLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDaEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RFLFFBQVE7UUFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3hDLEdBQUcsRUFBRSxLQUFLO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLElBQUEscUJBQVcsRUFBQztZQUN2QixhQUFhO1lBQ2IsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsbUNBQW1DLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkQsUUFBUTtRQUNSLE1BQU0sYUFBYSxHQUFHLElBQUksd0JBQWEsRUFBRSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsR0FBRyxFQUFFLEtBQUs7U0FDWCxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxNQUFNLENBQUMsSUFBQSxxQkFBVyxFQUFDO1lBQ3ZCLGFBQWE7WUFDYixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1NBQ2QsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hELFFBQVE7UUFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksbUJBQVEsQ0FBQztZQUNwQyxHQUFHLEVBQUUsS0FBSztTQUNYLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksa0JBQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLE1BQU0sQ0FBQyxJQUFBLHFCQUFXLEVBQUM7WUFDdkIsYUFBYTtZQUNiLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDaEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZELFFBQVE7UUFDUixNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksbUJBQVEsQ0FBQztZQUNwQyxLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxNQUFNO1NBQ2xCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxhQUFhLENBQUMsT0FBTyxHQUFHLElBQUksa0JBQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxNQUFNO1NBQ2xCLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLE1BQU0sQ0FBQyxJQUFBLHFCQUFXLEVBQUM7WUFDdkIsYUFBYTtZQUNiLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7U0FDcEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ2xGLENBQUMsQ0FBQyxDQUFDO0FBRUwsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvb3JkZXIgKi9cbmltcG9ydCB7IHJlYWxIYW5kbGVyIH0gZnJvbSAnLi4vLi4vbGliL2NvbW1hbmRzL2NvbnRleHQnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiwgU2V0dGluZ3MsIENvbnRleHQgfSBmcm9tICcuLi8uLi9saWIvc2V0dGluZ3MnO1xuXG5kZXNjcmliZSgnY29udGV4dCAtLWxpc3QnLCAoKSA9PiB7XG4gIHRlc3QoJ3J1bnMnLCBhc3luYygpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIGNvbmZpZ3VyYXRpb24uY29udGV4dC5zZXQoJ2ZvbycsICdiYXInKTtcblxuICAgIGV4cGVjdChjb25maWd1cmF0aW9uLmNvbnRleHQuYWxsKS50b0VxdWFsKHtcbiAgICAgIGZvbzogJ2JhcicsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgcmVhbEhhbmRsZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIGFyZ3M6IHt9LFxuICAgIH0gYXMgYW55KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NvbnRleHQgLS1yZXNldCcsICgpID0+IHtcbiAgdGVzdCgnY2FuIHJlbW92ZSBhIGNvbnRleHQga2V5JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnZm9vJywgJ2JhcicpO1xuICAgIGNvbmZpZ3VyYXRpb24uY29udGV4dC5zZXQoJ2JheicsICdxdXV4Jyk7XG5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICBmb286ICdiYXInLFxuICAgICAgYmF6OiAncXV1eCcsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgcmVhbEhhbmRsZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIGFyZ3M6IHsgcmVzZXQ6ICdmb28nIH0sXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChjb25maWd1cmF0aW9uLmNvbnRleHQuYWxsKS50b0VxdWFsKHtcbiAgICAgIGJhejogJ3F1dXgnLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjYW4gcmVtb3ZlIGEgY29udGV4dCBrZXkgdXNpbmcgbnVtYmVyJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnZm9vJywgJ2JhcicpO1xuICAgIGNvbmZpZ3VyYXRpb24uY29udGV4dC5zZXQoJ2JheicsICdxdXV4Jyk7XG5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICBmb286ICdiYXInLFxuICAgICAgYmF6OiAncXV1eCcsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgcmVhbEhhbmRsZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIGFyZ3M6IHsgcmVzZXQ6ICcxJyB9LFxuICAgIH0gYXMgYW55KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICBmb286ICdiYXInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjYW4gcmVzZXQgbWF0Y2hlZCBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnZm9vJywgJ2JhcicpO1xuICAgIGNvbmZpZ3VyYXRpb24uY29udGV4dC5zZXQoJ21hdGNoLWEnLCAnYmF6Jyk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnbWF0Y2gtYicsICdxdXgnKTtcblxuICAgIGV4cGVjdChjb25maWd1cmF0aW9uLmNvbnRleHQuYWxsKS50b0VxdWFsKHtcbiAgICAgICdmb28nOiAnYmFyJyxcbiAgICAgICdtYXRjaC1hJzogJ2JheicsXG4gICAgICAnbWF0Y2gtYic6ICdxdXgnLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IHJlYWxIYW5kbGVyKHtcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBhcmdzOiB7IHJlc2V0OiAnbWF0Y2gtKicgfSxcbiAgICB9IGFzIGFueSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNvbmZpZ3VyYXRpb24uY29udGV4dC5hbGwpLnRvRXF1YWwoe1xuICAgICAgZm9vOiAnYmFyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgncHJlZmVycyBhbiBleGFjdCBtYXRjaCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIGNvbmZpZ3VyYXRpb24uY29udGV4dC5zZXQoJ2ZvbycsICdiYXInKTtcbiAgICBjb25maWd1cmF0aW9uLmNvbnRleHQuc2V0KCdmbyonLCAnYmF6Jyk7XG5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICAnZm9vJzogJ2JhcicsXG4gICAgICAnZm8qJzogJ2JheicsXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgcmVhbEhhbmRsZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIGFyZ3M6IHsgcmVzZXQ6ICdmbyonIH0sXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChjb25maWd1cmF0aW9uLmNvbnRleHQuYWxsKS50b0VxdWFsKHtcbiAgICAgIGZvbzogJ2JhcicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvZXNuXFwndCB0aHJvdyB3aGVuIGF0IGxlYXN0IG9uZSBtYXRjaCBpcyByZXNldCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHJlYWRPbmx5U2V0dGluZ3MgPSBuZXcgU2V0dGluZ3Moe1xuICAgICAgJ2Zvbyc6ICdiYXInLFxuICAgICAgJ21hdGNoLWEnOiAnYmF6JyxcbiAgICB9LCB0cnVlKTtcbiAgICBjb25maWd1cmF0aW9uLmNvbnRleHQgPSBuZXcgQ29udGV4dChyZWFkT25seVNldHRpbmdzLCBuZXcgU2V0dGluZ3MoKSk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnbWF0Y2gtYicsICdxdXV4Jyk7XG5cbiAgICAvLyBXaGVuXG4gICAgYXdhaXQgZXhwZWN0KHJlYWxIYW5kbGVyKHtcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBhcmdzOiB7IHJlc2V0OiAnbWF0Y2gtKicgfSxcbiAgICB9IGFzIGFueSkpO1xuXG4gICAgLy8gVGhlblxuICAgIGV4cGVjdChjb25maWd1cmF0aW9uLmNvbnRleHQuYWxsKS50b0VxdWFsKHtcbiAgICAgICdmb28nOiAnYmFyJyxcbiAgICAgICdtYXRjaC1hJzogJ2JheicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Rocm93cyB3aGVuIGtleSBub3QgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25maWd1cmF0aW9uLmNvbnRleHQuc2V0KCdmb28nLCAnYmFyJyk7XG5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICBmb286ICdiYXInLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IGV4cGVjdChyZWFsSGFuZGxlcih7XG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgYXJnczogeyByZXNldDogJ2JheicgfSxcbiAgICB9IGFzIGFueSkpLnJlamVjdHMudG9UaHJvdygvTm8gY29udGV4dCB2YWx1ZSBtYXRjaGluZyBrZXkvKTtcbiAgfSk7XG5cbiAgdGVzdCgnRG9lc25cXCd0IHRocm93IHdoZW4ga2V5IG5vdCBmb3VuZCBhbmQgLS1mb3JjZSBpcyBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25maWd1cmF0aW9uLmNvbnRleHQuc2V0KCdmb28nLCAnYmFyJyk7XG5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICBmb286ICdiYXInLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IGV4cGVjdChyZWFsSGFuZGxlcih7XG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgYXJnczogeyByZXNldDogJ2JheicsIGZvcmNlOiB0cnVlIH0sXG4gICAgfSBhcyBhbnkpKTtcbiAgfSk7XG5cbiAgdGVzdCgndGhyb3dzIHdoZW4gbm8ga2V5IG9mIGluZGV4IGZvdW5kJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0LnNldCgnZm9vJywgJ2JhcicpO1xuXG4gICAgZXhwZWN0KGNvbmZpZ3VyYXRpb24uY29udGV4dC5hbGwpLnRvRXF1YWwoe1xuICAgICAgZm9vOiAnYmFyJyxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QocmVhbEhhbmRsZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIGFyZ3M6IHsgcmVzZXQ6ICcyJyB9LFxuICAgIH0gYXMgYW55KSkucmVqZWN0cy50b1Rocm93KC9ObyBjb250ZXh0IGtleSB3aXRoIG51bWJlci8pO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3Mgd2hlbiByZXNldHRpbmcgcmVhZC1vbmx5IHZhbHVlcycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHJlYWRPbmx5U2V0dGluZ3MgPSBuZXcgU2V0dGluZ3Moe1xuICAgICAgZm9vOiAnYmFyJyxcbiAgICB9LCB0cnVlKTtcbiAgICBjb25maWd1cmF0aW9uLmNvbnRleHQgPSBuZXcgQ29udGV4dChyZWFkT25seVNldHRpbmdzKTtcblxuICAgIGV4cGVjdChjb25maWd1cmF0aW9uLmNvbnRleHQuYWxsKS50b0VxdWFsKHtcbiAgICAgIGZvbzogJ2JhcicsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KHJlYWxIYW5kbGVyKHtcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBhcmdzOiB7IHJlc2V0OiAnZm9vJyB9LFxuICAgIH0gYXMgYW55KSkucmVqZWN0cy50b1Rocm93KC9DYW5ub3QgcmVzZXQgcmVhZG9ubHkgY29udGV4dCB2YWx1ZSB3aXRoIGtleS8pO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3Mgd2hlbiBubyBtYXRjaGVzIGNvdWxkIGJlIHJlc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgcmVhZE9ubHlTZXR0aW5ncyA9IG5ldyBTZXR0aW5ncyh7XG4gICAgICAnZm9vJzogJ2JhcicsXG4gICAgICAnbWF0Y2gtYSc6ICdiYXonLFxuICAgICAgJ21hdGNoLWInOiAncXV1eCcsXG4gICAgfSwgdHJ1ZSk7XG4gICAgY29uZmlndXJhdGlvbi5jb250ZXh0ID0gbmV3IENvbnRleHQocmVhZE9ubHlTZXR0aW5ncyk7XG5cbiAgICBleHBlY3QoY29uZmlndXJhdGlvbi5jb250ZXh0LmFsbCkudG9FcXVhbCh7XG4gICAgICAnZm9vJzogJ2JhcicsXG4gICAgICAnbWF0Y2gtYSc6ICdiYXonLFxuICAgICAgJ21hdGNoLWInOiAncXV1eCcsXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KHJlYWxIYW5kbGVyKHtcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBhcmdzOiB7IHJlc2V0OiAnbWF0Y2gtKicgfSxcbiAgICB9IGFzIGFueSkpLnJlamVjdHMudG9UaHJvdygvTm9uZSBvZiB0aGUgbWF0Y2hlZCBjb250ZXh0IHZhbHVlcyBjb3VsZCBiZSByZXNldC8pO1xuICB9KTtcblxufSk7XG5cbiJdfQ==