UNPKG

firebase-bolt

Version:

Firebase Bolt Security and Modeling Language Compiler

109 lines (107 loc) 11 kB
"use strict"; /* * Copyright 2015 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ exports.__esModule = true; var util = require("../util"); var ast = require("../ast"); var logger = require("../logger"); ; /* * Run data drive test with tests is one of these formats: * [ { label: (opt) <string>, data: <input>, expect: (opt) <expected output> }, ... ] * [ [ <input>, <expected output> ], ... ] * [ scalar, ... ] * * Calls testIt(data, expect) for each test. */ function dataDrivenTest(tests, testIt, formatter) { if (formatter === void 0) { formatter = format; } var data; var expect; var label; for (var i = 0; i < tests.length; i++) { // Not Array or Object if (typeof tests[i] !== 'object') { label = formatter(tests[i]); data = tests[i]; expect = undefined; } else { data = tests[i].data; if (data === undefined) { data = tests[i][0]; } if (data === undefined) { data = tests[i]; } if (util.isType(data, 'object') && 'expect' in data) { data = util.extend({}, data); delete data.expect; } expect = tests[i].expect || tests[i][1]; label = tests[i].label; if (label === undefined) { if (expect !== undefined) { label = formatter(data) + " => " + formatter(expect); } else { label = formatter(data); } } } setup(function () { logger.reset(); logger.silent(); }); teardown(function () { logger.reset(); }); test(label, testIt.bind(undefined, data, expect, tests[i])); } } exports.dataDrivenTest = dataDrivenTest; function format(o) { switch (util.typeOf(o)) { case 'regexp': return o.toString(); default: return JSON.stringify(o); } } function expFormat(x) { if (util.isType(x, 'array')) { return '[' + x.map(expFormat).join(', ') + ']'; } if (util.isType(x, 'object')) { if ('type' in x) { return ast.decodeExpression(x); } var result = '{'; var sep = ''; for (var prop in x) { if (!x.hasOwnProperty(prop)) { continue; } result += sep + expFormat(x[prop]); sep = ', '; } result += '}'; return result; } return JSON.stringify(x); } exports.expFormat = expFormat; //# sourceMappingURL=data:application/json;charset=utf8;base64,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bUJBQTBCLENBQU07SUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUMzQixPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEQ7SUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQzVCLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNmLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixTQUFTO2FBQ1Y7WUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ1o7UUFDRCxNQUFNLElBQUksR0FBRyxDQUFDO1FBQ2QsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBckJELDhCQXFCQyIsImZpbGUiOiJ0ZXN0L3Rlc3QtaGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgKiBhcyBhc3QgZnJvbSAnLi4vYXN0JztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFNwZWMge1xuICBsYWJlbD86IHN0cmluZztcbiAgZGF0YTogYW55O1xuICBleHBlY3Q/OiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBBcnJheVNwZWMgPSBbYW55LCBhbnldO1xuXG5leHBvcnQgdHlwZSBWYWx1ZVNwZWMgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIFNwZWMgPSBPYmplY3RTcGVjIHwgQXJyYXlTcGVjIHwgVmFsdWVTcGVjO1xuXG5leHBvcnQgdHlwZSBUZXN0RnVuY3Rpb24gPSAoZGF0YTogYW55LCBleHBlY3Q6IGFueSwgc3BlYzogU3BlYykgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgRm9ybWF0RnVuY3Rpb24gPSAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG5cbi8qXG4gKiBSdW4gZGF0YSBkcml2ZSB0ZXN0IHdpdGggdGVzdHMgaXMgb25lIG9mIHRoZXNlIGZvcm1hdHM6XG4gKiBbIHsgbGFiZWw6IChvcHQpIDxzdHJpbmc+LCBkYXRhOiA8aW5wdXQ+LCBleHBlY3Q6IChvcHQpIDxleHBlY3RlZCBvdXRwdXQ+IH0sIC4uLiBdXG4gKiBbIFsgPGlucHV0PiwgPGV4cGVjdGVkIG91dHB1dD4gXSwgLi4uIF1cbiAqIFsgc2NhbGFyLCAuLi4gXVxuICpcbiAqIENhbGxzIHRlc3RJdChkYXRhLCBleHBlY3QpIGZvciBlYWNoIHRlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhRHJpdmVuVGVzdCh0ZXN0czogU3BlY1tdLCB0ZXN0SXQ6IFRlc3RGdW5jdGlvbiwgZm9ybWF0dGVyID0gZm9ybWF0KSB7XG4gIHZhciBkYXRhOiBhbnk7XG4gIHZhciBleHBlY3Q6IGFueTtcbiAgdmFyIGxhYmVsOiBzdHJpbmc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIE5vdCBBcnJheSBvciBPYmplY3RcbiAgICBpZiAodHlwZW9mIHRlc3RzW2ldICE9PSAnb2JqZWN0Jykge1xuICAgICAgbGFiZWwgPSBmb3JtYXR0ZXIodGVzdHNbaV0pO1xuICAgICAgZGF0YSA9IHRlc3RzW2ldO1xuICAgICAgZXhwZWN0ID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdGVzdHNbaV0uZGF0YTtcbiAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YSA9IHRlc3RzW2ldWzBdO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRhID0gdGVzdHNbaV07XG4gICAgICB9XG4gICAgICBpZiAodXRpbC5pc1R5cGUoZGF0YSwgJ29iamVjdCcpICYmICdleHBlY3QnIGluIGRhdGEpIHtcbiAgICAgICAgZGF0YSA9IHV0aWwuZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgICAgZGVsZXRlIGRhdGEuZXhwZWN0O1xuICAgICAgfVxuICAgICAgZXhwZWN0ID0gdGVzdHNbaV0uZXhwZWN0IHx8IHRlc3RzW2ldWzFdO1xuICAgICAgbGFiZWwgPSB0ZXN0c1tpXS5sYWJlbDtcbiAgICAgIGlmIChsYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChleHBlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxhYmVsID0gZm9ybWF0dGVyKGRhdGEpICsgXCIgPT4gXCIgKyBmb3JtYXR0ZXIoZXhwZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYWJlbCA9IGZvcm1hdHRlcihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldHVwKCgpID0+IHtcbiAgICAgIGxvZ2dlci5yZXNldCgpO1xuICAgICAgbG9nZ2VyLnNpbGVudCgpO1xuICAgIH0pO1xuICAgIHRlYXJkb3duKCgpID0+IHtcbiAgICAgIGxvZ2dlci5yZXNldCgpO1xuICAgIH0pO1xuICAgIHRlc3QobGFiZWwsIHRlc3RJdC5iaW5kKHVuZGVmaW5lZCwgZGF0YSwgZXhwZWN0LCB0ZXN0c1tpXSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdChvOiBhbnkpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHV0aWwudHlwZU9mKG8pKSB7XG4gIGNhc2UgJ3JlZ2V4cCc6XG4gICAgcmV0dXJuIG8udG9TdHJpbmcoKTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cEZvcm1hdCh4OiBhbnkpOiBzdHJpbmcge1xuICBpZiAodXRpbC5pc1R5cGUoeCwgJ2FycmF5JykpIHtcbiAgICByZXR1cm4gJ1snICsgeC5tYXAoZXhwRm9ybWF0KS5qb2luKCcsICcpICsgJ10nO1xuICB9XG4gIGlmICh1dGlsLmlzVHlwZSh4LCAnb2JqZWN0JykpIHtcbiAgICBpZiAoJ3R5cGUnIGluIHgpIHtcbiAgICAgIHJldHVybiBhc3QuZGVjb2RlRXhwcmVzc2lvbih4KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9ICd7JztcbiAgICB2YXIgc2VwID0gJyc7XG4gICAgZm9yICh2YXIgcHJvcCBpbiB4KSB7XG4gICAgICBpZiAoIXguaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gc2VwICsgZXhwRm9ybWF0KHhbcHJvcF0pO1xuICAgICAgc2VwID0gJywgJztcbiAgICB9XG4gICAgcmVzdWx0ICs9ICd9JztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh4KTtcbn1cbiJdfQ==