diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-08-23 19:47:43 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-08-27 17:51:24 -0400 |
commit | e13f3c10cac4fabff7e6cd4a4736703ca7c56d2d (patch) | |
tree | df74f8c9fa5b917911b78cecb3c0bd450bbf79e5 /js/test_util.ts | |
parent | 722c7e4a1b5acda4472338f021f1a216ad9c6c08 (diff) |
Add ability to unit test by permissions.
Diffstat (limited to 'js/test_util.ts')
-rw-r--r-- | js/test_util.ts | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/js/test_util.ts b/js/test_util.ts new file mode 100644 index 000000000..7124222a7 --- /dev/null +++ b/js/test_util.ts @@ -0,0 +1,70 @@ +// Copyright 2018 the Deno authors. All rights reserved. MIT license. +// +// We want to test many ops in deno which have different behavior depending on +// the permissions set. These tests can specify which permissions they expect, +// which appends a special string like "permW1N0" to the end of the test name. +// Here we run several copies of deno with different permissions, filtering the +// tests by the special string. permW0N0 means allow-write but not allow-net. +// See tools/unit_tests.py for more details. + +import * as deno from "deno"; +import * as testing from "./testing/testing.ts"; +export { assert, assertEqual } from "./testing/testing.ts"; + +// testing.setFilter must be run before any tests are defined. +const permFilter = deno.argv[1]; +permFromString(permFilter); +testing.setFilter(permFilter); + +interface DenoPermissions { + write?: boolean; + net?: boolean; +} + +function permToString(perms: DenoPermissions): string { + const w = perms.write ? 1 : 0; + const n = perms.net ? 1 : 0; + return `permW${w}N${n}`; +} + +function permFromString(s: string): DenoPermissions { + const re = /^permW([01])N([01])$/; + const found = s.match(re); + if (!found) { + throw Error("Not a permission string"); + } + return { + write: Boolean(Number(found[1])), + net: Boolean(Number(found[2])) + }; +} + +export function testPerm(perms: DenoPermissions, fn: testing.TestFunction) { + const name = `${fn.name}_${permToString(perms)}`; + testing.test({ fn, name }); +} + +export function test(fn: testing.TestFunction) { + testPerm({ write: false, net: false }, fn); +} + +test(function permSerialization() { + for (let write of [true, false]) { + for (let net of [true, false]) { + let perms: DenoPermissions = { write, net }; + testing.assertEqual(perms, permFromString(permToString(perms))); + } + } +}); + +// To better catch internal errors, permFromString should throw if it gets an +// invalid permission string. +test(function permFromStringThrows() { + let threw = false; + try { + permFromString("bad"); + } catch (e) { + threw = true; + } + testing.assert(threw); +}); |