diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-01-03 14:55:22 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-03 14:55:22 -0500 |
commit | 4f62a56f9071b0541b6be9b8e9c40fdcc2a3da22 (patch) | |
tree | c19cfeea353736e37b1d844dafbc1f1c256755bd /js | |
parent | a8d326b4311757b2b69bc251d460f4242d19a29f (diff) |
Move testing module to deno_std (#1451)
Upgrades deno_std submodule.
Diffstat (limited to 'js')
m--------- | js/deps/https/deno.land/x/std | 0 | ||||
-rw-r--r-- | js/test_util.ts | 7 | ||||
-rw-r--r-- | js/testing/testing.ts | 175 | ||||
-rw-r--r-- | js/testing/testing_test.ts | 70 |
4 files changed, 5 insertions, 247 deletions
diff --git a/js/deps/https/deno.land/x/std b/js/deps/https/deno.land/x/std -Subproject d3193a09deabaf087f2a3f8d3b8f494d1d38e35 +Subproject b4906387469eba24f868082b263dd44d89a40db diff --git a/js/test_util.ts b/js/test_util.ts index 93fc67491..d0b55e5ff 100644 --- a/js/test_util.ts +++ b/js/test_util.ts @@ -8,8 +8,11 @@ // 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"; +import * as testing from "./deps/https/deno.land/x/std/testing/mod.ts"; +export { + assert, + assertEqual +} from "./deps/https/deno.land/x/std/testing/mod.ts"; // testing.setFilter must be run before any tests are defined. testing.setFilter(deno.args[1]); diff --git a/js/testing/testing.ts b/js/testing/testing.ts deleted file mode 100644 index 8e11f2a01..000000000 --- a/js/testing/testing.ts +++ /dev/null @@ -1,175 +0,0 @@ -/*! - Copyright 2018 Propel http://propel.site/. 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. -*/ - -// Do not add imports in this file in order to be compatible with Node. - -export function assertEqual(actual: unknown, expected: unknown, msg?: string) { - if (!equal(actual, expected)) { - let actualString: string; - let expectedString: string; - try { - actualString = String(actual); - } catch (e) { - actualString = "[Cannot display]"; - } - try { - expectedString = String(expected); - } catch (e) { - expectedString = "[Cannot display]"; - } - console.error( - "assertEqual failed. actual =", - actualString, - "expected =", - expectedString - ); - if (!msg) { - msg = `actual: ${actualString} expected: ${expectedString}`; - } - throw new Error(msg); - } -} - -export function assert(expr: boolean, msg = "") { - if (!expr) { - throw new Error(msg); - } -} - -export function equal(c: unknown, d: unknown): boolean { - const seen = new Map(); - return (function compare(a: unknown, b: unknown) { - if (Object.is(a, b)) { - return true; - } - if (a && typeof a === "object" && b && typeof b === "object") { - if (seen.get(a) === b) { - return true; - } - if (Object.keys(a || {}).length !== Object.keys(b || {}).length) { - return false; - } - const merged = { ...a, ...b }; - for (const key in merged) { - type Key = keyof typeof merged; - if (!compare(a && a[key as Key], b && b[key as Key])) { - return false; - } - } - seen.set(a, b); - return true; - } - return false; - })(c, d); -} - -export type TestFunction = () => void | Promise<void>; - -export interface TestDefinition { - fn: TestFunction; - name: string; -} - -export const exitOnFail = true; - -let filterRegExp: RegExp | null; -const tests: TestDefinition[] = []; - -let filtered = 0; -const ignored = 0; -const measured = 0; - -// Must be called before any test() that needs to be filtered. -export function setFilter(s: string): void { - filterRegExp = new RegExp(s, "i"); -} - -export function test(t: TestDefinition | TestFunction): void { - const fn: TestFunction = typeof t === "function" ? t : t.fn; - const name: string = t.name; - - if (!name) { - throw new Error("Test function may not be anonymous"); - } - if (filter(name)) { - tests.push({ fn, name }); - } else { - filtered++; - } -} - -function filter(name: string): boolean { - if (filterRegExp) { - return filterRegExp.test(name); - } else { - return true; - } -} - -const RESET = "\x1b[0m"; -const FG_RED = "\x1b[31m"; -const FG_GREEN = "\x1b[32m"; - -function red_failed() { - return FG_RED + "FAILED" + RESET; -} - -function green_ok() { - return FG_GREEN + "ok" + RESET; -} - -async function runTests() { - let passed = 0; - let failed = 0; - - console.log("running", tests.length, "tests"); - for (let i = 0; i < tests.length; i++) { - const { fn, name } = tests[i]; - let result = green_ok(); - console.log("test", name); - try { - await fn(); - passed++; - } catch (e) { - result = red_failed(); - console.error((e && e.stack) || e); - failed++; - if (exitOnFail) { - break; - } - } - // TODO Do this on the same line as test name is printed. - console.log("...", result); - } - - // Attempting to match the output of Rust's test runner. - const result = failed > 0 ? red_failed() : green_ok(); - console.log( - `\ntest result: ${result}. ${passed} passed; ${failed} failed; ` + - `${ignored} ignored; ${measured} measured; ${filtered} filtered out\n` - ); - - if (failed === 0) { - // All good. - } else { - // Use setTimeout to avoid the error being ignored due to unhandled - // promise rejections being swallowed. - setTimeout(() => { - throw new Error(`There were ${failed} test failures.`); - }, 0); - } -} - -setTimeout(runTests, 0); diff --git a/js/testing/testing_test.ts b/js/testing/testing_test.ts deleted file mode 100644 index 9b32884eb..000000000 --- a/js/testing/testing_test.ts +++ /dev/null @@ -1,70 +0,0 @@ -/*! - Copyright 2018 Propel http://propel.site/. 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. - */ - -import { test, assert, assertEqual, equal } from "./testing.ts"; - -test(function testingEqual() { - assert(equal("world", "world")); - assert(!equal("hello", "world")); - assert(equal(5, 5)); - assert(!equal(5, 6)); - assert(equal(NaN, NaN)); - assert(equal({ hello: "world" }, { hello: "world" })); - assert(!equal({ world: "hello" }, { hello: "world" })); - assert( - equal( - { hello: "world", hi: { there: "everyone" } }, - { hello: "world", hi: { there: "everyone" } } - ) - ); - assert( - !equal( - { hello: "world", hi: { there: "everyone" } }, - { hello: "world", hi: { there: "everyone else" } } - ) - ); -}); - -test(function testingAssertEqual() { - const a = Object.create(null); - a.b = "foo"; - assertEqual(a, a); -}); - -test(function testingAssertEqualActualUncoercable() { - let didThrow = false; - const a = Object.create(null); - try { - assertEqual(a, "bar"); - } catch (e) { - didThrow = true; - console.log(e.message); - assert(e.message === "actual: [Cannot display] expected: bar"); - } - assert(didThrow); -}); - -test(function testingAssertEqualExpectedUncoercable() { - let didThrow = false; - const a = Object.create(null); - try { - assertEqual("bar", a); - } catch (e) { - didThrow = true; - console.log(e.message); - assert(e.message === "actual: bar expected: [Cannot display]"); - } - assert(didThrow); -}); |