56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
var type = require('type-detect');
|
|
|
|
var flag = require('./flag');
|
|
|
|
function isObjectType(obj) {
|
|
var objectType = type(obj);
|
|
var objectTypes = ['Array', 'Object', 'function'];
|
|
|
|
return objectTypes.indexOf(objectType) !== -1;
|
|
}
|
|
|
|
/**
|
|
* ### .getOperator(message)
|
|
*
|
|
* Extract the operator from error message.
|
|
* Operator defined is based on below link
|
|
* https://nodejs.org/api/assert.html#assert_assert.
|
|
*
|
|
* Returns the `operator` or `undefined` value for an Assertion.
|
|
*
|
|
* @param {Object} object (constructed Assertion)
|
|
* @param {Arguments} chai.Assertion.prototype.assert arguments
|
|
* @namespace Utils
|
|
* @name getOperator
|
|
* @api public
|
|
*/
|
|
|
|
module.exports = function getOperator(obj, args) {
|
|
var operator = flag(obj, 'operator');
|
|
var negate = flag(obj, 'negate');
|
|
var expected = args[3];
|
|
var msg = negate ? args[2] : args[1];
|
|
|
|
if (operator) {
|
|
return operator;
|
|
}
|
|
|
|
if (typeof msg === 'function') msg = msg();
|
|
|
|
msg = msg || '';
|
|
if (!msg) {
|
|
return undefined;
|
|
}
|
|
|
|
if (/\shave\s/.test(msg)) {
|
|
return undefined;
|
|
}
|
|
|
|
var isObject = isObjectType(expected);
|
|
if (/\snot\s/.test(msg)) {
|
|
return isObject ? 'notDeepStrictEqual' : 'notStrictEqual';
|
|
}
|
|
|
|
return isObject ? 'deepStrictEqual' : 'strictEqual';
|
|
};
|