summaryrefslogtreecommitdiff
path: root/js/testing/util.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-08-09 14:48:17 -0700
committerGitHub <noreply@github.com>2018-08-09 14:48:17 -0700
commit9d90c4ae955d789d2895b8efc153aa55be6ec376 (patch)
treed4483fa3a0ddf27ede0131d32f0e9be282982063 /js/testing/util.ts
parent413bcf20425992762a9a5a6e19caddc5ff160303 (diff)
Adds js/unit_tests.ts (#448)
Diffstat (limited to 'js/testing/util.ts')
-rw-r--r--js/testing/util.ts64
1 files changed, 64 insertions, 0 deletions
diff --git a/js/testing/util.ts b/js/testing/util.ts
new file mode 100644
index 000000000..193540351
--- /dev/null
+++ b/js/testing/util.ts
@@ -0,0 +1,64 @@
+/*!
+ 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.
+ */
+
+// 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}`;
+ }
+ if (!equal(actual, expected)) {
+ console.error(
+ "assertEqual failed. actual = ",
+ actual,
+ "expected =",
+ expected
+ );
+ throw new Error(msg);
+ }
+}
+
+export function assert(expr: boolean, msg = "") {
+ if (!expr) {
+ throw new Error(msg);
+ }
+}
+
+// TODO(ry) Use unknown here for parameters types.
+// tslint:disable-next-line:no-any
+export function equal(c: any, d: any): boolean {
+ const seen = new Map();
+ return (function compare(a, b) {
+ 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;
+ }
+ for (const key in { ...a, ...b }) {
+ if (!compare(a[key], b[key])) {
+ return false;
+ }
+ }
+ seen.set(a, b);
+ return true;
+ }
+ return false;
+ })(c, d);
+}