define(function(){vara=Object.prototype.toString,b=function(b){return"[object Array]"===a.call(b)},c=function(a,b){for(varc=0,d=a.length;d>c;c++)if(a[c]===b)returnc;return-1},d=function(a,b,c){vard={};if(null!==a)if(Array.prototype.forEach&&a.forEach===Array.prototype.forEach)a.forEach(b,c);elseif(a.length===+a.length){for(vare=0,f=a.length;f>e;e++)if(b.call(c,a[e],e,a)===d)return}elsefor(vargina)if(a.hasOwnProperty(g)&&b.call(c,a[g],g,a)===d)return},e=function(a){returnrequirejs.s.contexts[a]},f=function(a,b){returna.undef?a.undef(b):a.require.undef(b)},g=0,h=function(){varb=g++;return"context"+b},i=function(){this.mocks={},this._store=[],this.requiredCallbacks=[],this.configure.apply(this,arguments)};returni.prototype.onRequired=function(a){this.requiredCallbacks.push(a)},i.prototype.configure=function(a){varb={};if(this.id=h(),"undefined"==typeofa&&(a="_"),a=e(a),!a)thrownewError("This context has not been created!");d(a.config,function(a,c){"deps"!==c&&(b[c]=a)}),b.context=this.id,this.load=requirejs.config(b)},i.prototype.mock=function(a,b){return"object"==typeofa?d(a,function(a,b){this.mock(b,a)},this):this.mocks[a]=b,this},i.prototype.store=function(a){returna&&"string"==typeofa?this._store.push(a):a&&b(a)&&d(a,function(a){this.store(a)},this),this},i.prototype.require=function(a,b,f){varj,g="mocks",h=this;j=c(a,g),-1!==j&&a.splice(j,1),d(this.mocks,function(a,b){define(b,a)}),this.load(a,function(){varc={},f=Array.prototype.slice.call(arguments);-1!==j&&(d(h._store,function(a){c[a]=e(h.id).defined[a]}),f.splice(j,0,{mocks:h.mocks,store:c})),b.apply(null,f),d(h.requiredCallbacks,function(b){b.call(null,a,f)})},f)},i.prototype.clean=function(a){returna&&"string"==typeofa?(f(e(this.id),a),deletethis.mocks[a]):a&&b(a)?d(a,function(a){this.clean(a)},this):d(this.mocks,function(a,b){this.clean(b)},this),this},i.prototype.remove=function(){varb=e(this.id);b&&(d(e(this.id).defined,function(a,c){f(b,c)},this),deleterequirejs.s.contexts[this.id])},i.prototype.run=function(a,b){varc=this,d=function(d){c.require(a,function(){b.apply(null,arguments),d()})};returnd.toString=function(){returnb.toString()},d},i.Helpers={},i.Helpers.returns=function(a){returnfunction(){returna}},i.Helpers.constructs=function(a){returnfunction(){returnfunction(){returna}}},i});