| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** @fileoverview Assertion helper functions wrapping the chaijs API. */ |
| |
| import {assert, expect} from '../chai.js'; |
| |
| /** |
| * @param {boolean} value The value to check. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertTrue(value, opt_message) { |
| assert.isTrue(value, opt_message); |
| } |
| |
| /** |
| * @param {boolean} value The value to check. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertFalse(value, opt_message) { |
| assert.isFalse(value, opt_message); |
| } |
| |
| /** |
| * @param {number} value1 The first operand. |
| * @param {number} value2 The second operand. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertGE(value1, value2, opt_message) { |
| expect(value1).to.be.at.least(value2, opt_message); |
| } |
| |
| /** |
| * @param {number} value1 The first operand. |
| * @param {number} value2 The second operand. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertGT(value1, value2, opt_message) { |
| assert.isAbove(value1, value2, opt_message); |
| } |
| |
| /** |
| * @param {*} expected The expected value. |
| * @param {*} actual The actual value. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertEquals(expected, actual, opt_message) { |
| assert.strictEqual(actual, expected, opt_message); |
| } |
| |
| /** |
| * @param {*} expected |
| * @param {*} actual |
| * @param {string=} opt_message |
| * @throws {Error} |
| */ |
| export function assertDeepEquals(expected, actual, opt_message) { |
| assert.deepEqual(actual, expected, opt_message); |
| } |
| |
| /** |
| * @param {number} value1 The first operand. |
| * @param {number} value2 The second operand. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertLE(value1, value2, opt_message) { |
| expect(value1).to.be.at.most(value2, opt_message); |
| } |
| |
| /** |
| * @param {number} value1 The first operand. |
| * @param {number} value2 The second operand. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertLT(value1, value2, opt_message) { |
| assert.isBelow(value1, value2, opt_message); |
| } |
| |
| /** |
| * @param {*} expected The expected value. |
| * @param {*} actual The actual value. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertNotEquals(expected, actual, opt_message) { |
| assert.notStrictEqual(actual, expected, opt_message); |
| } |
| |
| /** |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertNotReached(opt_message) { |
| assert.fail(null, null, opt_message); |
| } |
| |
| /** |
| * @param {function()} testFunction |
| * @param {(Function|string|RegExp)=} opt_expected_or_constructor The expected |
| * Error constructor, partial or complete error message string, or RegExp to |
| * test the error message. |
| * @param {string=} opt_message Additional error message. |
| * @throws {Error} |
| */ |
| export function assertThrows( |
| testFunction, opt_expected_or_constructor, opt_message) { |
| // The implementation of assert.throws goes like: |
| // function (fn, errt, errs, msg) { |
| // if ('string' === typeof errt || errt instanceof RegExp) { |
| // errs = errt; |
| // errt = null; |
| // } |
| // ... |
| // That is, if the second argument is string or RegExp, the type of the |
| // exception is not checked: only the error message. This is achieved by |
| // partially "shifting" parameters (the "additional error message" is not |
| // shifted and will be lost). "Shifting" isn't a thing Closure understands, so |
| // just cast to string. |
| // TODO(crbug.com/40097498): Refactor this into something that makes sense when |
| // tests are actually compiled and we can do that safely. |
| assert.throws( |
| testFunction, |
| /** @type{string} */ (opt_expected_or_constructor), opt_message); |
| } |
| |
| /** |
| * Verifies that the contents of the expected and observed arrays match. |
| * @param {!Array} expected The expected result. |
| * @param {!Array} actual The actual result. |
| */ |
| export function assertArrayEquals(expected, actual) { |
| assertDeepEquals(expected, actual); |
| } |