/* Setup file run before spec files to setup the context (and RequireJS * specifically) to execute the spec file. * * Defined by caller: * - Jasmine predefines * - require (Node require) * - __dirname, __filename * - baseUrl (Relative path to the directory containing this file) * - csPath (Path to require-cs module) * * See requirejs-runner source for full invocation details. */ var define, requirejsOrig = require('requirejs'), ostring = Object.prototype.toString, path = require('path'), isArray = function(it){ return ostring.call(it) === '[object Array]'; }, isFunction = function(it){ return ostring.call(it) === '[object Function]'; }, requirejs = function(deps, callback){ var retVal; if(!isArray(deps) && typeof deps !== 'string'){ if(isArray(callback)){ retVal = requirejsOrig(deps, callback, arguments[2]); } else { retVal = requirejsOrig(deps, [], callback); } } else { retVal = requirejsOrig(deps, callback); } return retVal; }; requirejsOrig.config({ baseUrl: baseUrl, nodeRequire: require, paths: { cs: csPath } }); for(var key in requirejsOrig) { requirejs[key] = requirejsOrig[key]; } requirejs.config = function(config){ var alteredConfig = {}; for(var key in config) { alteredConfig[key] = config[key]; } if(alteredConfig.baseUrl){ var base = baseUrl.replace(/\\/g, '/'), splitUrl = alteredConfig.baseUrl.replace(/\\/g, '/').split('/'), index = 0; for(; index < splitUrl.length; index++){ if(splitUrl[index] === '..'){ base = path.dirname(base); } else { base += '/' + splitUrl[index]; } } alteredConfig.baseUrl = base; } return requirejsOrig.config(alteredConfig); }; require = requirejs; define = requirejs.define;