From 85fa148f18bf18d60d94f4ecab76285793416e04 Mon Sep 17 00:00:00 2001 From: Michal Mocny Date: Fri, 17 Jan 2014 10:51:27 -0500 Subject: [PATCH] Support running jasmine within CSP (remove eval) [fixes #503] --- src/core/base.js | 159 ++++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 78 deletions(-) diff --git a/src/core/base.js b/src/core/base.js index 9fe678cd..d5d2c6ab 100644 --- a/src/core/base.js +++ b/src/core/base.js @@ -1,98 +1,101 @@ -getJasmineRequireObj().base = function(j$) { - j$.unimplementedMethod_ = function() { - throw new Error("unimplemented method"); - }; +getJasmineRequireObj().base = (function (jasmineGlobal) { + if (typeof module !== "undefined" && module.exports) { + jasmineGlobal = global; + } - j$.MAX_PRETTY_PRINT_DEPTH = 40; - j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + return function(j$) { + j$.unimplementedMethod_ = function() { + throw new Error("unimplemented method"); + }; - j$.getGlobal = (function() { - var jasmineGlobal = eval.call(null, "this"); - return function() { + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { return jasmineGlobal; }; - })(); - j$.getEnv = function(options) { - var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); - //jasmine. singletons in here (setTimeout blah blah). - return env; - }; + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; - j$.isArray_ = function(value) { - return j$.isA_("Array", value); - }; + j$.isArray_ = function(value) { + return j$.isA_("Array", value); + }; - j$.isString_ = function(value) { - return j$.isA_("String", value); - }; + j$.isString_ = function(value) { + return j$.isA_("String", value); + }; - j$.isNumber_ = function(value) { - return j$.isA_("Number", value); - }; + j$.isNumber_ = function(value) { + return j$.isA_("Number", value); + }; - j$.isA_ = function(typeName, value) { - return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; - }; + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; - j$.isDomNode = function(obj) { - return obj.nodeType > 0; - }; + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; - j$.any = function(clazz) { - return new j$.Any(clazz); - }; + j$.any = function(clazz) { + return new j$.Any(clazz); + }; - j$.objectContaining = function(sample) { - return new j$.ObjectContaining(sample); - }; + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; - j$.createSpy = function(name, originalFn) { + j$.createSpy = function(name, originalFn) { - var spyStrategy = new j$.SpyStrategy({ - name: name, - fn: originalFn, - getSpy: function() { return spy; } - }), - callTracker = new j$.CallTracker(), - spy = function() { - callTracker.track({ - object: this, - args: Array.prototype.slice.apply(arguments) - }); - return spyStrategy.exec.apply(this, arguments); - }; + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + callTracker.track({ + object: this, + args: Array.prototype.slice.apply(arguments) + }); + return spyStrategy.exec.apply(this, arguments); + }; - for (var prop in originalFn) { - if (prop === 'and' || prop === 'calls') { - throw new Error("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon"); + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error("Jasmine spies would overwrite the 'and' and 'calls' properties on the object being spied upon"); + } + + spy[prop] = originalFn[prop]; } - spy[prop] = originalFn[prop]; - } + spy.and = spyStrategy; + spy.calls = callTracker; - spy.and = spyStrategy; - spy.calls = callTracker; + return spy; + }; - return spy; + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw "createSpyObj requires a non-empty array of method names to create spies for"; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; }; - - j$.isSpy = function(putativeSpy) { - if (!putativeSpy) { - return false; - } - return putativeSpy.and instanceof j$.SpyStrategy && - putativeSpy.calls instanceof j$.CallTracker; - }; - - j$.createSpyObj = function(baseName, methodNames) { - if (!j$.isArray_(methodNames) || methodNames.length === 0) { - throw "createSpyObj requires a non-empty array of method names to create spies for"; - } - var obj = {}; - for (var i = 0; i < methodNames.length; i++) { - obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); - } - return obj; - }; -}; +})(this);