summaryrefslogtreecommitdiff
path: root/testing/pretty.ts
diff options
context:
space:
mode:
Diffstat (limited to 'testing/pretty.ts')
-rw-r--r--testing/pretty.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/testing/pretty.ts b/testing/pretty.ts
new file mode 100644
index 000000000..aa90f2469
--- /dev/null
+++ b/testing/pretty.ts
@@ -0,0 +1,75 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+
+import { equal } from "./mod.ts";
+import { red, green, white, gray, bold } from "../colors/mod.ts";
+import diff, { DiffType, DiffResult } from "./diff.ts";
+import { format } from "./format.ts";
+
+const CAN_NOT_DISPLAY = "[Cannot display]";
+
+function createStr(v: unknown): string {
+ try {
+ return format(v);
+ } catch (e) {
+ return red(CAN_NOT_DISPLAY);
+ }
+}
+
+function createColor(diffType: DiffType) {
+ switch (diffType) {
+ case "added":
+ return (s: string) => green(bold(s));
+ case "removed":
+ return (s: string) => red(bold(s));
+ default:
+ return white;
+ }
+}
+
+function createSign(diffType: DiffType) {
+ switch (diffType) {
+ case "added":
+ return "+ ";
+ case "removed":
+ return "- ";
+ default:
+ return " ";
+ }
+}
+
+function buildMessage(diffResult: ReadonlyArray<DiffResult<string>>) {
+ const messages = [];
+ messages.push("");
+ messages.push("");
+ messages.push(
+ ` ${gray(bold("[Diff]"))} ${red(bold("Left"))} / ${green(bold("Right"))}`
+ );
+ messages.push("");
+ messages.push("");
+ diffResult.forEach((result: DiffResult<string>) => {
+ const c = createColor(result.type);
+ messages.push(c(`${createSign(result.type)}${result.value}`));
+ });
+ messages.push("");
+
+ return messages;
+}
+
+export function assertEqual(actual: unknown, expected: unknown) {
+ if (equal(actual, expected)) {
+ return;
+ }
+ let message = "";
+ const actualString = createStr(actual);
+ const expectedString = createStr(expected);
+ try {
+ const diffResult = diff(
+ actualString.split("\n"),
+ expectedString.split("\n")
+ );
+ message = buildMessage(diffResult).join("\n");
+ } catch (e) {
+ message = `\n${red(CAN_NOT_DISPLAY)} + \n\n`;
+ }
+ throw new Error(message);
+}