Cleanup _.isError and add more tests.

This commit is contained in:
John-David Dalton
2014-04-19 09:42:11 -07:00
parent b018ada5c8
commit 5bf545ee90
2 changed files with 156 additions and 114 deletions

View File

@@ -6106,19 +6106,19 @@
} }
/** /**
* Checks if `value` is a date. * Checks if `value` is a `Date` object.
* *
* @static * @static
* @memberOf _ * @memberOf _
* @category Objects * @category Objects
* @param {*} value The value to check. * @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a date, else `false`. * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
* @example * @example
* *
* _.isDate(new Date); * _.isDate(new Date);
* // => true * // => true
* *
* _.isDate('Wed May 23 2012'); * _.isDate('Mon April 23 2012');
* // => false * // => false
*/ */
function isDate(value) { function isDate(value) {
@@ -6257,6 +6257,27 @@
return baseIsEqual(value, other, callback); return baseIsEqual(value, other, callback);
} }
/**
* Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
* `SyntaxError`, `TypeError`, or `URIError` object.
*
* @static
* @memberOf _
* @category Objects
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an error object, else `false`.
* @example
*
* _.isError(new Error);
* // => true
*
* _.isError(Error);
* // => false
*/
function isError(value) {
return value && typeof value == 'object' && toString.call(value) == errorClass || false;
}
/** /**
* Checks if `value` is, or can be coerced to, a finite number. * Checks if `value` is, or can be coerced to, a finite number.
* *
@@ -6398,7 +6419,7 @@
} }
/** /**
* Checks if `value` is a number. * Checks if `value` is a `Number` primitive or object.
* *
* Note: `NaN` is considered a number. See the [ES5 spec](http://es5.github.io/#x8.5) * Note: `NaN` is considered a number. See the [ES5 spec](http://es5.github.io/#x8.5)
* for more details. * for more details.
@@ -6469,13 +6490,13 @@
}; };
/** /**
* Checks if `value` is a regular expression. * Checks if `value` is a `RegExp` object.
* *
* @static * @static
* @memberOf _ * @memberOf _
* @category Objects * @category Objects
* @param {*} value The value to check. * @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a regular expression, else `false`. * @returns {boolean} Returns `true` if `value` is a regexp object, else `false`.
* @example * @example
* *
* _.isRegExp(/abc/); * _.isRegExp(/abc/);
@@ -6491,7 +6512,7 @@
} }
/** /**
* Checks if `value` is a string. * Checks if `value` is a `String` primitive or object.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -6531,28 +6552,6 @@
return typeof value == 'undefined'; return typeof value == 'undefined';
} }
/**
* Checks if `value` is an instance of a native `Error` class.
*
* @static
* @memberOf _
* @category Objects
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is an instance of a native `Error`, else `false`.
* @example
*
* _.isError(new Error);
* // => true
*
* _.isError('string');
* // => false
*/
function isError(value) {
var type = typeof value;
return value && type == 'object' && toString.call(value) == errorClass ||
false;
}
/** /**
* Creates an array of the own enumerable property names of `object`. * Creates an array of the own enumerable property names of `object`.
* *
@@ -8388,6 +8387,7 @@
lodash.isElement = isElement; lodash.isElement = isElement;
lodash.isEmpty = isEmpty; lodash.isEmpty = isEmpty;
lodash.isEqual = isEqual; lodash.isEqual = isEqual;
lodash.isError = isError;
lodash.isFinite = isFinite; lodash.isFinite = isFinite;
lodash.isFunction = isFunction; lodash.isFunction = isFunction;
lodash.isNaN = isNaN; lodash.isNaN = isNaN;
@@ -8398,7 +8398,6 @@
lodash.isRegExp = isRegExp; lodash.isRegExp = isRegExp;
lodash.isString = isString; lodash.isString = isString;
lodash.isUndefined = isUndefined; lodash.isUndefined = isUndefined;
lodash.isError = isError;
lodash.kebabCase = kebabCase; lodash.kebabCase = kebabCase;
lodash.lastIndexOf = lastIndexOf; lodash.lastIndexOf = lastIndexOf;
lodash.mixin = mixin; lodash.mixin = mixin;

View File

@@ -270,6 +270,7 @@
"'_array': [1, 2, 3],", "'_array': [1, 2, 3],",
"'_boolean': new Boolean(false),", "'_boolean': new Boolean(false),",
"'_date': new Date,", "'_date': new Date,",
"'_errors': [new Error, new EvalError, new RangeError, new ReferenceError, new SyntaxError, new TypeError, new URIError]",
"'_function': function() {},", "'_function': function() {},",
"'_nan': NaN,", "'_nan': NaN,",
"'_null': null,", "'_null': null,",
@@ -277,8 +278,7 @@
"'_object': { 'a': 1, 'b': 2, 'c': 3 },", "'_object': { 'a': 1, 'b': 2, 'c': 3 },",
"'_regexp': /x/,", "'_regexp': /x/,",
"'_string': new String('a'),", "'_string': new String('a'),",
"'_undefined': undefined,", "'_undefined': undefined",
"'_error': new Error(),",
'})' '})'
].join('\n'))); ].join('\n')));
} }
@@ -1621,7 +1621,7 @@
test('should ignore primitive `prototype` arguments and use an empty object instead', 1, function() { test('should ignore primitive `prototype` arguments and use an empty object instead', 1, function() {
var primitives = [true, null, 1, 'a', undefined], var primitives = [true, null, 1, 'a', undefined],
expected = _.map(primitives, function() { return true; }); expected = _.map(primitives, _.constant(true));
var actual = _.map(primitives, function(value, index) { var actual = _.map(primitives, function(value, index) {
return _.isPlainObject(index ? _.create(value) : _.create()); return _.isPlainObject(index ? _.create(value) : _.create());
@@ -2397,7 +2397,7 @@
(function() { (function() {
test('should return `true` for empty or falsey collections', 1, function() { test('should return `true` for empty or falsey collections', 1, function() {
var expected = _.map(empties, function() { return true; }); var expected = _.map(empties, _.constant(true));
var actual = _.map(empties, function(value) { var actual = _.map(empties, function(value) {
try { try {
@@ -3979,7 +3979,7 @@
strictEqual(_.isArguments(args), true); strictEqual(_.isArguments(args), true);
}); });
test('should return `false` for non `arguments` objects', 9, function() { test('should return `false` for non `arguments` objects', 10, function() {
var expected = _.map(falsey, _.constant(false)); var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -3989,9 +3989,10 @@
strictEqual(_.isArguments([1, 2, 3]), false); strictEqual(_.isArguments([1, 2, 3]), false);
strictEqual(_.isArguments(true), false); strictEqual(_.isArguments(true), false);
strictEqual(_.isArguments(new Date), false); strictEqual(_.isArguments(new Date), false);
strictEqual(_.isArguments(new Error), false);
strictEqual(_.isArguments(_), false); strictEqual(_.isArguments(_), false);
strictEqual(_.isArguments({ '0': 1, 'callee': _.noop, 'length': 1 }), false); strictEqual(_.isArguments({ '0': 1, 'callee': _.noop, 'length': 1 }), false);
strictEqual(_.isArguments(0), false); strictEqual(_.isArguments(1), false);
strictEqual(_.isArguments(/x/), false); strictEqual(_.isArguments(/x/), false);
strictEqual(_.isArguments('a'), false); strictEqual(_.isArguments('a'), false);
@@ -4019,7 +4020,7 @@
strictEqual(_.isArray([1, 2, 3]), true); strictEqual(_.isArray([1, 2, 3]), true);
}); });
test('should return `false` for non arrays', 9, function() { test('should return `false` for non arrays', 10, function() {
var expected = _.map(falsey, _.constant(false)); var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4029,9 +4030,10 @@
strictEqual(_.isArray(args), false); strictEqual(_.isArray(args), false);
strictEqual(_.isArray(true), false); strictEqual(_.isArray(true), false);
strictEqual(_.isArray(new Date), false); strictEqual(_.isArray(new Date), false);
strictEqual(_.isArray(new Error), false);
strictEqual(_.isArray(_), false); strictEqual(_.isArray(_), false);
strictEqual(_.isArray({ '0': 1, 'length': 1 }), false); strictEqual(_.isArray({ '0': 1, 'length': 1 }), false);
strictEqual(_.isArray(0), false); strictEqual(_.isArray(1), false);
strictEqual(_.isArray(/x/), false); strictEqual(_.isArray(/x/), false);
strictEqual(_.isArray('a'), false); strictEqual(_.isArray('a'), false);
@@ -4062,7 +4064,7 @@
strictEqual(_.isBoolean(new Boolean(false)), true); strictEqual(_.isBoolean(new Boolean(false)), true);
}); });
test('should return `false` for non booleans', 9, function() { test('should return `false` for non booleans', 10, function() {
var expected = _.map(falsey, function(value) { return value === false; }); var expected = _.map(falsey, function(value) { return value === false; });
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4072,9 +4074,10 @@
strictEqual(_.isBoolean(args), false); strictEqual(_.isBoolean(args), false);
strictEqual(_.isBoolean([1, 2, 3]), false); strictEqual(_.isBoolean([1, 2, 3]), false);
strictEqual(_.isBoolean(new Date), false); strictEqual(_.isBoolean(new Date), false);
strictEqual(_.isBoolean(new Error), false);
strictEqual(_.isBoolean(_), false); strictEqual(_.isBoolean(_), false);
strictEqual(_.isBoolean({ 'a': 1 }), false); strictEqual(_.isBoolean({ 'a': 1 }), false);
strictEqual(_.isBoolean(0), false); strictEqual(_.isBoolean(1), false);
strictEqual(_.isBoolean(/x/), false); strictEqual(_.isBoolean(/x/), false);
strictEqual(_.isBoolean('a'), false); strictEqual(_.isBoolean('a'), false);
@@ -4102,7 +4105,7 @@
strictEqual(_.isDate(new Date), true); strictEqual(_.isDate(new Date), true);
}); });
test('should return `false` for non dates', 9, function() { test('should return `false` for non dates', 10, function() {
var expected = _.map(falsey, _.constant(false)); var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4112,9 +4115,10 @@
strictEqual(_.isDate(args), false); strictEqual(_.isDate(args), false);
strictEqual(_.isDate([1, 2, 3]), false); strictEqual(_.isDate([1, 2, 3]), false);
strictEqual(_.isDate(true), false); strictEqual(_.isDate(true), false);
strictEqual(_.isDate(new Error), false);
strictEqual(_.isDate(_), false); strictEqual(_.isDate(_), false);
strictEqual(_.isDate({ 'a': 1 }), false); strictEqual(_.isDate({ 'a': 1 }), false);
strictEqual(_.isDate(0), false); strictEqual(_.isDate(1), false);
strictEqual(_.isDate(/x/), false); strictEqual(_.isDate(/x/), false);
strictEqual(_.isDate('a'), false); strictEqual(_.isDate('a'), false);
@@ -4136,6 +4140,8 @@
QUnit.module('lodash.isElement'); QUnit.module('lodash.isElement');
(function() { (function() {
var args = arguments;
function Element() { function Element() {
this.nodeType = 1; this.nodeType = 1;
} }
@@ -4164,6 +4170,27 @@
} }
}); });
test('should return `false` for non elements', 11, function() {
var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) {
return index ? _.isElement(value) : _.isElement();
});
strictEqual(_.isElement(args), false);
strictEqual(_.isElement([1, 2, 3]), false);
strictEqual(_.isElement(true), false);
strictEqual(_.isElement(new Date), false);
strictEqual(_.isElement(new Error), false);
strictEqual(_.isElement(_), false);
strictEqual(_.isElement({ 'a': 1 }), false);
strictEqual(_.isElement(1), false);
strictEqual(_.isElement(/x/), false);
strictEqual(_.isElement('a'), false);
deepEqual(actual, expected);
});
test('should work with elements from another realm', 1, function() { test('should work with elements from another realm', 1, function() {
if (_._element) { if (_._element) {
strictEqual(_.isElement(_._element), true); strictEqual(_.isElement(_._element), true);
@@ -4172,7 +4199,7 @@
skipTest(); skipTest();
} }
}); });
}()); }(1, 2, 3));
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
@@ -4296,7 +4323,7 @@
var primitive, var primitive,
object = { 'toString': function() { return primitive; } }, object = { 'toString': function() { return primitive; } },
values = [true, null, 1, 'a', undefined], values = [true, null, 1, 'a', undefined],
expected = _.map(values, function() { return false; }); expected = _.map(values, _.constant(false));
var actual = _.map(values, function(value) { var actual = _.map(values, function(value) {
primitive = value; primitive = value;
@@ -4661,7 +4688,7 @@
actual = []; actual = [];
_.each(falsey, function(value) { _.each(falsey, function(value) {
actual.push(_.isEqual('a', 'b', function() { return value; })); actual.push(_.isEqual('a', 'b', _.constant(value)));
}); });
deepEqual(actual, expected); deepEqual(actual, expected);
@@ -4769,6 +4796,60 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
QUnit.module('lodash.isError');
(function() {
var args = arguments;
test('should return `true` for error objects', 1, function() {
var errors = [new Error, new EvalError, new RangeError, new ReferenceError, new SyntaxError, new TypeError, new URIError],
expected = _.map(errors, _.constant(true));
var actual = _.map(errors, function(error) {
return _.isError(error) === true;
});
deepEqual(actual, expected);
});
test('should return `false` for non-error objects', 10, function() {
var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) {
return index ? _.isError(value) : _.isError();
});
strictEqual(_.isError(args), false);
strictEqual(_.isError([1, 2, 3]), false);
strictEqual(_.isError(true), false);
strictEqual(_.isError(new Date), false);
strictEqual(_.isError(_), false);
strictEqual(_.isError({ 'a': 1 }), false);
strictEqual(_.isError(1), false);
strictEqual(_.isError(/x/), false);
strictEqual(_.isError('a'), false);
deepEqual(actual, expected);
});
test('should work with an error object from another realm', 1, function() {
if (_._object) {
var expected = _.map(_._errors, _.constant(true));
var actual = _.map(_._errors, function(error) {
return _.isError(error) === true;
});
deepEqual(actual, expected);
}
else {
skipTest();
}
});
}(1, 2, 3));
/*--------------------------------------------------------------------------*/
QUnit.module('lodash.isFinite'); QUnit.module('lodash.isFinite');
(function() { (function() {
@@ -4786,12 +4867,13 @@
strictEqual(_.isFinite(-Infinity), false); strictEqual(_.isFinite(-Infinity), false);
}); });
test('should return `false` for non-numeric values', 8, function() { test('should return `false` for non-numeric values', 9, function() {
strictEqual(_.isFinite(null), false); strictEqual(_.isFinite(null), false);
strictEqual(_.isFinite(undefined), false); strictEqual(_.isFinite(undefined), false);
strictEqual(_.isFinite([]), false); strictEqual(_.isFinite([]), false);
strictEqual(_.isFinite(true), false); strictEqual(_.isFinite(true), false);
strictEqual(_.isFinite(new Date), false); strictEqual(_.isFinite(new Date), false);
strictEqual(_.isFinite(new Error), false);
strictEqual(_.isFinite(''), false); strictEqual(_.isFinite(''), false);
strictEqual(_.isFinite(' '), false); strictEqual(_.isFinite(' '), false);
strictEqual(_.isFinite('2px'), false); strictEqual(_.isFinite('2px'), false);
@@ -4824,7 +4906,7 @@
strictEqual(_.isFunction(_), true); strictEqual(_.isFunction(_), true);
}); });
test('should return `false` for non functions', 9, function() { test('should return `false` for non functions', 10, function() {
var expected = _.map(falsey, _.constant(false)); var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4835,8 +4917,9 @@
strictEqual(_.isFunction([1, 2, 3]), false); strictEqual(_.isFunction([1, 2, 3]), false);
strictEqual(_.isFunction(true), false); strictEqual(_.isFunction(true), false);
strictEqual(_.isFunction(new Date), false); strictEqual(_.isFunction(new Date), false);
strictEqual(_.isFunction(new Error), false);
strictEqual(_.isFunction({ 'a': 1 }), false); strictEqual(_.isFunction({ 'a': 1 }), false);
strictEqual(_.isFunction(0), false); strictEqual(_.isFunction(1), false);
strictEqual(_.isFunction(/x/), false); strictEqual(_.isFunction(/x/), false);
strictEqual(_.isFunction('a'), false); strictEqual(_.isFunction('a'), false);
@@ -4865,7 +4948,7 @@
strictEqual(_.isNaN(new Number(NaN)), true); strictEqual(_.isNaN(new Number(NaN)), true);
}); });
test('should return `false` for non NaNs', 10, function() { test('should return `false` for non NaNs', 11, function() {
var expected = _.map(falsey, function(value) { return value !== value; }); var expected = _.map(falsey, function(value) { return value !== value; });
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4876,9 +4959,10 @@
strictEqual(_.isNaN([1, 2, 3]), false); strictEqual(_.isNaN([1, 2, 3]), false);
strictEqual(_.isNaN(true), false); strictEqual(_.isNaN(true), false);
strictEqual(_.isNaN(new Date), false); strictEqual(_.isNaN(new Date), false);
strictEqual(_.isNaN(new Error), false);
strictEqual(_.isNaN(_), false); strictEqual(_.isNaN(_), false);
strictEqual(_.isNaN({ 'a': 1 }), false); strictEqual(_.isNaN({ 'a': 1 }), false);
strictEqual(_.isNaN(0), false); strictEqual(_.isNaN(1), false);
strictEqual(_.isNaN(/x/), false); strictEqual(_.isNaN(/x/), false);
strictEqual(_.isNaN('a'), false); strictEqual(_.isNaN('a'), false);
@@ -4906,7 +4990,7 @@
strictEqual(_.isNull(null), true); strictEqual(_.isNull(null), true);
}); });
test('should return `false` for non nulls', 10, function() { test('should return `false` for non nulls', 11, function() {
var expected = _.map(falsey, function(value) { return value === null; }); var expected = _.map(falsey, function(value) { return value === null; });
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4917,9 +5001,10 @@
strictEqual(_.isNull([1, 2, 3]), false); strictEqual(_.isNull([1, 2, 3]), false);
strictEqual(_.isNull(true), false); strictEqual(_.isNull(true), false);
strictEqual(_.isNull(new Date), false); strictEqual(_.isNull(new Date), false);
strictEqual(_.isNull(new Error), false);
strictEqual(_.isNull(_), false); strictEqual(_.isNull(_), false);
strictEqual(_.isNull({ 'a': 1 }), false); strictEqual(_.isNull({ 'a': 1 }), false);
strictEqual(_.isNull(0), false); strictEqual(_.isNull(1), false);
strictEqual(_.isNull(/x/), false); strictEqual(_.isNull(/x/), false);
strictEqual(_.isNull('a'), false); strictEqual(_.isNull('a'), false);
@@ -4948,7 +5033,7 @@
strictEqual(_.isNumber(new Number(0)), true); strictEqual(_.isNumber(new Number(0)), true);
}); });
test('should return `false` for non numbers', 9, function() { test('should return `false` for non numbers', 10, function() {
var expected = _.map(falsey, function(value) { return typeof value == 'number'; }); var expected = _.map(falsey, function(value) { return typeof value == 'number'; });
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -4959,6 +5044,7 @@
strictEqual(_.isNumber([1, 2, 3]), false); strictEqual(_.isNumber([1, 2, 3]), false);
strictEqual(_.isNumber(true), false); strictEqual(_.isNumber(true), false);
strictEqual(_.isNumber(new Date), false); strictEqual(_.isNumber(new Date), false);
strictEqual(_.isNumber(new Error), false);
strictEqual(_.isNumber(_), false); strictEqual(_.isNumber(_), false);
strictEqual(_.isNumber({ 'a': 1 }), false); strictEqual(_.isNumber({ 'a': 1 }), false);
strictEqual(_.isNumber(/x/), false); strictEqual(_.isNumber(/x/), false);
@@ -4988,11 +5074,12 @@
(function() { (function() {
var args = arguments; var args = arguments;
test('should return `true` for objects', 10, function() { test('should return `true` for objects', 11, function() {
strictEqual(_.isObject(args), true); strictEqual(_.isObject(args), true);
strictEqual(_.isObject([1, 2, 3]), true); strictEqual(_.isObject([1, 2, 3]), true);
strictEqual(_.isObject(new Boolean(false)), true); strictEqual(_.isObject(new Boolean(false)), true);
strictEqual(_.isObject(new Date), true); strictEqual(_.isObject(new Date), true);
strictEqual(_.isObject(new Error), true);
strictEqual(_.isObject(_), true); strictEqual(_.isObject(_), true);
strictEqual(_.isObject({ 'a': 1 }), true); strictEqual(_.isObject({ 'a': 1 }), true);
strictEqual(_.isObject(new Number(0)), true); strictEqual(_.isObject(new Number(0)), true);
@@ -5142,7 +5229,7 @@
strictEqual(_.isRegExp(RegExp('x')), true); strictEqual(_.isRegExp(RegExp('x')), true);
}); });
test('should return `false` for non regexes', 9, function() { test('should return `false` for non regexes', 10, function() {
var expected = _.map(falsey, _.constant(false)); var expected = _.map(falsey, _.constant(false));
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -5153,9 +5240,10 @@
strictEqual(_.isRegExp([1, 2, 3]), false); strictEqual(_.isRegExp([1, 2, 3]), false);
strictEqual(_.isRegExp(true), false); strictEqual(_.isRegExp(true), false);
strictEqual(_.isRegExp(new Date), false); strictEqual(_.isRegExp(new Date), false);
strictEqual(_.isRegExp(new Error), false);
strictEqual(_.isRegExp(_), false); strictEqual(_.isRegExp(_), false);
strictEqual(_.isRegExp({ 'a': 1 }), false); strictEqual(_.isRegExp({ 'a': 1 }), false);
strictEqual(_.isRegExp(0), false); strictEqual(_.isRegExp(1), false);
strictEqual(_.isRegExp('a'), false); strictEqual(_.isRegExp('a'), false);
deepEqual(actual, expected); deepEqual(actual, expected);
@@ -5183,7 +5271,7 @@
strictEqual(_.isString(new String('a')), true); strictEqual(_.isString(new String('a')), true);
}); });
test('should return `false` for non strings', 9, function() { test('should return `false` for non strings', 10, function() {
var expected = _.map(falsey, function(value) { return value === ''; }); var expected = _.map(falsey, function(value) { return value === ''; });
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
@@ -5194,9 +5282,10 @@
strictEqual(_.isString([1, 2, 3]), false); strictEqual(_.isString([1, 2, 3]), false);
strictEqual(_.isString(true), false); strictEqual(_.isString(true), false);
strictEqual(_.isString(new Date), false); strictEqual(_.isString(new Date), false);
strictEqual(_.isString(new Error), false);
strictEqual(_.isString(_), false); strictEqual(_.isString(_), false);
strictEqual(_.isString({ '0': 1, 'length': 1 }), false); strictEqual(_.isString({ '0': 1, 'length': 1 }), false);
strictEqual(_.isString(0), false); strictEqual(_.isString(1), false);
strictEqual(_.isString(/x/), false); strictEqual(_.isString(/x/), false);
deepEqual(actual, expected); deepEqual(actual, expected);
@@ -5224,20 +5313,21 @@
strictEqual(_.isUndefined(undefined), true); strictEqual(_.isUndefined(undefined), true);
}); });
test('should return `false` for non `undefined` values', 10, function() { test('should return `false` for non `undefined` values', 11, function() {
var expected = _.map(falsey, function(value) { return value === undefined; }); var expected = _.map(falsey, function(value) { return value === undefined; });
var actual = _.map(falsey, function(value, index) { var actual = _.map(falsey, function(value, index) {
return _.isUndefined(value); return index ? _.isUndefined(value) : _.isUndefined();
}); });
strictEqual(_.isUndefined(args), false); strictEqual(_.isUndefined(args), false);
strictEqual(_.isUndefined([1, 2, 3]), false); strictEqual(_.isUndefined([1, 2, 3]), false);
strictEqual(_.isUndefined(true), false); strictEqual(_.isUndefined(true), false);
strictEqual(_.isUndefined(new Date), false); strictEqual(_.isUndefined(new Date), false);
strictEqual(_.isUndefined(new Error), false);
strictEqual(_.isUndefined(_), false); strictEqual(_.isUndefined(_), false);
strictEqual(_.isUndefined({ 'a': 1 }), false); strictEqual(_.isUndefined({ 'a': 1 }), false);
strictEqual(_.isUndefined(0), false); strictEqual(_.isUndefined(1), false);
strictEqual(_.isUndefined(/x/), false); strictEqual(_.isUndefined(/x/), false);
strictEqual(_.isUndefined('a'), false); strictEqual(_.isUndefined('a'), false);
@@ -5256,60 +5346,13 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
QUnit.module('lodash.isError');
(function() {
var args = arguments;
test('should return `true` for `Error` instances', 7, function() {
strictEqual(_.isError(new Error()), true);
strictEqual(_.isError(new EvalError()), true);
strictEqual(_.isError(new RangeError()), true);
strictEqual(_.isError(new ReferenceError()), true);
strictEqual(_.isError(new SyntaxError()), true);
strictEqual(_.isError(new TypeError()), true);
strictEqual(_.isError(new URIError()), true);
});
test('should return `false` for non `Error` instances', 10, function() {
var expected = _.map(falsey, function(value) { return false; });
var actual = _.map(falsey, function(value, index) {
return _.isError(value);
});
strictEqual(_.isError(args), false);
strictEqual(_.isError([1, 2, 3]), false);
strictEqual(_.isError(true), false);
strictEqual(_.isError(new Date), false);
strictEqual(_.isError(_), false);
strictEqual(_.isError({ 'a': 1 }), false);
strictEqual(_.isError(0), false);
strictEqual(_.isError(/x/), false);
strictEqual(_.isError('a'), false);
deepEqual(actual, expected);
});
test('should work with an `Error` from another realm', 1, function() {
if (_._error) {
strictEqual(_.isError(_._error), true);
}
else {
skipTest();
}
});
}(1, 2, 3));
/*--------------------------------------------------------------------------*/
QUnit.module('isType checks'); QUnit.module('isType checks');
(function() { (function() {
test('should return `false` for subclassed values', 8, function() { test('should return `false` for subclassed values', 8, function() {
var funcs = [ var funcs = [
'isArray', 'isBoolean', 'isDate', 'isFunction', 'isArray', 'isBoolean', 'isDate', 'isError',
'isNumber', 'isRegExp', 'isString', 'isError' 'isFunction', 'isNumber', 'isRegExp', 'isString'
]; ];
_.each(funcs, function(methodName) { _.each(funcs, function(methodName) {
@@ -6895,9 +6938,9 @@
var array = [1, 0, 1]; var array = [1, 0, 1];
test('should always return two groups of elements', 3, function() { test('should always return two groups of elements', 3, function() {
deepEqual(_.partition([], function(value) { return value; }), [[], []]); deepEqual(_.partition([], _.identity), [[], []]);
deepEqual(_.partition(array, function(value) { return true; }), [array, []]); deepEqual(_.partition(array, _.constant(true)), [array, []]);
deepEqual(_.partition(array, function(value) { return false; }), [[], array]); deepEqual(_.partition(array, _.constant(false)), [[], array]);
}); });
test('should use `_.identity` when no `callback` is provided', 1, function() { test('should use `_.identity` when no `callback` is provided', 1, function() {
@@ -8853,7 +8896,7 @@
asyncTest('subsequent calls should return the result of the first call', 5, function() { asyncTest('subsequent calls should return the result of the first call', 5, function() {
if (!(isRhino && isModularize)) { if (!(isRhino && isModularize)) {
var throttled = _.throttle(function(value) { return value; }, 32), var throttled = _.throttle(_.identity, 32),
result = [throttled('a'), throttled('b')]; result = [throttled('a'), throttled('b')];
deepEqual(result, ['a', 'a']); deepEqual(result, ['a', 'a']);