mirror of
https://github.com/denoland/deno.git
synced 2025-09-27 12:49:10 +00:00
Merge deno_cli_snapshots into deno_cli (#3064)
This commit is contained in:
parent
9049213867
commit
b81e5db17a
148 changed files with 38 additions and 83 deletions
107
cli/js/unit_test_runner.ts
Executable file
107
cli/js/unit_test_runner.ts
Executable file
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env -S 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";
|
||||
|
||||
interface TestResult {
|
||||
perms: string;
|
||||
output: string;
|
||||
result: number;
|
||||
}
|
||||
|
||||
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<TestResult>();
|
||||
|
||||
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,
|
||||
"cli/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 cli/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) {
|
||||
console.log(`Summary for ${testResult.perms}`);
|
||||
console.log(testResult.output + "\n");
|
||||
testsFailed = testsFailed || Boolean(testResult.result);
|
||||
}
|
||||
|
||||
if (testsFailed) {
|
||||
console.error("Unit tests failed");
|
||||
Deno.exit(1);
|
||||
}
|
||||
|
||||
console.log("Unit tests passed");
|
||||
}
|
||||
|
||||
main();
|
Loading…
Add table
Add a link
Reference in a new issue