From e9edc06aaf257941b49b1bdb857cbad650866bf3 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 9 Feb 2016 21:56:49 -0800 Subject: [PATCH] Enable `convert` to work when given lodash and `options`. --- fp/_baseConvert.js | 11 ++++---- fp/_convertBrowser.js | 2 +- test/test-fp.js | 62 ++++++++++++++++++++++++------------------- 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/fp/_baseConvert.js b/fp/_baseConvert.js index cf742defe..3dd940401 100644 --- a/fp/_baseConvert.js +++ b/fp/_baseConvert.js @@ -18,12 +18,13 @@ var mapping = require('./_mapping'), * @returns {Function|Object} Returns the converted function or object. */ function baseConvert(util, name, func, options) { - options || (options = {}); - - if (typeof func != 'function') { + var isLib = typeof name == 'function'; + if (isLib) { + options = func; func = name; name = undefined; } + options || (options = {}); if (func == null) { throw new TypeError; } @@ -37,8 +38,6 @@ function baseConvert(util, name, func, options) { var forceRearg = ('rearg' in options) && options.rearg; - var isLib = name === undefined && typeof func.VERSION == 'string'; - var _ = isLib ? func : { 'ary': util.ary, 'cloneDeep': util.cloneDeep, @@ -180,7 +179,7 @@ function baseConvert(util, name, func, options) { }, 'runInContext': function(runInContext) { return function(context) { - return baseConvert(util, runInContext(context), undefined, options); + return baseConvert(util, runInContext(context), options); }; } }; diff --git a/fp/_convertBrowser.js b/fp/_convertBrowser.js index 0e69e66cd..fd7489781 100644 --- a/fp/_convertBrowser.js +++ b/fp/_convertBrowser.js @@ -8,7 +8,7 @@ var baseConvert = require('./_baseConvert'); * @returns {Function} Returns the converted `lodash`. */ function browserConvert(lodash, options) { - return baseConvert(lodash, lodash, undefined, options); + return baseConvert(lodash, lodash, options); } module.exports = browserConvert; diff --git a/test/test-fp.js b/test/test-fp.js index 654652928..c4345340e 100644 --- a/test/test-fp.js +++ b/test/test-fp.js @@ -52,7 +52,8 @@ }; } return function(name, func, options) { - if (typeof func != 'function') { + if (typeof name == 'function') { + options = func; func = name; name = undefined; } @@ -90,18 +91,19 @@ QUnit.module('convert'); (function() { + var allFalseOptions = { + 'cap': false, + 'curry': false, + 'fixed': false, + 'immutable': false, + 'rearg': false + }; + QUnit.test('should accept an `options` argument', function(assert) { assert.expect(3); - var array = [1, 2, 3, 4]; - - var remove = convert('remove', _.remove, { - 'cap': false, - 'curry': false, - 'fixed': false, - 'immutable': false, - 'rearg': false - }); + var array = [1, 2, 3, 4], + remove = convert('remove', _.remove, allFalseOptions); var actual = remove(array, function(n, index) { return index % 2 == 0; @@ -150,9 +152,7 @@ QUnit.test('should respect the `cap` option', function(assert) { assert.expect(1); - var iteratee = convert('iteratee', _.iteratee, { - 'cap': false - }); + var iteratee = convert('iteratee', _.iteratee, { 'cap': false }); var func = iteratee(function(a, b, c) { return [a, b, c]; @@ -164,9 +164,7 @@ QUnit.test('should respect the `rearg` option', function(assert) { assert.expect(1); - var add = convert('add', _.add, { - 'rearg': true - }); + var add = convert('add', _.add, { 'rearg': true }); assert.strictEqual(add('2')('1'), '12'); }); @@ -174,23 +172,31 @@ QUnit.test('should use `options` in `runInContext`', function(assert) { assert.expect(3); - var runInContext = convert('runInContext', _.runInContext, { - 'cap': false, - 'curry': false, - 'fixed': false, - 'immutable': false, - 'rearg': false - }); - var array = [1, 2, 3, 4], + runInContext = convert('runInContext', _.runInContext, allFalseOptions), lodash = runInContext(); - var actual = lodash.remove(array, function(n) { - return n % 2 == 0; + var actual = lodash.remove(array, function(n, index) { + return index % 2 == 0; }); - assert.deepEqual(array, [1, 3]); - assert.deepEqual(actual, [2, 4]); + assert.deepEqual(array, [2, 4]); + assert.deepEqual(actual, [1, 3]); + assert.deepEqual(lodash.remove(), []); + }); + + QUnit.test('should work when given lodash and `options`', function(assert) { + assert.expect(3); + + var array = [1, 2, 3, 4], + lodash = convert(_.runInContext(), allFalseOptions); + + var actual = lodash.remove(array, function(n, index) { + return index % 2 == 0; + }); + + assert.deepEqual(array, [2, 4]); + assert.deepEqual(actual, [1, 3]); assert.deepEqual(lodash.remove(), []); }); }());