UNPKG

computed-types

Version:

Runtime validation types for TypeScript.

176 lines (113 loc) 22.3 kB
"use strict"; require("mocha"); var _chai = require("chai"); var _string = _interopRequireDefault(require("./string")); var _utils = require("./schema/utils"); var _errors = require("./schema/errors"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable @typescript-eslint/no-explicit-any */ describe('string', () => { it('string()', () => { _chai.assert.equal((0, _string.default)('foo'), 'foo'); _chai.assert.equal((0, _string.default)('foo '), 'foo '); _chai.assert.equal((0, _string.default)(' foo '), ' foo '); _chai.assert.equal((0, _string.default)(' '), ' '); _chai.assert.equal((0, _string.default)(''), ''); _chai.assert.throws(() => (0, _string.default)(null), _errors.ValidationError); _chai.assert.throws(() => (0, _string.default)(undefined), _errors.ValidationError); _chai.assert.throws(() => (0, _string.default)({}), _errors.ValidationError); _chai.assert.throws(() => (0, _string.default)({ foo: 1 }), _errors.ValidationError); _chai.assert.throws(() => (0, _string.default)(122), _errors.ValidationError); _chai.assert.throws(() => (0, _string.default)(true), _errors.ValidationError); _chai.assert.throws(() => (0, _string.default)(false), _errors.ValidationError); }); it('.toLowerCase()', () => { _chai.assert.equal(_string.default.toLowerCase()('Foo'), 'foo'); _chai.assert.equal(_string.default.toLowerCase()('foo'), 'foo'); _chai.assert.equal(_string.default.toLowerCase()(' fOo '), ' foo '); }); it('.toUpperCase()', () => { _chai.assert.equal(_string.default.toUpperCase()('Foo'), 'FOO'); _chai.assert.equal(_string.default.toUpperCase()('foo'), 'FOO'); _chai.assert.equal(_string.default.toUpperCase()(' fOo '), ' FOO '); }); it('.toLocaleLowerCase()', () => { _chai.assert.equal(_string.default.toLocaleLowerCase()('İstanbul'), 'i̇stanbul'); _chai.assert.equal(_string.default.toLocaleLowerCase('en-US')('İstanbul'), 'i̇stanbul'); _chai.assert.equal(_string.default.toLocaleLowerCase('TR')('İstanbul'), 'istanbul'); }); it('.toLocaleUpperCase()', () => { _chai.assert.equal(_string.default.toLocaleUpperCase()('istanbul'), 'ISTANBUL'); _chai.assert.equal(_string.default.toLocaleUpperCase('en-US')('istanbul'), 'ISTANBUL'); _chai.assert.equal(_string.default.toLocaleUpperCase('TR')('istanbul'), 'İSTANBUL'); }); it('.normalize()', () => { const name1 = '\u0041\u006d\u00e9\u006c\u0069\u0065'; const name2 = '\u0041\u006d\u0065\u0301\u006c\u0069\u0065'; _chai.assert.equal(_string.default.normalize()(name1), 'Amélie'); _chai.assert.equal(_string.default.normalize()(name2), 'Amélie'); }); it('.trim()', () => { _chai.assert.equal(_string.default.trim()('foo'), 'foo'); _chai.assert.equal(_string.default.trim()('foo '), 'foo'); _chai.assert.equal(_string.default.trim()(' foo\n\nbar '), 'foo\n\nbar'); _chai.assert.throws(() => _string.default.trim()(false), _errors.ValidationError); }); it('.trim().toLowerCase()', () => { _chai.assert.equal(_string.default.trim().toLowerCase()(' Foo '), 'foo'); _chai.assert.equal(_string.default.toLowerCase().trim()(' Fo o '), 'fo o'); }); it('.truncate()', () => { _chai.assert.equal(_string.default.truncate(20)('A very long text here to trim'), 'A very long text he…'); _chai.assert.equal(_string.default.truncate(20)('A very long text here to trim').length, 20); _chai.assert.equal(_string.default.truncate(20)('A short string'), 'A short string'); }); it('.min()', () => { _chai.assert.equal(_string.default.min(1)('foo'), 'foo'); _chai.assert.equal(_string.default.min(1)('a'), 'a'); _chai.assert.throws(() => _string.default.min(1)(''), RangeError); _chai.assert.throws(() => _string.default.min(2)('a'), RangeError); _chai.assert.throws(() => _string.default.min(2)(null), _errors.ValidationError); _chai.assert.throws(() => _string.default.min(2, 'test')('a'), _errors.ValidationError, 'test'); }); it('.max()', () => { _chai.assert.equal(_string.default.max(2)('ab'), 'ab'); _chai.assert.equal(_string.default.max(2)('a'), 'a'); _chai.assert.equal(_string.default.max(2)(''), ''); _chai.assert.throws(() => _string.default.max(2)('abc'), RangeError); _chai.assert.throws(() => _string.default.max(2)(null), _errors.ValidationError); _chai.assert.throws(() => _string.default.max(2, 'test')('abc'), _errors.ValidationError, 'test'); }); it('.between()', () => { _chai.assert.equal(_string.default.between(1, 3)('ab'), 'ab'); _chai.assert.equal(_string.default.between(1, 3)('abc'), 'abc'); _chai.assert.equal(_string.default.between(1, 3)('a'), 'a'); _chai.assert.equal(_string.default.between(3, 3)('abc'), 'abc'); _chai.assert.throws(() => _string.default.between(1, 3)(''), RangeError); _chai.assert.throws(() => _string.default.between(3, 3)('ab'), RangeError); _chai.assert.throws(() => _string.default.between(3, 3)('abcd'), RangeError); _chai.assert.throws(() => _string.default.between(1, 3)(null), _errors.ValidationError); _chai.assert.throws(() => _string.default.between(1, 3, 'test')(''), _errors.ValidationError, 'test'); }); it('.regexp()', () => { _chai.assert.equal(_string.default.regexp(/^foo$/i)('Foo'), 'Foo'); _chai.assert.equal(_string.default.regexp(/^foo$/i)('foo'), 'foo'); _chai.assert.throws(() => _string.default.regexp(/^foo$/i)(' foo'), _errors.ValidationError); _chai.assert.throws(() => _string.default.regexp(/^foo$/i)(''), _errors.ValidationError); _chai.assert.throws(() => _string.default.regexp(/^foo$/i, 'test')(''), _errors.ValidationError, 'test'); _chai.assert.throws(() => _string.default.regexp(/^foo$/i)(null), _errors.ValidationError); }); it('name use case', () => { const validator = _string.default.trim().normalize().between(3, 40).optional(); (0, _utils.typeCheck)('ok'); (0, _utils.typeCheck)('ok'); _chai.assert.equal(validator('John Doe'), 'John Doe'); _chai.assert.equal(validator('John Doe '), 'John Doe'); _chai.assert.equal(validator(), undefined); _chai.assert.equal(validator(''), undefined); _chai.assert.throws(() => validator('av '), RangeError); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdHJpbmcudGVzdC50cyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsIml0IiwiYXNzZXJ0IiwiZXF1YWwiLCJ0aHJvd3MiLCJWYWxpZGF0aW9uRXJyb3IiLCJ1bmRlZmluZWQiLCJmb28iLCJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsIm5hbWUxIiwibmFtZTIiLCJub3JtYWxpemUiLCJ0cmltIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJtaW4iLCJSYW5nZUVycm9yIiwibWF4IiwiYmV0d2VlbiIsInJlZ2V4cCIsInZhbGlkYXRvciIsIm9wdGlvbmFsIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUE7QUFFQUEsUUFBUSxDQUFDLFFBQUQsRUFBVyxNQUFNO0FBQ3ZCQyxFQUFBQSxFQUFFLENBQUMsVUFBRCxFQUFhLE1BQU07QUFDbkJDLGlCQUFPQyxLQUFQLENBQWEscUJBQU8sS0FBUCxDQUFiLEVBQTRCLEtBQTVCOztBQUNBRCxpQkFBT0MsS0FBUCxDQUFhLHFCQUFPLE1BQVAsQ0FBYixFQUE2QixNQUE3Qjs7QUFDQUQsaUJBQU9DLEtBQVAsQ0FBYSxxQkFBTyxPQUFQLENBQWIsRUFBOEIsT0FBOUI7O0FBQ0FELGlCQUFPQyxLQUFQLENBQWEscUJBQU8sR0FBUCxDQUFiLEVBQTBCLEdBQTFCOztBQUNBRCxpQkFBT0MsS0FBUCxDQUFhLHFCQUFPLEVBQVAsQ0FBYixFQUF5QixFQUF6Qjs7QUFFQUQsaUJBQU9FLE1BQVAsQ0FBYyxNQUFNLHFCQUFPLElBQVAsQ0FBcEIsRUFBeUNDLHVCQUF6Qzs7QUFDQUgsaUJBQU9FLE1BQVAsQ0FBYyxNQUFNLHFCQUFPRSxTQUFQLENBQXBCLEVBQThDRCx1QkFBOUM7O0FBQ0FILGlCQUFPRSxNQUFQLENBQWMsTUFBTSxxQkFBTyxFQUFQLENBQXBCLEVBQXVDQyx1QkFBdkM7O0FB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QUVBSixpQkFBT0UsTUFBUCxDQUFjLE1BQU1vQixTQUFTLENBQUMsUUFBRCxDQUE3QixFQUF5Q0osVUFBekM7QUFDRCxHQVpDLENBQUY7QUFhRCxDQTFJTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdjaGFpJztcbmltcG9ydCBzdHJpbmcgZnJvbSAnLi9zdHJpbmcnO1xuaW1wb3J0IHsgdHlwZUNoZWNrIH0gZnJvbSAnLi9zY2hlbWEvdXRpbHMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9zY2hlbWEvZXJyb3JzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5kZXNjcmliZSgnc3RyaW5nJywgKCkgPT4ge1xuICBpdCgnc3RyaW5nKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZygnZm9vJyksICdmb28nKTtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nKCdmb28gJyksICdmb28gJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZygnIGZvbyAnKSwgJyBmb28gJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZygnICcpLCAnICcpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcoJycpLCAnJyk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZyhudWxsIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcodW5kZWZpbmVkIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcoe30gYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZyh7IGZvbzogMSB9IGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcoMTIyIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcodHJ1ZSBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nKGZhbHNlIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gIH0pO1xuXG4gIGl0KCcudG9Mb3dlckNhc2UoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLnRvTG93ZXJDYXNlKCkoJ0ZvbycpLCAnZm9vJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50b0xvd2VyQ2FzZSgpKCdmb28nKSwgJ2ZvbycpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudG9Mb3dlckNhc2UoKSgnIGZPbyAnKSwgJyBmb28gJyk7XG4gIH0pO1xuXG4gIGl0KCcudG9VcHBlckNhc2UoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLnRvVXBwZXJDYXNlKCkoJ0ZvbycpLCAnRk9PJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50b1VwcGVyQ2FzZSgpKCdmb28nKSwgJ0ZPTycpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudG9VcHBlckNhc2UoKSgnIGZPbyAnKSwgJyBGT08gJyk7XG4gIH0pO1xuXG4gIGl0KCcudG9Mb2NhbGVMb3dlckNhc2UoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLnRvTG9jYWxlTG93ZXJDYXNlKCkoJ8Swc3RhbmJ1bCcpLCAnacyHc3RhbmJ1bCcpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudG9Mb2NhbGVMb3dlckNhc2UoJ2VuLVVTJykoJ8Swc3RhbmJ1bCcpLCAnacyHc3RhbmJ1bCcpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudG9Mb2NhbGVMb3dlckNhc2UoJ1RSJykoJ8Swc3RhbmJ1bCcpLCAnaXN0YW5idWwnKTtcbiAgfSk7XG5cbiAgaXQoJy50b0xvY2FsZVVwcGVyQ2FzZSgpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudG9Mb2NhbGVVcHBlckNhc2UoKSgnaXN0YW5idWwnKSwgJ0lTVEFOQlVMJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50b0xvY2FsZVVwcGVyQ2FzZSgnZW4tVVMnKSgnaXN0YW5idWwnKSwgJ0lTVEFOQlVMJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50b0xvY2FsZVVwcGVyQ2FzZSgnVFInKSgnaXN0YW5idWwnKSwgJ8SwU1RBTkJVTCcpO1xuICB9KTtcblxuICBpdCgnLm5vcm1hbGl6ZSgpJywgKCkgPT4ge1xuICAgIGNvbnN0IG5hbWUxID0gJ1xcdTAwNDFcXHUwMDZkXFx1MDBlOVxcdTAwNmNcXHUwMDY5XFx1MDA2NSc7XG4gICAgY29uc3QgbmFtZTIgPSAnXFx1MDA0MVxcdTAwNmRcXHUwMDY1XFx1MDMwMVxcdTAwNmNcXHUwMDY5XFx1MDA2NSc7XG5cbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLm5vcm1hbGl6ZSgpKG5hbWUxKSwgJ0Ftw6lsaWUnKTtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLm5vcm1hbGl6ZSgpKG5hbWUyKSwgJ0Ftw6lsaWUnKTtcbiAgfSk7XG5cbiAgaXQoJy50cmltKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50cmltKCkoJ2ZvbycpLCAnZm9vJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50cmltKCkoJ2ZvbyAnKSwgJ2ZvbycpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudHJpbSgpKCcgZm9vXFxuXFxuYmFyICcpLCAnZm9vXFxuXFxuYmFyJyk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy50cmltKCkoZmFsc2UgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJy50cmltKCkudG9Mb3dlckNhc2UoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLnRyaW0oKS50b0xvd2VyQ2FzZSgpKCcgRm9vICAnKSwgJ2ZvbycpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcudG9Mb3dlckNhc2UoKS50cmltKCkoJyBGbyBvICAnKSwgJ2ZvIG8nKTtcbiAgfSk7XG5cbiAgaXQoJy50cnVuY2F0ZSgpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChcbiAgICAgIHN0cmluZy50cnVuY2F0ZSgyMCkoJ0EgdmVyeSBsb25nIHRleHQgaGVyZSB0byB0cmltJyksXG4gICAgICAnQSB2ZXJ5IGxvbmcgdGV4dCBoZeKApicsXG4gICAgKTtcbiAgICBhc3NlcnQuZXF1YWwoXG4gICAgICBzdHJpbmcudHJ1bmNhdGUoMjApKCdBIHZlcnkgbG9uZyB0ZXh0IGhlcmUgdG8gdHJpbScpLmxlbmd0aCxcbiAgICAgIDIwLFxuICAgICk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy50cnVuY2F0ZSgyMCkoJ0Egc2hvcnQgc3RyaW5nJyksICdBIHNob3J0IHN0cmluZycpO1xuICB9KTtcblxuICBpdCgnLm1pbigpJywgKCkgPT4ge1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcubWluKDEpKCdmb28nKSwgJ2ZvbycpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcubWluKDEpKCdhJyksICdhJyk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5taW4oMSkoJycpLCBSYW5nZUVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5taW4oMikoJ2EnKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcubWluKDIpKG51bGwgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5taW4oMiwgJ3Rlc3QnKSgnYScpLCBWYWxpZGF0aW9uRXJyb3IsICd0ZXN0Jyk7XG4gIH0pO1xuXG4gIGl0KCcubWF4KCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy5tYXgoMikoJ2FiJyksICdhYicpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcubWF4KDIpKCdhJyksICdhJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy5tYXgoMikoJycpLCAnJyk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5tYXgoMikoJ2FiYycpLCBSYW5nZUVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5tYXgoMikobnVsbCBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nLm1heCgyLCAndGVzdCcpKCdhYmMnKSwgVmFsaWRhdGlvbkVycm9yLCAndGVzdCcpO1xuICB9KTtcblxuICBpdCgnLmJldHdlZW4oKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLmJldHdlZW4oMSwgMykoJ2FiJyksICdhYicpO1xuICAgIGFzc2VydC5lcXVhbChzdHJpbmcuYmV0d2VlbigxLCAzKSgnYWJjJyksICdhYmMnKTtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLmJldHdlZW4oMSwgMykoJ2EnKSwgJ2EnKTtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLmJldHdlZW4oMywgMykoJ2FiYycpLCAnYWJjJyk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5iZXR3ZWVuKDEsIDMpKCcnKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcuYmV0d2VlbigzLCAzKSgnYWInKSwgUmFuZ2VFcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcuYmV0d2VlbigzLCAzKSgnYWJjZCcpLCBSYW5nZUVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZy5iZXR3ZWVuKDEsIDMpKG51bGwgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gc3RyaW5nLmJldHdlZW4oMSwgMywgJ3Rlc3QnKSgnJyksXG4gICAgICBWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAndGVzdCcsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJy5yZWdleHAoKScsICgpID0+IHtcbiAgICBhc3NlcnQuZXF1YWwoc3RyaW5nLnJlZ2V4cCgvXmZvbyQvaSkoJ0ZvbycpLCAnRm9vJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHN0cmluZy5yZWdleHAoL15mb28kL2kpKCdmb28nKSwgJ2ZvbycpO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmcucmVnZXhwKC9eZm9vJC9pKSgnIGZvbycpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nLnJlZ2V4cCgvXmZvbyQvaSkoJycpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBzdHJpbmcucmVnZXhwKC9eZm9vJC9pLCAndGVzdCcpKCcnKSxcbiAgICAgIFZhbGlkYXRpb25FcnJvcixcbiAgICAgICd0ZXN0JyxcbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nLnJlZ2V4cCgvXmZvbyQvaSkobnVsbCBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICB9KTtcblxuICBpdCgnbmFtZSB1c2UgY2FzZScsICgpID0+IHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzdHJpbmcudHJpbSgpLm5vcm1hbGl6ZSgpLmJldHdlZW4oMywgNDApLm9wdGlvbmFsKCk7XG5cbiAgICB0eXBlQ2hlY2s8UGFyYW1ldGVyczx0eXBlb2YgdmFsaWRhdG9yPiwgWyhzdHJpbmcgfCBudWxsKT9dPignb2snKTtcbiAgICB0eXBlQ2hlY2s8W1JldHVyblR5cGU8dHlwZW9mIHZhbGlkYXRvcj5dLCBbc3RyaW5nIHwgdW5kZWZpbmVkXT4oJ29rJyk7XG5cbiAgICBhc3NlcnQuZXF1YWwodmFsaWRhdG9yKCdKb2huIERvZScpLCAnSm9obiBEb2UnKTtcbiAgICBhc3NlcnQuZXF1YWwodmFsaWRhdG9yKCdKb2huIERvZSAnKSwgJ0pvaG4gRG9lJyk7XG4gICAgYXNzZXJ0LmVxdWFsKHZhbGlkYXRvcigpLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5lcXVhbCh2YWxpZGF0b3IoJycpLCB1bmRlZmluZWQpO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB2YWxpZGF0b3IoJ2F2ICAgICcpLCBSYW5nZUVycm9yKTtcbiAgfSk7XG59KTtcbiJdfQ==