blob: 344daeb6953936f0a20ff25c740a0a63b472f3af [file] [log] [blame]
/* 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;