2020-04-28 15:38:34 -04:00
|
|
|
const { expect } = require('chai')
|
2018-03-07 11:42:39 -05:00
|
|
|
|
2020-04-28 15:38:34 -04:00
|
|
|
const OError = require('../..')
|
2019-07-01 06:34:15 -04:00
|
|
|
|
2020-09-11 05:05:54 -04:00
|
|
|
/**
|
|
|
|
* @param {Error} e
|
|
|
|
* @param {any} expected
|
|
|
|
*/
|
2020-04-17 03:44:50 -04:00
|
|
|
exports.expectError = function OErrorExpectError(e, expected) {
|
2020-05-15 05:32:18 -04:00
|
|
|
expect(
|
|
|
|
e.name,
|
|
|
|
"error should set the name property to the error's name"
|
|
|
|
).to.equal(expected.name)
|
|
|
|
|
|
|
|
expect(
|
|
|
|
e instanceof expected.klass,
|
|
|
|
'error should be an instance of the error type'
|
|
|
|
).to.be.true
|
|
|
|
|
|
|
|
expect(
|
|
|
|
e instanceof Error,
|
|
|
|
'error should be an instance of the built-in Error type'
|
|
|
|
).to.be.true
|
|
|
|
|
|
|
|
expect(
|
|
|
|
require('util').types.isNativeError(e),
|
|
|
|
'error should be recognised by util.types.isNativeError'
|
|
|
|
).to.be.true
|
|
|
|
|
|
|
|
expect(
|
|
|
|
e.toString(),
|
|
|
|
'toString should return the default error message formatting'
|
|
|
|
).to.equal(expected.message)
|
|
|
|
|
2020-09-11 05:05:54 -04:00
|
|
|
expect(e.stack, 'error should have a stack trace').to.not.be.empty
|
|
|
|
|
2020-05-15 05:32:18 -04:00
|
|
|
expect(
|
2020-09-11 05:05:54 -04:00
|
|
|
/** @type {string} */ (e.stack).split('\n')[0],
|
2020-05-15 05:32:18 -04:00
|
|
|
'stack should start with the default error message formatting'
|
|
|
|
).to.match(new RegExp(`^${expected.name}:`))
|
|
|
|
|
|
|
|
expect(
|
2020-09-11 05:05:54 -04:00
|
|
|
/** @type {string} */ (e.stack).split('\n')[1],
|
2020-05-15 05:32:18 -04:00
|
|
|
'first stack frame should be the function where the error was thrown'
|
|
|
|
).to.match(expected.firstFrameRx)
|
2019-07-01 06:34:15 -04:00
|
|
|
}
|
2020-04-28 15:40:20 -04:00
|
|
|
|
2020-09-11 05:05:54 -04:00
|
|
|
/**
|
|
|
|
* @param {Error} error
|
|
|
|
* @param {String[]} expected
|
|
|
|
*/
|
2020-04-28 15:40:20 -04:00
|
|
|
exports.expectFullStackWithoutStackFramesToEqual = function (error, expected) {
|
|
|
|
const fullStack = OError.getFullStack(error)
|
|
|
|
const fullStackWithoutFrames = fullStack
|
|
|
|
.split('\n')
|
|
|
|
.filter((line) => !/^\s+at\s/.test(line))
|
2020-05-15 05:32:18 -04:00
|
|
|
expect(
|
|
|
|
fullStackWithoutFrames,
|
|
|
|
'full stack without frames should equal'
|
|
|
|
).to.deep.equal(expected)
|
2020-04-28 15:40:20 -04:00
|
|
|
}
|