From f58002f0a639fa6427c6d64c02027e982616d951 Mon Sep 17 00:00:00 2001 From: ksvitkovsky Date: Fri, 4 Aug 2017 11:12:22 +0400 Subject: [PATCH] Better primitives detection for saveArgsByValue --- spec/core/CallTrackerSpec.js | 10 ++++++++++ src/core/CallTracker.js | 9 ++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/spec/core/CallTrackerSpec.js b/spec/core/CallTrackerSpec.js index f6f64db5..3fdc8c60 100644 --- a/spec/core/CallTrackerSpec.js +++ b/spec/core/CallTrackerSpec.js @@ -117,4 +117,14 @@ describe("CallTracker", function() { expect(callTracker.mostRecent().args[1]).not.toBe(arrayArg); expect(callTracker.mostRecent().args[1]).toEqual(arrayArg); }); + + it('saves primitive arguments by value', function() { + var callTracker = new jasmineUnderTest.CallTracker(), + args = [undefined, null, false, '', /\s/, 0, 1.2, NaN]; + + callTracker.saveArgumentsByValue(); + callTracker.track({ object: {}, args: args }); + + expect(callTracker.mostRecent().args).toEqual(args); + }); }); diff --git a/src/core/CallTracker.js b/src/core/CallTracker.js index 6f8c535b..f7ae4013 100644 --- a/src/core/CallTracker.js +++ b/src/core/CallTracker.js @@ -11,10 +11,13 @@ getJasmineRequireObj().CallTracker = function(j$) { var clonedArgs = []; var argsAsArray = j$.util.argsToArray(context.args); for(var i = 0; i < argsAsArray.length; i++) { - if(Object.prototype.toString.apply(argsAsArray[i]).match(/^\[object/)) { - clonedArgs.push(j$.util.clone(argsAsArray[i])); - } else { + var str = Object.prototype.toString.apply(argsAsArray[i]), + primitives = /^\[object (Boolean|String|RegExp|Number)/; + + if (argsAsArray[i] == null || str.match(primitives)) { clonedArgs.push(argsAsArray[i]); + } else { + clonedArgs.push(j$.util.clone(argsAsArray[i])); } } context.args = clonedArgs;