diff --git a/js/testing/util.ts b/js/testing/util.ts index 1e245fb712ee7038b95b09c31d847a2cd08932dc..096b184b8bb595ae6f12836ef74433ae1042c7e4 100644 --- a/js/testing/util.ts +++ b/js/testing/util.ts @@ -13,19 +13,29 @@ limitations under the License. */ -// TODO(ry) Use unknown here for parameters types. -// tslint:disable-next-line:no-any -export function assertEqual(actual: any, expected: any, msg?: string) { - if (!msg) { - msg = `actual: ${actual} expected: ${expected}`; - } +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 =", - actual, + actualString, "expected =", - expected + expectedString ); + if (!msg) { + msg = `actual: ${actualString} expected: ${expectedString}`; + } throw new Error(msg); } } diff --git a/js/testing/util_test.ts b/js/testing/util_test.ts index 9ac3dfd71b3d3e689ba818f747f1f526ac0863ab..25f0b2c45975d5fc87fbfd302c494590bdffc871 100644 --- a/js/testing/util_test.ts +++ b/js/testing/util_test.ts @@ -17,7 +17,7 @@ import { test } from "./testing.ts"; import { assert } from "./util.ts"; import * as util from "./util.ts"; -test(async function util_equal() { +test(function util_equal() { assert(util.equal("world", "world")); assert(!util.equal("hello", "world")); assert(util.equal(5, 5)); @@ -38,3 +38,35 @@ test(async function util_equal() { ) ); }); + +test(function util_assertEqual() { + const a = Object.create(null); + a.b = "foo"; + util.assertEqual(a, a); +}); + +test(function util_assertEqualActualUncoercable() { + let didThrow = false; + const a = Object.create(null); + try { + util.assertEqual(a, "bar"); + } catch (e) { + didThrow = true; + console.log(e.message); + assert(e.message === "actual: [Cannot display] expected: bar"); + } + assert(didThrow); +}); + +test(function util_assertEqualExpectedUncoercable() { + let didThrow = false; + const a = Object.create(null); + try { + util.assertEqual("bar", a); + } catch (e) { + didThrow = true; + console.log(e.message); + assert(e.message === "actual: bar expected: [Cannot display]"); + } + assert(didThrow); +});