firebase-bolt
Version:
Firebase Bolt Security and Modeling Language Compiler
109 lines (107 loc) • 11 kB
JavaScript
;
/*
* 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==