firebase-bolt
Version:
Firebase Bolt Security and Modeling Language Compiler
93 lines (91 loc) • 12.1 kB
JavaScript
;
exports.__esModule = true;
/*
* 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.
*/
var chai_1 = require("chai");
var helper = require("./test-helper");
var proc = require("child_process");
var fs = require("fs");
var TMP_DIR = 'tmp/';
suite("firebase-bolt CLI", function () {
suiteSetup(function () {
try {
fs.mkdirSync(TMP_DIR);
}
catch (e) {
// do nothing
}
});
var tests = [
// Simple options tests.
{ data: "--help",
expect: { out: /^$/, err: /helpful message/ } },
{ data: "--h",
expect: { out: /^$/, err: /helpful message/ } },
{ data: "--version",
expect: { out: /^Firebase Bolt v\d+\.\d+\.\d+\n$/, err: /^$/ } },
{ data: "--v",
expect: { out: /^Firebase Bolt v\d+\.\d+\.\d+\n$/, err: /^$/ } },
// Reading from stdin
{ label: "stdin -> stdout",
data: { stdin: "path / is String;" },
expect: { out: /newData\.isString/, err: /^$/ } },
{ label: "stdin -> file",
data: { stdin: "path / is String;", args: "--o " + TMP_DIR + "test" },
expect: { out: /^$/, err: new RegExp("^bolt: Generating " + TMP_DIR + "test") } },
// Reading from a file
{ data: "samples/all_access",
expect: { out: /^$/, err: /^bolt: Generating samples\/all_access.json\.\.\.\n$/ } },
{ data: "samples/all_access.bolt",
expect: { out: /^$/, err: /^bolt: Generating samples\/all_access.json\.\.\.\n$/ } },
{ data: "samples/all_access --output " + TMP_DIR + "all_access",
expect: { out: /^$/, err: new RegExp("^bolt: Generating " + TMP_DIR + "all_access.json\\.\\.\\.\\n$") } },
{ data: "samples/all_access.json",
expect: { out: /^$/, err: /bolt: Cannot overwrite/ } },
// Argument errors
{ data: "--output",
expect: { out: /^$/, err: /^bolt: Missing output file name/ } },
{ data: "nosuchfile",
expect: { out: /^$/, err: /bolt: Could not read file: nosuchfile.bolt/ } },
{ data: "two files",
expect: { out: /^$/, err: /bolt: Can only compile a single file/ } },
];
helper.dataDrivenTest(tests, function (data, expect) {
return new Promise(function (resolve, reject) {
var args;
if (typeof (data) === 'string') {
args = data;
}
else {
args = data.args || '';
}
var child = proc.exec('bin/firebase-bolt ' + args, function (error, stdout, stderr) {
if (expect.err) {
chai_1.assert.isTrue(expect.err.test(stderr), "Unexpected message: '" + stderr + "'");
}
if (expect.out) {
chai_1.assert.isTrue(expect.out.test(stdout), "Unexpected output: '" + stdout + "'");
}
resolve();
});
if (data.stdin) {
child.stdin.write(data.stdin);
child.stdin.end();
}
});
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,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LENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoidGVzdC9jbGktdGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHthc3NlcnR9IGZyb20gJ2NoYWknO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gJy4vdGVzdC1oZWxwZXInO1xuaW1wb3J0ICogYXMgcHJvYyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcblxudmFyIFRNUF9ESVIgPSAndG1wLyc7XG5cbnN1aXRlKFwiZmlyZWJhc2UtYm9sdCBDTElcIiwgZnVuY3Rpb24oKSB7XG4gIHN1aXRlU2V0dXAoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBmcy5ta2RpclN5bmMoVE1QX0RJUik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIHRlc3RzID0gW1xuICAgIC8vIFNpbXBsZSBvcHRpb25zIHRlc3RzLlxuICAgIHsgZGF0YTogXCItLWhlbHBcIixcbiAgICAgIGV4cGVjdDoge291dDogL14kLywgZXJyOiAvaGVscGZ1bCBtZXNzYWdlL30gfSxcbiAgICB7IGRhdGE6IFwiLS1oXCIsXG4gICAgICBleHBlY3Q6IHtvdXQ6IC9eJC8sIGVycjogL2hlbHBmdWwgbWVzc2FnZS99IH0sXG4gICAgeyBkYXRhOiBcIi0tdmVyc2lvblwiLFxuICAgICAgZXhwZWN0OiB7b3V0OiAvXkZpcmViYXNlIEJvbHQgdlxcZCtcXC5cXGQrXFwuXFxkK1xcbiQvLCBlcnI6IC9eJC99IH0sXG4gICAgeyBkYXRhOiBcIi0tdlwiLFxuICAgICAgZXhwZWN0OiB7b3V0OiAvXkZpcmViYXNlIEJvbHQgdlxcZCtcXC5cXGQrXFwuXFxkK1xcbiQvLCBlcnI6IC9eJC99IH0sXG5cbiAgICAvLyBSZWFkaW5nIGZyb20gc3RkaW5cbiAgICB7IGxhYmVsOiBcInN0ZGluIC0+IHN0ZG91dFwiLFxuICAgICAgZGF0YTogeyBzdGRpbjogXCJwYXRoIC8gaXMgU3RyaW5nO1wiIH0sXG4gICAgICBleHBlY3Q6IHtvdXQ6IC9uZXdEYXRhXFwuaXNTdHJpbmcvLCBlcnI6IC9eJC99IH0sXG4gICAgeyBsYWJlbDogXCJzdGRpbiAtPiBmaWxlXCIsXG4gICAgICBkYXRhOiB7IHN0ZGluOiBcInBhdGggLyBpcyBTdHJpbmc7XCIsIGFyZ3M6IFwiLS1vIFwiICsgVE1QX0RJUiArIFwidGVzdFwiIH0sXG4gICAgICBleHBlY3Q6IHtvdXQ6IC9eJC8sIGVycjogbmV3IFJlZ0V4cChcIl5ib2x0OiBHZW5lcmF0aW5nIFwiICsgVE1QX0RJUiArIFwidGVzdFwiKX0gfSxcblxuICAgIC8vIFJlYWRpbmcgZnJvbSBhIGZpbGVcbiAgICB7IGRhdGE6IFwic2FtcGxlcy9hbGxfYWNjZXNzXCIsXG4gICAgICBleHBlY3Q6IHtvdXQ6IC9eJC8sIGVycjogL15ib2x0OiBHZW5lcmF0aW5nIHNhbXBsZXNcXC9hbGxfYWNjZXNzLmpzb25cXC5cXC5cXC5cXG4kL30gfSxcbiAgICB7IGRhdGE6IFwic2FtcGxlcy9hbGxfYWNjZXNzLmJvbHRcIixcbiAgICAgIGV4cGVjdDoge291dDogL14kLywgZXJyOiAvXmJvbHQ6IEdlbmVyYXRpbmcgc2FtcGxlc1xcL2FsbF9hY2Nlc3MuanNvblxcLlxcLlxcLlxcbiQvfSB9LFxuICAgIHsgZGF0YTogXCJzYW1wbGVzL2FsbF9hY2Nlc3MgLS1vdXRwdXQgXCIgKyBUTVBfRElSICsgXCJhbGxfYWNjZXNzXCIsXG4gICAgICBleHBlY3Q6IHtvdXQ6IC9eJC8sIGVycjogbmV3IFJlZ0V4cChcIl5ib2x0OiBHZW5lcmF0aW5nIFwiICsgVE1QX0RJUiArIFwiYWxsX2FjY2Vzcy5qc29uXFxcXC5cXFxcLlxcXFwuXFxcXG4kXCIpfSB9LFxuICAgIHsgZGF0YTogXCJzYW1wbGVzL2FsbF9hY2Nlc3MuanNvblwiLFxuICAgICAgZXhwZWN0OiB7b3V0OiAvXiQvLCBlcnI6IC9ib2x0OiBDYW5ub3Qgb3ZlcndyaXRlL30gfSxcblxuICAgIC8vIEFyZ3VtZW50IGVycm9yc1xuICAgIHsgZGF0YTogXCItLW91dHB1dFwiLFxuICAgICAgZXhwZWN0OiB7b3V0OiAvXiQvLCBlcnI6IC9eYm9sdDogTWlzc2luZyBvdXRwdXQgZmlsZSBuYW1lL30gfSxcbiAgICB7IGRhdGE6IFwibm9zdWNoZmlsZVwiLFxuICAgICAgZXhwZWN0OiB7b3V0OiAvXiQvLCBlcnI6IC9ib2x0OiBDb3VsZCBub3QgcmVhZCBmaWxlOiBub3N1Y2hmaWxlLmJvbHQvfSB9LFxuICAgIHsgZGF0YTogXCJ0d28gZmlsZXNcIixcbiAgICAgIGV4cGVjdDoge291dDogL14kLywgZXJyOiAvYm9sdDogQ2FuIG9ubHkgY29tcGlsZSBhIHNpbmdsZSBmaWxlL30gfSxcbiAgXTtcblxuICBoZWxwZXIuZGF0YURyaXZlblRlc3QodGVzdHMsIGZ1bmN0aW9uKGRhdGEsIGV4cGVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCBhcmdzOiBzdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlb2YoZGF0YSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGFyZ3MgPSBkYXRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJncyA9IGRhdGEuYXJncyB8fCAnJztcbiAgICAgIH1cbiAgICAgIGxldCBjaGlsZCA9IHByb2MuZXhlYygnYmluL2ZpcmViYXNlLWJvbHQgJyArIGFyZ3MsIGZ1bmN0aW9uKGVycm9yLCBzdGRvdXQsIHN0ZGVycikge1xuICAgICAgICBpZiAoZXhwZWN0LmVycikge1xuICAgICAgICAgIGFzc2VydC5pc1RydWUoZXhwZWN0LmVyci50ZXN0KHN0ZGVyciksIFwiVW5leHBlY3RlZCBtZXNzYWdlOiAnXCIgKyBzdGRlcnIgKyBcIidcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGVjdC5vdXQpIHtcbiAgICAgICAgICBhc3NlcnQuaXNUcnVlKGV4cGVjdC5vdXQudGVzdChzdGRvdXQpLCBcIlVuZXhwZWN0ZWQgb3V0cHV0OiAnXCIgKyBzdGRvdXQgKyBcIidcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZGF0YS5zdGRpbikge1xuICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShkYXRhLnN0ZGluKTtcbiAgICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=