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:
Gregg Van Hove
2016-02-16 14:49:10 -08:00
4 changed files with 63 additions and 4 deletions

View File

@@ -49,7 +49,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
j$.errors = jRequire.errors();
j$.Any = jRequire.Any(j$);
j$.Anything = jRequire.Anything(j$);
j$.CallTracker = jRequire.CallTracker();
j$.CallTracker = jRequire.CallTracker(j$);
j$.MockDate = jRequire.MockDate();
j$.Clock = jRequire.Clock();
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();
@@ -1079,12 +1079,29 @@ getJasmineRequireObj().JsApiReporter = function() {
return JsApiReporter;
};
getJasmineRequireObj().CallTracker = function() {
getJasmineRequireObj().CallTracker = function(j$) {
function CallTracker() {
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) {
if(opts.cloneArgs) {
argCloner(context);
}
calls.push(context);
};
@@ -1125,6 +1142,11 @@ getJasmineRequireObj().CallTracker = function() {
this.reset = function() {
calls = [];
};
this.saveArgumentsByValue = function() {
opts.cloneArgs = true;
};
}
return CallTracker;

View File

@@ -102,4 +102,19 @@ describe("CallTracker", function() {
expect(callTracker.all()).toEqual([]);
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);
});
});

View File

@@ -1,9 +1,26 @@
getJasmineRequireObj().CallTracker = function() {
getJasmineRequireObj().CallTracker = function(j$) {
function CallTracker() {
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) {
if(opts.cloneArgs) {
argCloner(context);
}
calls.push(context);
};
@@ -44,6 +61,11 @@ getJasmineRequireObj().CallTracker = function() {
this.reset = function() {
calls = [];
};
this.saveArgumentsByValue = function() {
opts.cloneArgs = true;
};
}
return CallTracker;

View File

@@ -27,7 +27,7 @@ var getJasmineRequireObj = (function (jasmineGlobal) {
j$.errors = jRequire.errors();
j$.Any = jRequire.Any(j$);
j$.Anything = jRequire.Anything(j$);
j$.CallTracker = jRequire.CallTracker();
j$.CallTracker = jRequire.CallTracker(j$);
j$.MockDate = jRequire.MockDate();
j$.Clock = jRequire.Clock();
j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler();