From bf4694333cde39049818e7f4768a47d345275a94 Mon Sep 17 00:00:00 2001 From: Elliot Nelson Date: Thu, 6 Feb 2020 10:29:02 -0500 Subject: [PATCH] Improve wrapper function and parameter naming --- spec/core/integration/EnvSpec.js | 10 ++++-- src/core/Spy.js | 52 ++++++++++++++++---------------- src/core/SpyStrategy.js | 4 +-- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/spec/core/integration/EnvSpec.js b/spec/core/integration/EnvSpec.js index 58f06014..d3d347fc 100644 --- a/spec/core/integration/EnvSpec.js +++ b/spec/core/integration/EnvSpec.js @@ -822,6 +822,12 @@ describe("Env integration", function() { expect(result.foo).toEqual('hello world'); }).not.toThrow(); + expect(function() { + var result = new spy('passing', 'extra', 'arguments', 'to', 'constructor'); + expect(result instanceof MyClass).toBeTruthy(); + expect(result.foo).toEqual('passing'); + }).not.toThrow(); + expect(function() { spy('hello world'); }).toThrowError('You must use the new keyword.'); @@ -840,8 +846,8 @@ describe("Env integration", function() { env.allowRespy(true); env.addReporter({ jasmineDone: done }); - env.describe('test suite', function(){ - env.it('spec 0', function(){ + env.describe('test suite', function() { + env.it('spec 0', function() { env.spyOn(foo,'bar'); var error = null; diff --git a/src/core/Spy.js b/src/core/Spy.js index 01c772fe..377b3f57 100644 --- a/src/core/Spy.js +++ b/src/core/Spy.js @@ -20,8 +20,8 @@ getJasmineRequireObj().Spy = function(j$) { getPromise ) { var numArgs = typeof originalFn === 'function' ? originalFn.length : 0, - wrapper = makeFunc(numArgs, function(context, args, isConstructor) { - return spy(context, args, isConstructor); + wrapper = makeFunc(numArgs, function(context, args, invokeNew) { + return spy(context, args, invokeNew); }), strategyDispatcher = new SpyStrategyDispatcher({ name: name, @@ -33,7 +33,7 @@ getJasmineRequireObj().Spy = function(j$) { getPromise: getPromise }), callTracker = new j$.CallTracker(), - spy = function(context, args, isConstructor) { + spy = function(context, args, invokeNew) { /** * @name Spy.callData * @property {object} object - `this` context for the invocation. @@ -47,7 +47,7 @@ getJasmineRequireObj().Spy = function(j$) { }; callTracker.track(callData); - var returnValue = strategyDispatcher.exec(this, args, isConstructor); + var returnValue = strategyDispatcher.exec(context, args, invokeNew); callData.returnValue = returnValue; return returnValue; @@ -56,44 +56,44 @@ getJasmineRequireObj().Spy = function(j$) { function makeFunc(length, fn) { switch (length) { case 1: - return function fnargs(a) { - return fn(this, arguments, this instanceof fnargs); + return function wrap1(a) { + return fn(this, arguments, this instanceof wrap1); }; case 2: - return function fnargs(a, b) { - return fn(this, arguments, this instanceof fnargs); + return function wrap2(a, b) { + return fn(this, arguments, this instanceof wrap2); }; case 3: - return function fnargs(a, b, c) { - return fn(this, arguments, this instanceof fnargs); + return function wrap3(a, b, c) { + return fn(this, arguments, this instanceof wrap3); }; case 4: - return function fnargs(a, b, c, d) { - return fn(this, arguments, this instanceof fnargs); + return function wrap4(a, b, c, d) { + return fn(this, arguments, this instanceof wrap4); }; case 5: - return function fnargs(a, b, c, d, e) { - return fn(this, arguments, this instanceof fnargs); + return function wrap5(a, b, c, d, e) { + return fn(this, arguments, this instanceof wrap5); }; case 6: - return function fnargs(a, b, c, d, e, f) { - return fn(this, arguments, this instanceof fnargs); + return function wrap6(a, b, c, d, e, f) { + return fn(this, arguments, this instanceof wrap6); }; case 7: - return function fnargs(a, b, c, d, e, f, g) { - return fn(this, arguments, this instanceof fnargs); + return function wrap7(a, b, c, d, e, f, g) { + return fn(this, arguments, this instanceof wrap7); }; case 8: - return function fnargs(a, b, c, d, e, f, g, h) { - return fn(this, arguments, this instanceof fnargs); + return function wrap8(a, b, c, d, e, f, g, h) { + return fn(this, arguments, this instanceof wrap8); }; case 9: - return function fnargs(a, b, c, d, e, f, g, h, i) { - return fn(this, arguments, this instanceof fnargs); + return function wrap9(a, b, c, d, e, f, g, h, i) { + return fn(this, arguments, this instanceof wrap9); }; default: - return function fnargs() { - return fn(this, arguments, this instanceof fnargs); + return function wrap() { + return fn(this, arguments, this instanceof wrap); }; } } @@ -150,7 +150,7 @@ getJasmineRequireObj().Spy = function(j$) { this.and = baseStrategy; - this.exec = function(spy, args, isConstructor) { + this.exec = function(spy, args, invokeNew) { var strategy = argsStrategies.get(args); if (!strategy) { @@ -167,7 +167,7 @@ getJasmineRequireObj().Spy = function(j$) { } } - return strategy.exec(spy, args, isConstructor); + return strategy.exec(spy, args, invokeNew); }; this.withArgs = function() { diff --git a/src/core/SpyStrategy.js b/src/core/SpyStrategy.js index 252de41e..43f89831 100644 --- a/src/core/SpyStrategy.js +++ b/src/core/SpyStrategy.js @@ -96,11 +96,11 @@ getJasmineRequireObj().SpyStrategy = function(j$) { * @since 2.0.0 * @function */ - SpyStrategy.prototype.exec = function(context, args, isConstructor) { + SpyStrategy.prototype.exec = function(context, args, invokeNew) { var list = [context].concat(args ? Array.prototype.slice.call(args) : []); var target = this.plan.bind.apply(this.plan, list); - if (isConstructor) { + if (invokeNew) { return new target(); } else { return target();