From ee1933389ae5e931a03115a1c118537095c16cdf Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Tue, 14 May 2013 22:48:34 -0700 Subject: [PATCH] Add `_.chain` tests and ensure they pass. Former-commit-id: e365b65da8a740383c975c7b904ad2156d1cc8ab --- build.js | 9 ++++----- dist/lodash.compat.js | 5 ++++- dist/lodash.compat.min.js | 2 +- dist/lodash.js | 5 ++++- dist/lodash.min.js | 12 ++++++------ dist/lodash.underscore.js | 6 ++++-- dist/lodash.underscore.min.js | 14 +++++++------- lodash.js | 5 ++++- test/test.js | 17 +++++++++++++++++ 9 files changed, 51 insertions(+), 24 deletions(-) diff --git a/build.js b/build.js index cf3c2df4d..f9bd49b98 100755 --- a/build.js +++ b/build.js @@ -367,14 +367,13 @@ ].join('\n' + indent)); }); - // replace `lodash.chain` assignment + // replace `chain` assignments source = source.replace(getMethodAssignments(source), function(match) { - return match.replace(/^( *lodash\.chain *= *).+/m, '$1chain;'); + return match + .replace(/^( *lodash\.chain *= *)[\s\S]+?(?=;\n)/m, '$1chain') + .replace(/^( *lodash\.prototype\.chain *= *)[\s\S]+?(?=;\n)/m, '$1wrapperChain'); }); - // add `lodash.prototype.chain` assignment - source = source.replace(/^( *)lodash\.prototype\.value *=.+\n/m, '$1lodash.prototype.chain = wrapperChain;\n$&'); - // remove `lodash.prototype.toString` and `lodash.prototype.valueOf` assignments source = source.replace(/^ *lodash\.prototype\.(?:toString|valueOf) *=.+\n/gm, ''); diff --git a/dist/lodash.compat.js b/dist/lodash.compat.js index 55749dde8..4f37c3fca 100644 --- a/dist/lodash.compat.js +++ b/dist/lodash.compat.js @@ -5376,7 +5376,6 @@ lodash.zipObject = zipObject; // add aliases - lodash.chain = lodash; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; @@ -5387,6 +5386,10 @@ lodash.tail = rest; lodash.unique = uniq; + // add chain compat + lodash.chain = lodash; + lodash.prototype.chain = function() { return this; }; + // add functions to `lodash.prototype` mixin(lodash); diff --git a/dist/lodash.compat.min.js b/dist/lodash.compat.min.js index da6b3ba70..b584fbfca 100644 --- a/dist/lodash.compat.min.js +++ b/dist/lodash.compat.min.js @@ -36,7 +36,7 @@ if(!t&&xe(n)){e=-1;for(var o=n.length;++ee?pe(0,r+e):ve(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=It,a.noConflict=function(){return r._=Vt,this},a.parseInt=qe,a.random=function(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var e=he();return n%1||t%1?n+ve(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+Zt(e*(t-n+1))},a.reduce=yt,a.reduceRight=dt,a.result=function(n,t){var r=n?n[t]:e;return rt(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0; diff --git a/dist/lodash.js b/dist/lodash.js index dbd4ca397..9b725b409 100644 --- a/dist/lodash.js +++ b/dist/lodash.js @@ -5066,7 +5066,6 @@ lodash.zipObject = zipObject; // add aliases - lodash.chain = lodash; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; @@ -5077,6 +5076,10 @@ lodash.tail = rest; lodash.unique = uniq; + // add chain compat + lodash.chain = lodash; + lodash.prototype.chain = function() { return this; }; + // add functions to `lodash.prototype` mixin(lodash); diff --git a/dist/lodash.min.js b/dist/lodash.min.js index 1027eb523..c583ef8c7 100644 --- a/dist/lodash.min.js +++ b/dist/lodash.min.js @@ -21,7 +21,7 @@ if(typeof u!="number")var i=we(n),u=i.length;return t=G.createCallback(t,r,4),bt if(typeof t!="number"&&t!=u){var o=-1;for(t=G.createCallback(t,e);++oe?ge(0,u+e):e||0)-1;else if(e)return r=Nt(n,t),n[r]===t?r:-1; for(;++r>>1,e(n[r])=s;if(v)var g={};for(r!=u&&(l=[],r=G.createCallback(r,o));++iEt(l,y))&&((r||v)&&l.push(y),c.push(o))}return c}function At(n){for(var t=-1,e=n?dt(_t(n,"length")):0,r=Dt(0>e?0:e);++t/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:d,variable:"",imports:{_:G}},Y.prototype=G.prototype;var ke=le,we=ve?function(n){return ft(n)?ve(n):[]}:V,je={"&":"&","<":"<",">":">",'"':""","'":"'"},Ce=at(je);return Ut&&i&&typeof oe=="function"&&(Ft=Bt(oe,o)),zt=8==he(_+"08")?he:function(n,t){return he(lt(n)?n.replace(k,""):n,t||0) },G.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},G.assign=U,G.at=function(n){for(var t=-1,e=te.apply(Qt,me.call(arguments,1)),r=e.length,u=Dt(r);++te?ge(0,r+e):ye(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},G.mixin=Tt,G.noConflict=function(){return o._=Xt,this},G.parseInt=zt,G.random=function(n,t){n==u&&t==u&&(t=1),n=+n||0,t==u?(t=n,n=0):t=+t||0;var e=be();return n%1||t%1?n+ye(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+ee(e*(t-n+1))},G.reduce=kt,G.reduceRight=wt,G.result=function(n,t){var r=n?n[t]:e; -return it(r)?n[t]():r},G.runInContext=t,G.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:we(n).length},G.some=jt,G.sortedIndex=Nt,G.template=function(n,t,u){var a=G.templateSettings;n||(n=""),u=M({},u,a);var o,i=M({},u.imports,a.imports),a=we(i),i=st(i),f=0,c=u.interpolate||w,l="__p+='",c=Ht((u.escape||w).source+"|"+c.source+"|"+(c===d?b:w).source+"|"+(u.evaluate||w).source+"|$","g");n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(C,W),e&&(l+="'+__e("+e+")+'"),i&&(o=r,l+="';"+i+";__p+='"),u&&(l+="'+((__t=("+u+"))==null?'':__t)+'"),f=c+t.length,t +return u},G.toArray=function(n){return n&&typeof n.length=="number"?tt(n):st(n)},G.union=function(n){return ke(n)||(arguments[0]=n?me.call(n):Qt),St(te.apply(Qt,arguments))},G.uniq=St,G.unzip=At,G.values=st,G.where=yt,G.without=function(n){return Ct(n,me.call(arguments,1))},G.wrap=function(n,t){return function(){var e=[n];return ae.apply(e,arguments),t.apply(this,e)}},G.zip=function(n){return n?At(arguments):[]},G.zipObject=$t,G.collect=mt,G.drop=It,G.each=bt,G.extend=U,G.methods=ut,G.object=$t,G.select=yt,G.tail=It,G.unique=St,G.chain=G,G.prototype.chain=function(){return this +},Tt(G),G.clone=rt,G.cloneDeep=function(n,t,e){return rt(n,r,t,e)},G.contains=vt,G.escape=function(n){return n==u?"":Jt(n).replace(j,X)},G.every=gt,G.find=ht,G.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=G.createCallback(t,e);++re?ge(0,r+e):ye(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},G.mixin=Tt,G.noConflict=function(){return o._=Xt,this},G.parseInt=zt,G.random=function(n,t){n==u&&t==u&&(t=1),n=+n||0,t==u?(t=n,n=0):t=+t||0;var e=be();return n%1||t%1?n+ye(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+ee(e*(t-n+1)) +},G.reduce=kt,G.reduceRight=wt,G.result=function(n,t){var r=n?n[t]:e;return it(r)?n[t]():r},G.runInContext=t,G.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:we(n).length},G.some=jt,G.sortedIndex=Nt,G.template=function(n,t,u){var a=G.templateSettings;n||(n=""),u=M({},u,a);var o,i=M({},u.imports,a.imports),a=we(i),i=st(i),f=0,c=u.interpolate||w,l="__p+='",c=Ht((u.escape||w).source+"|"+c.source+"|"+(c===d?b:w).source+"|"+(u.evaluate||w).source+"|$","g");n.replace(c,function(t,e,u,a,i,c){return u||(u=a),l+=n.slice(f,c).replace(C,W),e&&(l+="'+__e("+e+")+'"),i&&(o=r,l+="';"+i+";__p+='"),u&&(l+="'+((__t=("+u+"))==null?'':__t)+'"),f=c+t.length,t }),l+="';\n",c=u=u.variable,c||(u="obj",l="with("+u+"){"+l+"}"),l=(o?l.replace(v,""):l).replace(g,"$1").replace(y,"$1;"),l="function("+u+"){"+(c?"":u+"||("+u+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";try{var p=Mt(a,"return "+l).apply(e,i)}catch(s){throw s.source=l,s}return t?p(t):(p.source=l,p)},G.unescape=function(n){return n==u?"":Jt(n).replace(h,et)},G.uniqueId=function(n){var t=++c;return Jt(n==u?"":n)+t },G.all=gt,G.any=jt,G.detect=ht,G.foldl=kt,G.foldr=wt,G.include=vt,G.inject=kt,P(G,function(n,t){G.prototype[t]||(G.prototype[t]=function(){var t=[this.__wrapped__];return ae.apply(t,arguments),n.apply(G,t)})}),G.first=xt,G.last=function(n,t,e){if(n){var r=0,a=n.length;if(typeof t!="number"&&t!=u){var o=a;for(t=G.createCallback(t,e);o--&&t(n[o],o,n);)r++}else if(r=t,r==u||e)return n[a-1];return tt(n,ge(0,a-r))}},G.take=xt,G.head=xt,P(G,function(n,t){G.prototype[t]||(G.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e); return t==u||e&&typeof t!="function"?r:new Y(r)})}),G.VERSION="1.2.1",G.prototype.toString=function(){return Jt(this.__wrapped__)},G.prototype.value=qt,G.prototype.valueOf=qt,bt(["join","pop","shift"],function(n){var t=Qt[n];G.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),bt(["push","reverse","sort","unshift"],function(n){var t=Qt[n];G.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),bt(["concat","slice","splice"],function(n){var t=Qt[n];G.prototype[n]=function(){return new Y(t.apply(this.__wrapped__,arguments)) diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js index 1b89fabd2..398b942d9 100644 --- a/dist/lodash.underscore.js +++ b/dist/lodash.underscore.js @@ -4282,7 +4282,6 @@ lodash.zip = zip; // add aliases - lodash.chain = chain; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; @@ -4293,6 +4292,10 @@ lodash.tail = rest; lodash.unique = uniq; + // add chain compat + lodash.chain = chain; + lodash.prototype.chain = wrapperChain; + /*--------------------------------------------------------------------------*/ // add functions that return unwrapped values when chaining @@ -4369,7 +4372,6 @@ mixin(lodash); // add "Chaining" functions to the wrapper - lodash.prototype.chain = wrapperChain; lodash.prototype.value = wrapperValueOf; // add `Array` mutator functions to the wrapper diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js index 4d1b51fe2..7d8278ae6 100644 --- a/dist/lodash.underscore.min.js +++ b/dist/lodash.underscore.min.js @@ -26,10 +26,10 @@ return mt.call(r,e)?r[e]:r[e]=n.apply(this,arguments)}},t.min=function(n,t,r){va u[t]=[o,n[o]]}return u},t.partial=function(n){return e(n,Bt.call(arguments,1))},t.pick=function(n){for(var t=-1,r=ht.apply(ct,Bt.call(arguments,1)),e=r.length,u={};++tr?0:r);++tr?Ot(0,e+r):St(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},t.mixin=V,t.noConflict=function(){return n._=pt,this},t.random=function(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var r=Nt();return n%1||t%1?n+St(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+yt(r*(t-n+1))},t.reduce=B,t.reduceRight=F,t.result=function(n,t){var r=n?n[t]:null;return y(r)?n[t]():r},t.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Rt(n).length},t.some=k,t.sortedIndex=I,t.template=function(n,r,e){n||(n=""),e=p({},e,t.templateSettings); -var o=0,i="__p+='",a=e.variable;n.replace(RegExp((e.escape||X).source+"|"+(e.interpolate||X).source+"|"+(e.evaluate||X).source+"|$","g"),function(t,r,e,a,f){return i+=n.slice(o,f).replace(Z,u),r&&(i+="'+_['escape']("+r+")+'"),a&&(i+="';"+a+";__p+='"),e&&(i+="'+((__t=("+e+"))==null?'':__t)+'"),o=f+t.length,t}),i+="';\n",a||(a="obj",i="with("+a+"||{}){"+i+"}"),i="function("+a+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+i+"return __p}";try{var f=Function("_","return "+i)(t) -}catch(l){throw l.source=i,l}return r?f(r):(f.source=i,f)},t.unescape=function(n){return null==n?"":(n+"").replace(Q,f)},t.uniqueId=function(n){var t=++J+"";return n?n+t:t},t.all=w,t.any=k,t.detect=x,t.foldl=B,t.foldr=F,t.include=j,t.inject=B,t.first=D,t.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=P(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,null==e||r)return n[u-1];return Bt.call(n,Ot(0,u-e))}},t.take=D,t.head=D,t.VERSION="1.2.1",V(t),t.prototype.chain=function(){return this.__chain__=!0,this -},t.prototype.value=function(){return this.__wrapped__},E("pop push reverse shift sort splice unshift".split(" "),function(n){var r=ct[n];t.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),!kt.spliceObjects&&0===n.length&&delete n[0],this}}),E(["concat","join","slice"],function(n){var r=ct[n];t.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new i(n),n.__chain__=!0),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=t, define(function(){return t -})):W&&!W.nodeType?G?(G.exports=t)._=t:W._=t:n._=t})(this); \ No newline at end of file +return e},t.collect=O,t.drop=$,t.each=E,t.extend=c,t.methods=s,t.object=function(n,t){for(var r=-1,e=n?n.length:0,u={};++rr?Ot(0,e+r):St(r,e-1))+1);e--;)if(n[e]===t)return e;return-1},t.mixin=V,t.noConflict=function(){return n._=pt,this},t.random=function(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var r=Nt();return n%1||t%1?n+St(r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+yt(r*(t-n+1))},t.reduce=B,t.reduceRight=F,t.result=function(n,t){var r=n?n[t]:null; +return y(r)?n[t]():r},t.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Rt(n).length},t.some=k,t.sortedIndex=I,t.template=function(n,r,e){n||(n=""),e=p({},e,t.templateSettings);var o=0,i="__p+='",a=e.variable;n.replace(RegExp((e.escape||X).source+"|"+(e.interpolate||X).source+"|"+(e.evaluate||X).source+"|$","g"),function(t,r,e,a,f){return i+=n.slice(o,f).replace(Z,u),r&&(i+="'+_['escape']("+r+")+'"),a&&(i+="';"+a+";__p+='"),e&&(i+="'+((__t=("+e+"))==null?'':__t)+'"),o=f+t.length,t}),i+="';\n",a||(a="obj",i="with("+a+"||{}){"+i+"}"),i="function("+a+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+i+"return __p}"; +try{var f=Function("_","return "+i)(t)}catch(l){throw l.source=i,l}return r?f(r):(f.source=i,f)},t.unescape=function(n){return null==n?"":(n+"").replace(Q,f)},t.uniqueId=function(n){var t=++J+"";return n?n+t:t},t.all=w,t.any=k,t.detect=x,t.foldl=B,t.foldr=F,t.include=j,t.inject=B,t.first=D,t.last=function(n,t,r){if(n){var e=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=P(t,r);o--&&t(n[o],o,n);)e++}else if(e=t,null==e||r)return n[u-1];return Bt.call(n,Ot(0,u-e))}},t.take=D,t.head=D,t.VERSION="1.2.1",V(t),t.prototype.value=function(){return this.__wrapped__ +},E("pop push reverse shift sort splice unshift".split(" "),function(n){var r=ct[n];t.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),!kt.spliceObjects&&0===n.length&&delete n[0],this}}),E(["concat","join","slice"],function(n){var r=ct[n];t.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new i(n),n.__chain__=!0),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=t, define(function(){return t})):W&&!W.nodeType?G?(G.exports=t)._=t:W._=t:n._=t +})(this); \ No newline at end of file diff --git a/lodash.js b/lodash.js index 4254f5535..cca012771 100644 --- a/lodash.js +++ b/lodash.js @@ -5394,7 +5394,6 @@ lodash.zipObject = zipObject; // add aliases - lodash.chain = lodash; lodash.collect = map; lodash.drop = rest; lodash.each = forEach; @@ -5405,6 +5404,10 @@ lodash.tail = rest; lodash.unique = uniq; + // add chain compat + lodash.chain = lodash; + lodash.prototype.chain = function() { return this; }; + // add functions to `lodash.prototype` mixin(lodash); diff --git a/test/test.js b/test/test.js index f5be7bc45..33abe0c92 100644 --- a/test/test.js +++ b/test/test.js @@ -338,6 +338,23 @@ }); }()); + + /*--------------------------------------------------------------------------*/ + + QUnit.module('lodash.chain'); + + (function() { + test('should return a wrapped value', function() { + var actual = _.chain({ 'a': 0 }); + ok(actual instanceof _); + }); + + test('should return the existing wrapper when chaining', function() { + var wrapper = _({ 'a': 0 }); + equal(wrapper.chain(), wrapper); + }); + }()); + /*--------------------------------------------------------------------------*/ QUnit.module('cloning');