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'; };