mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 16:49:18 -05:00
102 lines
2.3 KiB
TypeScript
102 lines
2.3 KiB
TypeScript
|
#!/usr/bin/env deno run --reload --allow-run
|
||
|
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
|
||
|
import "./unit_tests.ts";
|
||
|
import { permissionCombinations, parseUnitTestOutput } from "./test_util.ts";
|
||
|
|
||
|
function permsToCliFlags(perms: Deno.Permissions): string[] {
|
||
|
return Object.keys(perms)
|
||
|
.map(
|
||
|
(key): string => {
|
||
|
if (!perms[key]) return "";
|
||
|
|
||
|
const cliFlag = key.replace(
|
||
|
/\.?([A-Z])/g,
|
||
|
(x, y): string => `-${y.toLowerCase()}`
|
||
|
);
|
||
|
return `--allow-${cliFlag}`;
|
||
|
}
|
||
|
)
|
||
|
.filter((e): boolean => e.length > 0);
|
||
|
}
|
||
|
|
||
|
function fmtPerms(perms: Deno.Permissions): string {
|
||
|
let fmt = permsToCliFlags(perms).join(" ");
|
||
|
|
||
|
if (!fmt) {
|
||
|
fmt = "<no permissions>";
|
||
|
}
|
||
|
|
||
|
return fmt;
|
||
|
}
|
||
|
|
||
|
async function main(): Promise<void> {
|
||
|
console.log(
|
||
|
"Discovered permission combinations for tests:",
|
||
|
permissionCombinations.size
|
||
|
);
|
||
|
|
||
|
for (const perms of permissionCombinations.values()) {
|
||
|
console.log("\t" + fmtPerms(perms));
|
||
|
}
|
||
|
|
||
|
const testResults = new Set();
|
||
|
|
||
|
for (const perms of permissionCombinations.values()) {
|
||
|
const permsFmt = fmtPerms(perms);
|
||
|
console.log(`Running tests for: ${permsFmt}`);
|
||
|
const cliPerms = permsToCliFlags(perms);
|
||
|
// run subsequent tests using same deno executable
|
||
|
const args = [
|
||
|
Deno.execPath,
|
||
|
"run",
|
||
|
"--no-prompt",
|
||
|
...cliPerms,
|
||
|
"js/unit_tests.ts"
|
||
|
];
|
||
|
|
||
|
const p = Deno.run({
|
||
|
args,
|
||
|
stdout: "piped"
|
||
|
});
|
||
|
|
||
|
const { actual, expected, resultOutput } = parseUnitTestOutput(
|
||
|
await p.output(),
|
||
|
true
|
||
|
);
|
||
|
|
||
|
let result = 0;
|
||
|
|
||
|
if (!actual && !expected) {
|
||
|
console.error("Bad js/unit_test.ts output");
|
||
|
result = 1;
|
||
|
} else if (expected !== actual) {
|
||
|
result = 1;
|
||
|
}
|
||
|
|
||
|
testResults.add({
|
||
|
perms: permsFmt,
|
||
|
output: resultOutput,
|
||
|
result
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// if any run tests returned non-zero status then whole test
|
||
|
// run should fail
|
||
|
let testsFailed = false;
|
||
|
|
||
|
for (const testResult of testResults.values()) {
|
||
|
console.log(`Summary for ${testResult.perms}`);
|
||
|
console.log(testResult.output + "\n");
|
||
|
testsFailed = testsFailed || testResult.result;
|
||
|
}
|
||
|
|
||
|
if (testsFailed) {
|
||
|
console.error("Unit tests failed");
|
||
|
Deno.exit(1);
|
||
|
}
|
||
|
|
||
|
console.log("Unit tests passed");
|
||
|
}
|
||
|
|
||
|
main();
|