message: refactor: improve assert error by including the failed condition
  PR Close
diff: @@ -14,68 +14,78 @@ import {stringify} from './stringify';
  export function assertNumber(actual: any, msg: string) {
  if (typeof actual != 'number') {
  - throwError(msg);
  + throwError(msg, typeof actual, 'number', '===');
  + }
  +}
  +
  +export function assertString(actual: any, msg: string) {
  + if (typeof actual != 'string') {
  + throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');
  }
  }
  export function assertEqual<T>(actual: T, expected: T, msg: string) {
  if (actual != expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '==');
  }
  }
  export function assertNotEqual<T>(actual: T, expected: T, msg: string) {
  if (actual == expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '!=');
  }
  }
  export function assertSame<T>(actual: T, expected: T, msg: string) {
  if (actual !== expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '===');
  }
  }
  export function assertNotSame<T>(actual: T, expected: T, msg: string) {
  if (actual === expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '!==');
  }
  }
  export function assertLessThan<T>(actual: T, expected: T, msg: string) {
  if (actual >= expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '<');
  }
  }
  export function assertLessThanOrEqual<T>(actual: T, expected: T, msg: string) {
  if (actual > expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '<=');
  }
  }
  export function assertGreaterThan<T>(actual: T, expected: T, msg: string) {
  if (actual <= expected) {
  - throwError(msg);
  + throwError(msg, actual, expected, '>');
  }
  }
  export function assertNotDefined<T>(actual: T, msg: string) {
  if (actual != null) {
  - throwError(msg);
  + throwError(msg, actual, null, '==');
  }
  }
  export function assertDefined<T>(actual: T, msg: string) {
  if (actual == null) {
  - throwError(msg);
  + throwError(msg, actual, null, '!=');
  }
  }
  -export function throwError(msg: string): never {
  +export function throwError(msg: string): never;
  +export function throwError(msg: string, actual: any, expected: any, comparison: string): never;
  +export function throwError(msg: string, actual?: any, expected?: any, comparison?: string): never {
  // tslint:disable-next-line
  debugger; // Left intentionally for better debugger experience.
  - throw new Error(`ASSERTION ERROR: ${msg}`);
  + throw new Error(
  + `ASSERTION ERROR: ${msg}` +
  + (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));
  }
  export function assertDomNode(node: any) {
  