(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));