Innovenergy_trunk/frontend/node_modules/testcafe/lib/services/serialization/test-structure.js

91 lines
13 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.restore = exports.serialize = exports.flatten = exports.isFixture = exports.isTest = void 0;
const lodash_1 = require("lodash");
const protocol_1 = require("../compiler/protocol");
const unit_type_1 = __importDefault(require("../../api/structure/unit-type"));
const RECURSIVE_PROPERTIES = ['testFile', 'fixture', 'currentFixture', 'collectedTests'];
function isProperty(object, property) {
return object.hasOwnProperty(property);
}
function isTest(value) {
return value.unitType === unit_type_1.default.test;
}
exports.isTest = isTest;
function isFixture(value) {
return value.unitType === unit_type_1.default.fixture;
}
exports.isFixture = isFixture;
function mapProperties(object, properties, mapper) {
for (const property of properties) {
if (!isProperty(object, property))
continue;
const value = object[property];
if (Array.isArray(value))
object[property] = value.map(item => mapper({ item, property, object }));
else
object[property] = mapper({ item: object[property], property, object });
}
}
function replaceFunctionProperties(unit) {
mapProperties(unit, protocol_1.FUNCTION_PROPERTIES, ({ item }) => !!item);
}
function restoreFunctionProperties(unit, mapper) {
mapProperties(unit, protocol_1.FUNCTION_PROPERTIES, ({ item, object, property }) => item ? mapper(object.id, property) : item);
}
function flattenRecursiveProperties(unit) {
mapProperties(unit, RECURSIVE_PROPERTIES, ({ item }) => item.id);
}
function restoreRecursiveProperties(unit, units) {
mapProperties(unit, RECURSIVE_PROPERTIES, ({ item }) => units[item]);
}
function restorePredicateInRequestFilterRules(test, mapper) {
test.requestHooks.forEach(hook => {
for (let i = 0; i < hook._requestFilterRules.length; i++) {
const targetRule = hook._requestFilterRules[i];
if (!targetRule.isPredicate)
continue;
targetRule.options = mapper({
testId: test.id,
hookId: hook.id,
ruleId: targetRule.id,
});
}
});
}
function flatten(tests) {
const testFiles = (0, lodash_1.uniq)(tests.map(test => test.testFile));
const fixtures = (0, lodash_1.uniq)(tests.map(test => test.fixture));
return (0, lodash_1.keyBy)([...tests, ...fixtures, ...testFiles], unit => unit.id);
}
exports.flatten = flatten;
function serialize(units) {
const result = {};
for (const unit of Object.values(units)) {
// @ts-ignore
const copy = Object.assign({}, unit);
replaceFunctionProperties(copy);
flattenRecursiveProperties(copy);
result[copy.id] = copy;
}
return result;
}
exports.serialize = serialize;
function restore(units, testFunctionMapper, ruleMapper) {
const list = Object.values(units);
const result = [];
for (const unit of list) {
restoreRecursiveProperties(unit, units);
restoreFunctionProperties(unit, testFunctionMapper);
if (isTest(unit)) {
restorePredicateInRequestFilterRules(unit, ruleMapper);
result.push(unit);
}
}
return result;
}
exports.restore = restore;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1zdHJ1Y3R1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvc2VyaWFsaXphdGlvbi90ZXN0LXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBcUM7QUFDckMsbURBQTJEO0FBSzNELDhFQUFxRDtBQUlyRCxNQUFNLG9CQUFvQixHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBVSxDQUFDO0FBMEJsRyxTQUFTLFVBQVUsQ0FBb0IsTUFBUyxFQUFFLFFBQWdCO0lBQzlELE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBZ0IsTUFBTSxDQUFFLEtBQVc7SUFDL0IsT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDO0FBQzVDLENBQUM7QUFGRCx3QkFFQztBQUVELFNBQWdCLFNBQVMsQ0FBRSxLQUFXO0lBQ2xDLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxtQkFBUSxDQUFDLE9BQU8sQ0FBQztBQUMvQyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFTLGFBQWEsQ0FBNEQsTUFBUyxFQUFFLFVBQWEsRUFBRSxNQUE0QjtJQUNwSSxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRTtRQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7WUFDN0IsU0FBUztRQUViLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUvQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFRLENBQUM7O1lBRWhGLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQy9FO0FBQ0wsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUUsSUFBVTtJQUMxQyxhQUFhLENBQUMsSUFBSSxFQUFFLDhCQUFtQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFFLElBQVUsRUFBRSxNQUFzQjtJQUNsRSxhQUFhLENBQUMsSUFBSSxFQUFFLDhCQUFtQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4SCxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBRSxJQUFVO0lBQzNDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUUsSUFBVSxFQUFFLEtBQVk7SUFDekQsYUFBYSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLG9DQUFvQyxDQUFFLElBQVUsRUFBRSxNQUErQjtJQUN0RixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO2dCQUN2QixTQUFTO1lBRWIsVUFBVSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2FBQ3hCLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsU0FBZ0IsT0FBTyxDQUFFLEtBQWE7SUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBQSxhQUFJLEVBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sUUFBUSxHQUFJLElBQUEsYUFBSSxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBa0IsQ0FBQyxDQUFDLENBQUM7SUFFbkUsT0FBTyxJQUFBLGNBQUssRUFBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUxELDBCQUtDO0FBRUQsU0FBZ0IsU0FBUyxDQUFFLEtBQVk7SUFDbkMsTUFBTSxNQUFNLEdBQVUsRUFBRSxDQUFDO0lBRXpCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQyxhQUFhO1FBQ2IsTUFBTSxJQUFJLHFCQUFjLElBQUksQ0FBRSxDQUFDO1FBRS9CLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQzFCO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQWRELDhCQWNDO0FBRUQsU0FBZ0IsT0FBTyxDQUFFLEtBQVksRUFBRSxrQkFBa0MsRUFBRSxVQUFtQztJQUMxRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxDLE1BQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUUxQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtRQUNyQiwwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMseUJBQXlCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQjtLQUNKO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQWpCRCwwQkFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bmlxLCBrZXlCeSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGVU5DVElPTl9QUk9QRVJUSUVTIH0gZnJvbSAnLi4vY29tcGlsZXIvcHJvdG9jb2wnO1xuaW1wb3J0IHsgUmVxdWVzdEZpbHRlclJ1bGVMb2NhdG9yIH0gZnJvbSAnLi4vY29tcGlsZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBUZXN0RmlsZSBmcm9tICcuLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QtZmlsZSc7XG5pbXBvcnQgVW5pdFR5cGUgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS91bml0LXR5cGUnO1xuaW1wb3J0IHsgUmVxdWVzdEluZm8gfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuXG5jb25zdCBSRUNVUlNJVkVfUFJPUEVSVElFUyA9IFsndGVzdEZpbGUnLCAnZml4dHVyZScsICdjdXJyZW50Rml4dHVyZScsICdjb2xsZWN0ZWRUZXN0cyddIGFzIGNvbnN0O1xuXG5pbnRlcmZhY2UgRnVuY3Rpb25NYXBwZXIge1xuICAgIChpZDogc3RyaW5nLCBmdW5jdGlvbk5hbWU6IHR5cGVvZiBGVU5DVElPTl9QUk9QRVJUSUVTW251bWJlcl0pOiBGdW5jdGlvbjtcbn1cblxuaW50ZXJmYWNlIFJlcXVlc3RGaWx0ZXJSdWxlTWFwcGVyIHtcbiAgICAocnVsZUxvY2F0b3I6IFJlcXVlc3RGaWx0ZXJSdWxlTG9jYXRvcik6IChyZXF1ZXN0SW5mbzogUmVxdWVzdEluZm8pID0+IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmludGVyZmFjZSBNYXBwZXJBcmd1bWVudHM8VCwgUD4ge1xuICAgIG9iamVjdDogVDtcbiAgICBwcm9wZXJ0eTogUDtcbiAgICBpdGVtOiBhbnk7XG59XG5cbmludGVyZmFjZSBNYXBwZXI8VCwgUD4ge1xuICAgICh7IGl0ZW0sIHByb3BlcnR5LCBvYmplY3QgfTogTWFwcGVyQXJndW1lbnRzPFQsIFA+KTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBVbml0ID0gVGVzdCB8IEZpeHR1cmUgfCBUZXN0RmlsZTtcblxuZXhwb3J0IGludGVyZmFjZSBVbml0cyB7XG4gICAgW2lkOiBzdHJpbmddOiBVbml0O1xufVxuXG5mdW5jdGlvbiBpc1Byb3BlcnR5PFQgZXh0ZW5kcyBvYmplY3Q+IChvYmplY3Q6IFQsIHByb3BlcnR5OiBzdHJpbmcpOiBwcm9wZXJ0eSBpcyBFeHRyYWN0PGtleW9mIFQsIHN0cmluZz4ge1xuICAgIHJldHVybiBvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZXN0ICh2YWx1ZTogVW5pdCk6IHZhbHVlIGlzIFRlc3Qge1xuICAgIHJldHVybiB2YWx1ZS51bml0VHlwZSA9PT0gVW5pdFR5cGUudGVzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRml4dHVyZSAodmFsdWU6IFVuaXQpOiB2YWx1ZSBpcyBGaXh0dXJlIHtcbiAgICByZXR1cm4gdmFsdWUudW5pdFR5cGUgPT09IFVuaXRUeXBlLmZpeHR1cmU7XG59XG5cbmZ1bmN0aW9uIG1hcFByb3BlcnRpZXM8VCBleHRlbmRzIFJlYWRvbmx5PG9iamVjdD4sIFAgZXh0ZW5kcyBSZWFkb25seTxzdHJpbmdbXT4+IChvYmplY3Q6IFQsIHByb3BlcnRpZXM6IFAsIG1hcHBlcjogTWFwcGVyPFQsIFBbbnVtYmVyXT4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKCFpc1Byb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3RbcHJvcGVydHldO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSB2YWx1ZS5tYXAoaXRlbSA9PiBtYXBwZXIoeyBpdGVtLCBwcm9wZXJ0eSwgb2JqZWN0IH0pKSBhcyBhbnk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBtYXBwZXIoeyBpdGVtOiBvYmplY3RbcHJvcGVydHldLCBwcm9wZXJ0eSwgb2JqZWN0IH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUZ1bmN0aW9uUHJvcGVydGllcyAodW5pdDogVW5pdCk6IHZvaWQge1xuICAgIG1hcFByb3BlcnRpZXModW5pdCwgRlVOQ1RJT05fUFJPUEVSVElFUywgKHsgaXRlbSB9KSA9PiAhIWl0ZW0pO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlRnVuY3Rpb25Qcm9wZXJ0aWVzICh1bml0OiBVbml0LCBtYXBwZXI6IEZ1bmN0aW9uTWFwcGVyKTogdm9pZCB7XG4gICAgbWFwUHJvcGVydGllcyh1bml0LCBGVU5DVElPTl9QUk9QRVJUSUVTLCAoeyBpdGVtLCBvYmplY3QsIHByb3BlcnR5IH0pID0+IGl0ZW0gPyBtYXBwZXIob2JqZWN0LmlkLCBwcm9wZXJ0eSkgOiBpdGVtKTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlblJlY3Vyc2l2ZVByb3BlcnRpZXMgKHVuaXQ6IFVuaXQpOiB2b2lkIHtcbiAgICBtYXBQcm9wZXJ0aWVzKHVuaXQsIFJFQ1VSU0lWRV9QUk9QRVJUSUVTLCAoeyBpdGVtIH0pID0+IGl0ZW0uaWQpO1xufVxuXG5mdW5jdGlvbiByZXN0b3JlUmVjdXJzaXZlUHJvcGVydGllcyAodW5pdDogVW5pdCwgdW5pdHM6IFVuaXRzKTogdm9pZCB7XG4gICAgbWFwUHJvcGVydGllcyh1bml0LCBSRUNVUlNJVkVfUFJPUEVSVElFUywgKHsgaXRlbSB9KSA9PiB1bml0c1tpdGVtXSk7XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVQcmVkaWNhdGVJblJlcXVlc3RGaWx0ZXJSdWxlcyAodGVzdDogVGVzdCwgbWFwcGVyOiBSZXF1ZXN0RmlsdGVyUnVsZU1hcHBlcik6IHZvaWQge1xuICAgIHRlc3QucmVxdWVzdEhvb2tzLmZvckVhY2goaG9vayA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG9vay5fcmVxdWVzdEZpbHRlclJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRSdWxlID0gaG9vay5fcmVxdWVzdEZpbHRlclJ1bGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoIXRhcmdldFJ1bGUuaXNQcmVkaWNhdGUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIHRhcmdldFJ1bGUub3B0aW9ucyA9IG1hcHBlcih7XG4gICAgICAgICAgICAgICAgdGVzdElkOiB0ZXN0LmlkLFxuICAgICAgICAgICAgICAgIGhvb2tJZDogaG9vay5pZCxcbiAgICAgICAgICAgICAgICBydWxlSWQ6IHRhcmdldFJ1bGUuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbiAodGVzdHM6IFRlc3RbXSk6IFVuaXRzIHtcbiAgICBjb25zdCB0ZXN0RmlsZXMgPSB1bmlxKHRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QudGVzdEZpbGUpKTtcbiAgICBjb25zdCBmaXh0dXJlcyAgPSB1bmlxKHRlc3RzLm1hcCh0ZXN0ID0+IHRlc3QuZml4dHVyZSBhcyBGaXh0dXJlKSk7XG5cbiAgICByZXR1cm4ga2V5QnkoWy4uLnRlc3RzLCAuLi5maXh0dXJlcywgLi4udGVzdEZpbGVzXSwgdW5pdCA9PiB1bml0LmlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAodW5pdHM6IFVuaXRzKTogVW5pdHMge1xuICAgIGNvbnN0IHJlc3VsdDogVW5pdHMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgdW5pdCBvZiBPYmplY3QudmFsdWVzKHVuaXRzKSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGNvcHk6IFVuaXQgPSB7IC4uLnVuaXQgfTtcblxuICAgICAgICByZXBsYWNlRnVuY3Rpb25Qcm9wZXJ0aWVzKGNvcHkpO1xuICAgICAgICBmbGF0dGVuUmVjdXJzaXZlUHJvcGVydGllcyhjb3B5KTtcblxuICAgICAgICByZXN1bHRbY29weS5pZF0gPSBjb3B5O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0b3JlICh1bml0czogVW5pdHMsIHRlc3RGdW5jdGlvbk1hcHBlcjogRnVuY3Rpb25NYXBwZXIsIHJ1bGVNYXBwZXI6IFJlcXVlc3RGaWx0ZXJSdWxlTWFwcGVyKTogVGVzdFtdIHtcbiAgICBjb25zdCBsaXN0ID0gT2JqZWN0LnZhbHVlcyh1bml0cyk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFRlc3RbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB1bml0IG9mIGxpc3QpIHtcbiAgICAgICAgcmVzdG9yZVJlY3Vyc2l2ZVByb3BlcnRpZXModW5pdCwgdW5pdHMpO1xuICAgICAgICByZXN0b3JlRnVuY3Rpb25Qcm9wZXJ0aWVzKHVuaXQsIHRlc3RGdW5jdGlvbk1hcHBlcik7XG5cbiAgICAgICAgaWYgKGlzVGVzdCh1bml0KSkge1xuICAgICAgICAgICAgcmVzdG9yZVByZWRpY2F0ZUluUmVxdWVzdEZpbHRlclJ1bGVzKHVuaXQsIHJ1bGVNYXBwZXIpO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaCh1bml0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iXX0=