Merge branch 'cloned-args-on-calltracker' of https://github.com/a-r-d/jasmine into a-r-d-cloned-args-on-calltracker
- Merges #1000 - Fixes #872
This commit is contained in:
@@ -49,7 +49,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
|
|||||||
j$.errors = jRequire.errors();
|
j$.errors = jRequire.errors();
|
||||||
j$.Any = jRequire.Any(j$);
|
j$.Any = jRequire.Any(j$);
|
||||||
j$.Anything = jRequire.Anything(j$);
|
j$.Anything = jRequire.Anything(j$);
|
||||||
j$.CallTracker = jRequire.CallTracker();
|
j$.CallTracker = jRequire.CallTracker(j$);
|
||||||
j$.MockDate = jRequire.MockDate();
|
j$.MockDate = jRequire.MockDate();
|
||||||
j$.Clock = jRequire.Clock();
|
j$.Clock = jRequire.Clock();
|
||||||
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
|
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
|
||||||
@@ -1079,12 +1079,29 @@ getJasmineRequireObj().JsApiReporter = function() {
|
|||||||
return JsApiReporter;
|
return JsApiReporter;
|
||||||
};
|
};
|
||||||
|
|
||||||
getJasmineRequireObj().CallTracker = function() {
|
getJasmineRequireObj().CallTracker = function(j$) {
|
||||||
|
|
||||||
function CallTracker() {
|
function CallTracker() {
|
||||||
var calls = [];
|
var calls = [];
|
||||||
|
var opts = {};
|
||||||
|
|
||||||
|
function argCloner(context) {
|
||||||
|
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 {
|
||||||
|
clonedArgs.push(argsAsArray[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context.args = clonedArgs;
|
||||||
|
}
|
||||||
|
|
||||||
this.track = function(context) {
|
this.track = function(context) {
|
||||||
|
if(opts.cloneArgs) {
|
||||||
|
argCloner(context);
|
||||||
|
}
|
||||||
calls.push(context);
|
calls.push(context);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1125,6 +1142,11 @@ getJasmineRequireObj().CallTracker = function() {
|
|||||||
this.reset = function() {
|
this.reset = function() {
|
||||||
calls = [];
|
calls = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.saveArgumentsByValue = function() {
|
||||||
|
opts.cloneArgs = true;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return CallTracker;
|
return CallTracker;
|
||||||
|
|||||||
@@ -102,4 +102,19 @@ describe("CallTracker", function() {
|
|||||||
expect(callTracker.all()).toEqual([]);
|
expect(callTracker.all()).toEqual([]);
|
||||||
expect(callTracker.mostRecent()).toBeFalsy();
|
expect(callTracker.mostRecent()).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("allows object arguments to be shallow cloned", function() {
|
||||||
|
var callTracker = new jasmineUnderTest.CallTracker();
|
||||||
|
callTracker.saveArgumentsByValue();
|
||||||
|
|
||||||
|
var objectArg = {"foo": "bar"},
|
||||||
|
arrayArg = ["foo", "bar"];
|
||||||
|
|
||||||
|
callTracker.track({object: {}, args: [objectArg, arrayArg, false, undefined, null, NaN, "", 0, 1.0]});
|
||||||
|
|
||||||
|
expect(callTracker.mostRecent().args[0]).not.toBe(objectArg);
|
||||||
|
expect(callTracker.mostRecent().args[0]).toEqual(objectArg);
|
||||||
|
expect(callTracker.mostRecent().args[1]).not.toBe(arrayArg);
|
||||||
|
expect(callTracker.mostRecent().args[1]).toEqual(arrayArg);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,26 @@
|
|||||||
getJasmineRequireObj().CallTracker = function() {
|
getJasmineRequireObj().CallTracker = function(j$) {
|
||||||
|
|
||||||
function CallTracker() {
|
function CallTracker() {
|
||||||
var calls = [];
|
var calls = [];
|
||||||
|
var opts = {};
|
||||||
|
|
||||||
|
function argCloner(context) {
|
||||||
|
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 {
|
||||||
|
clonedArgs.push(argsAsArray[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context.args = clonedArgs;
|
||||||
|
}
|
||||||
|
|
||||||
this.track = function(context) {
|
this.track = function(context) {
|
||||||
|
if(opts.cloneArgs) {
|
||||||
|
argCloner(context);
|
||||||
|
}
|
||||||
calls.push(context);
|
calls.push(context);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -44,6 +61,11 @@ getJasmineRequireObj().CallTracker = function() {
|
|||||||
this.reset = function() {
|
this.reset = function() {
|
||||||
calls = [];
|
calls = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.saveArgumentsByValue = function() {
|
||||||
|
opts.cloneArgs = true;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return CallTracker;
|
return CallTracker;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
|
|||||||
j$.errors = jRequire.errors();
|
j$.errors = jRequire.errors();
|
||||||
j$.Any = jRequire.Any(j$);
|
j$.Any = jRequire.Any(j$);
|
||||||
j$.Anything = jRequire.Anything(j$);
|
j$.Anything = jRequire.Anything(j$);
|
||||||
j$.CallTracker = jRequire.CallTracker();
|
j$.CallTracker = jRequire.CallTracker(j$);
|
||||||
j$.MockDate = jRequire.MockDate();
|
j$.MockDate = jRequire.MockDate();
|
||||||
j$.Clock = jRequire.Clock();
|
j$.Clock = jRequire.Clock();
|
||||||
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
|
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
|
||||||
|
|||||||
Reference in New Issue
Block a user