From 1f6c91de7ce788126ac59040bc803b22acbbab58 Mon Sep 17 00:00:00 2001 From: Audrius Jakumavicius Date: Sat, 7 Oct 2017 01:32:39 +0200 Subject: [PATCH] Deep clone args before passing them to reporters --- src/core/CallTracker.js | 18 +----------------- src/core/ReportDispatcher.js | 4 ++-- src/core/requireCore.js | 4 ++-- src/core/util.js | 18 +++++++++++++++++- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/core/CallTracker.js b/src/core/CallTracker.js index f7ae4013..f1fdfbc5 100644 --- a/src/core/CallTracker.js +++ b/src/core/CallTracker.js @@ -7,25 +7,9 @@ getJasmineRequireObj().CallTracker = function(j$) { var calls = []; var opts = {}; - function argCloner(context) { - var clonedArgs = []; - var argsAsArray = j$.util.argsToArray(context.args); - for(var i = 0; i < argsAsArray.length; i++) { - 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; - } - this.track = function(context) { if(opts.cloneArgs) { - argCloner(context); + context.args = j$.util.cloneArgs(context.args); } calls.push(context); }; diff --git a/src/core/ReportDispatcher.js b/src/core/ReportDispatcher.js index 1ffd4147..4e8b29ea 100644 --- a/src/core/ReportDispatcher.js +++ b/src/core/ReportDispatcher.js @@ -1,4 +1,4 @@ -getJasmineRequireObj().ReportDispatcher = function() { +getJasmineRequireObj().ReportDispatcher = function(j$) { function ReportDispatcher(methods) { var dispatchedMethods = methods || []; @@ -36,7 +36,7 @@ getJasmineRequireObj().ReportDispatcher = function() { for (var i = 0; i < reporters.length; i++) { var reporter = reporters[i]; if (reporter[method]) { - reporter[method].apply(reporter, args); + reporter[method].apply(reporter, j$.util.cloneArgs(args)); } } } diff --git a/src/core/requireCore.js b/src/core/requireCore.js index c89d3ae1..44e868e3 100644 --- a/src/core/requireCore.js +++ b/src/core/requireCore.js @@ -23,7 +23,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) { var j$ = {}; jRequire.base(j$, jasmineGlobal); - j$.util = jRequire.util(); + j$.util = jRequire.util(j$); j$.errors = jRequire.errors(); j$.formatErrorMsg = jRequire.formatErrorMsg(); j$.Any = jRequire.Any(j$); @@ -44,7 +44,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) { j$.ArrayWithExactContents = jRequire.ArrayWithExactContents(j$); j$.pp = jRequire.pp(j$); j$.QueueRunner = jRequire.QueueRunner(j$); - j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.ReportDispatcher = jRequire.ReportDispatcher(j$); j$.Spec = jRequire.Spec(j$); j$.Spy = jRequire.Spy(j$); j$.SpyRegistry = jRequire.SpyRegistry(j$); diff --git a/src/core/util.js b/src/core/util.js index 121e3746..f7453cde 100644 --- a/src/core/util.js +++ b/src/core/util.js @@ -1,4 +1,4 @@ -getJasmineRequireObj().util = function() { +getJasmineRequireObj().util = function(j$) { var util = {}; @@ -55,6 +55,22 @@ getJasmineRequireObj().util = function() { return cloned; }; + util.cloneArgs = function(args) { + var clonedArgs = []; + var argsAsArray = j$.util.argsToArray(args); + for(var i = 0; i < argsAsArray.length; i++) { + 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])); + } + } + return clonedArgs; + }; + util.getPropertyDescriptor = function(obj, methodName) { var descriptor, proto = obj;