mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-31 15:27:50 +00:00
155 lines
4.2 KiB
JavaScript
155 lines
4.2 KiB
JavaScript
(function(window, undefined) {
|
|
|
|
/** Use a single load function */
|
|
var load = typeof require == 'function' ? require : window.load;
|
|
|
|
/** The unit testing framework */
|
|
var QUnit =
|
|
window.QUnit || (
|
|
window.setTimeout || (window.addEventListener = window.setTimeout = / /),
|
|
window.QUnit = load('../vendor/qunit/qunit/qunit.js') || window.QUnit,
|
|
load('../vendor/qunit-clib/qunit-clib.js'),
|
|
(window.addEventListener || 0).test && delete window.addEventListener,
|
|
window.QUnit
|
|
);
|
|
|
|
/** The `lodash` function to test */
|
|
var _ =
|
|
window._ || (
|
|
_ = load('../lodash.js') || window._,
|
|
_._ || _
|
|
);
|
|
|
|
/** Shortcut used to convert array-like objects to arrays */
|
|
var slice = [].slice;
|
|
|
|
/** Used to resolve a value's internal [[Class]] */
|
|
var toString = {}.toString;
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Skips a given number of tests with a passing result.
|
|
*
|
|
* @private
|
|
* @param {Number} count The number of tests to skip.
|
|
*/
|
|
function skipTest(count) {
|
|
while (count--) {
|
|
ok(true, 'test skipped');
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
// must explicitly use `QUnit.module` instead of `module()`
|
|
// in case we are in a CLI environment
|
|
QUnit.module('lodash');
|
|
|
|
(function() {
|
|
test('supports loading lodash.js as a module', function() {
|
|
if (window.document && window.require) {
|
|
equal((_2 || {}).VERSION, _.VERSION);
|
|
} else {
|
|
skipTest(1)
|
|
}
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash constructor');
|
|
|
|
(function() {
|
|
test('creates a new instance when called without the `new` operator', function() {
|
|
ok(_() instanceof _);
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash.forEach');
|
|
|
|
(function() {
|
|
test('returns the collection', function() {
|
|
var collection = [1, 2, 3, 4];
|
|
equal(_.forEach(collection, Boolean), collection);
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash.initial');
|
|
|
|
(function() {
|
|
test('returns an empty collection for `n` of `0`', function() {
|
|
var array = [1, 2, 3, 4];
|
|
deepEqual(_.initial(array, 0), []);
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash.isNaN');
|
|
|
|
(function() {
|
|
test('returns `true` for `new Number(NaN)`', function() {
|
|
equal(_.isNaN(new Number(NaN)), true)
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash.reduceRight');
|
|
|
|
(function() {
|
|
test('should pass the correct `callback` arguments when iterating an object', function() {
|
|
var args,
|
|
object = { 'a': 'A', 'b': 'B', 'c': 'C' },
|
|
keys = _.keys(object);
|
|
|
|
_.reduceRight(object, function() {
|
|
args || (args = slice.call(arguments));
|
|
});
|
|
|
|
deepEqual(args, ['C', 'B', 'b', object]);
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash.size');
|
|
|
|
(function() {
|
|
test('should detect the size of a string value', function() {
|
|
equal(_.size('abc'), 3);
|
|
});
|
|
}());
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
QUnit.module('lodash.toArray');
|
|
|
|
(function() {
|
|
var args = arguments;
|
|
|
|
test('should call custom `toArray` method of an array', function() {
|
|
var array = [1, 2, 3];
|
|
array.toArray = function() { return [3, 2, 1]; };
|
|
deepEqual(_.toArray(array), [3, 2, 1]);
|
|
});
|
|
|
|
test('should treat array-like-objects like arrays', function() {
|
|
var object = { '0': 'a', '1': 'b', '2': 'c', 'length': 3 };
|
|
deepEqual(_.toArray(object), ['a', 'b', 'c']);
|
|
deepEqual(_.toArray(args), [1, 2, 3]);
|
|
});
|
|
}(1, 2, 3));
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
// explicitly call `QUnit.start()` in a CLI environment
|
|
if (!window.document) {
|
|
QUnit.start();
|
|
}
|
|
}(typeof global == 'object' && global || this)); |