undo3d-shim-browser
Version:
A collection of browser shims and polyfills for Undo3D apps
55 lines (48 loc) • 1.85 kB
JavaScript
//// https://nodejs.org/api/assert.html#assert_assert_fail_message
//// https://github.com/nodejs/node/blob/master/lib/assert.js#L89
//// Load dependencies.
import AssertionError from './assertion-error.mjs'
//// Global state.
let warned = false //@TODO should be global
//// Throws an AssertionError with the provided error message or a default error
//// message. If the message parameter is an instance of an Error then it will
//// be thrown instead of the AssertionError.
//// Using assert.fail() with more than two arguments has been deprecated.
//// - message <string> | <Error> Default: 'Failed'
export default function fail (actual, expected, message, operator, stackStartFn) {
const argsLen = arguments.length
let internalMessage
if (argsLen === 0) {
internalMessage = 'Failed'
} else if (argsLen === 1) {
message = actual
actual = undefined
} else {
if (warned === false) {
warned = true
console.warn( // was process.emitWarning()
'assert.fail() with more than one argument is deprecated. Please '
+ 'use assert.strictEqual() instead or only pass a message.'
, 'DeprecationWarning'
, 'DEP0094'
)
}
if (argsLen === 2) operator = '!='
}
if (message instanceof Error) throw message
const errArgs = {
actual
, expected
, operator: operator === undefined ? 'fail' : operator
, stackStartFn: stackStartFn || fail
}
if (message !== undefined) {
errArgs.message = message
}
const err = new AssertionError(errArgs)
if (internalMessage) {
err.message = internalMessage
err.generatedMessage = true //@TODO maybe get rid of this, `new AssertionError(...)` should set its own generatedMessage
}
throw err
}