Blame view
dist/scripts/angular-mocks.js
19.8 KB
4c897d181
|
1 2 3 4 5 6 7 8 9 10 11 12 |
!function(window,angular,undefined){function jsonStringToDate(string){var match;if(match=string.match(R_ISO8061_STR)){var date=new Date(0),tzHour=0,tzMin=0;return match[9]&&(tzHour=int(match[9]+match[10]),tzMin=int(match[9]+match[11])),date.setUTCFullYear(int(match[1]),int(match[2])-1,int(match[3])),date.setUTCHours(int(match[4]||0)-tzHour,int(match[5]||0)-tzMin,int(match[6]||0),int(match[7]||0)),date}return string}function int(str){return parseInt(str,10)}function padNumber(num,digits,trim){var neg="";for(0>num&&(neg="-",num=-num),num=""+num;num.length<digits;)num="0"+num;return trim&&(num=num.substr(num.length-digits)),neg+num}function createHttpBackendMock($rootScope,$delegate,$browser){function createResponse(status,data,headers){return angular.isFunction(status)?status:function(){return angular.isNumber(status)?[status,data,headers]:[200,status,data]}}function $httpBackend(method,url,data,callback,headers,timeout,withCredentials){function prettyPrint(data){return angular.isString(data)||angular.isFunction(data)||data instanceof RegExp?data:angular.toJson(data)}function wrapResponse(wrapped){function handleResponse(){var response=wrapped.response(method,url,data,headers);xhr.$$respHeaders=response[2],callback(copy(response[0]),copy(response[1]),xhr.getAllResponseHeaders())}function handleTimeout(){for(var i=0,ii=responses.length;ii>i;i++)if(responses[i]===handleResponse){responses.splice(i,1),callback(-1,undefined,"");break}}return!$browser&&timeout&&timeout.then&&timeout.then(handleTimeout),handleResponse}var xhr=new MockXhr,expectation=expectations[0],wasExpected=!1;if(expectation&&expectation.match(method,url)){if(!expectation.matchData(data))throw new Error("Expected "+expectation+" with different data EXPECTED: "+prettyPrint(expectation.data)+" GOT: "+data);if(!expectation.matchHeaders(headers))throw new Error("Expected "+expectation+" with different headers EXPECTED: "+prettyPrint(expectation.headers)+" GOT: "+prettyPrint(headers));if(expectations.shift(),expectation.response)return void responses.push(wrapResponse(expectation));wasExpected=!0}for(var definition,i=-1;definition=definitions[++i];)if(definition.match(method,url,data,headers||{})){if(definition.response)($browser?$browser.defer:responsesPush)(wrapResponse(definition));else{if(!definition.passThrough)throw new Error("No response defined !");$delegate(method,url,data,callback,headers,timeout,withCredentials)}return}throw wasExpected?new Error("No response defined !"):new Error("Unexpected request: "+method+" "+url+" "+(expectation?"Expected "+expectation:"No more request expected"))}function createShortMethods(prefix){angular.forEach(["GET","DELETE","JSONP"],function(method){$httpBackend[prefix+method]=function(url,headers){return $httpBackend[prefix](method,url,undefined,headers)}}),angular.forEach(["PUT","POST","PATCH"],function(method){$httpBackend[prefix+method]=function(url,data,headers){return $httpBackend[prefix](method,url,data,headers)}})}var definitions=[],expectations=[],responses=[],responsesPush=angular.bind(responses,responses.push),copy=angular.copy;return $httpBackend.when=function(method,url,data,headers){var definition=new MockHttpExpectation(method,url,data,headers),chain={respond:function(status,data,headers){definition.response=createResponse(status,data,headers)}};return $browser&&(chain.passThrough=function(){definition.passThrough=!0}),definitions.push(definition),chain},createShortMethods("when"),$httpBackend.expect=function(method,url,data,headers){var expectation=new MockHttpExpectation(method,url,data,headers);return expectations.push(expectation),{respond:function(status,data,headers){expectation.response=createResponse(status,data,headers)}}},createShortMethods("expect"),$httpBackend.flush=function(count){if($rootScope.$digest(),!responses.length)throw new Error("No pending request to flush !");if(angular.isDefined(count))for(;count--;){if(!responses.length)throw new Error("No more pending request to flush !");responses.shift()()}else for(;responses.length;)responses.shift()();$httpBackend.verifyNoOutstandingExpectation()},$httpBackend.verifyNoOutstandingExpectation=function(){if($rootScope.$digest(),expectations.length)throw new Error("Unsatisfied requests: "+expectations.join(", "))},$httpBackend.verifyNoOutstandingRequest=function(){if(responses.length)throw new Error("Unflushed requests: "+responses.length)},$httpBackend.resetExpectations=function(){expectations.length=0,responses.length=0},$httpBackend}function MockHttpExpectation(method,url,data,headers){this.data=data,this.headers=headers,this.match=function(m,u,d,h){return method!=m?!1:this.matchUrl(u)?angular.isDefined(d)&&!this.matchData(d)?!1:angular.isDefined(h)&&!this.matchHeaders(h)?!1:!0:!1},this.matchUrl=function(u){return url?angular.isFunction(url.test)?url.test(u):url==u:!0},this.matchHeaders=function(h){return angular.isUndefined(headers)?!0:angular.isFunction(headers)?headers(h):angular.equals(headers,h)},this.matchData=function(d){return angular.isUndefined(data)?!0:data&&angular.isFunction(data.test)?data.test(d):data&&angular.isFunction(data)?data(d):data&&!angular.isString(data)?angular.equals(data,angular.fromJson(d)):data==d},this.toString=function(){return method+" "+url}}function MockXhr(){MockXhr.$$lastInstance=this,this.open=function(method,url,async){this.$$method=method,this.$$url=url,this.$$async=async,this.$$reqHeaders={},this.$$respHeaders={}},this.send=function(data){this.$$data=data},this.setRequestHeader=function(key,value){this.$$reqHeaders[key]=value},this.getResponseHeader=function(name){var header=this.$$respHeaders[name];return header?header:(name=angular.lowercase(name),(header=this.$$respHeaders[name])?header:(header=undefined,angular.forEach(this.$$respHeaders,function(headerVal,headerName){header||angular.lowercase(headerName)!=name||(header=headerVal)}),header))},this.getAllResponseHeaders=function(){var lines=[];return angular.forEach(this.$$respHeaders,function(value,key){lines.push(key+": "+value)}),lines.join(" ")},this.abort=angular.noop}angular.mock={},angular.mock.$BrowserProvider=function(){this.$get=function(){return new angular.mock.$Browser}},angular.mock.$Browser=function(){var self=this;this.isMock=!0,self.$$url="http://server/",self.$$lastUrl=self.$$url,self.pollFns=[],self.$$completeOutstandingRequest=angular.noop,self.$$incOutstandingRequestCount=angular.noop,self.onUrlChange=function(listener){return self.pollFns.push(function(){self.$$lastUrl!=self.$$url&&(self.$$lastUrl=self.$$url,listener(self.$$url))}),listener},self.cookieHash={},self.lastCookieHash={},self.deferredFns=[],self.deferredNextId=0,self.defer=function(fn,delay){return delay=delay||0,self.deferredFns.push({time:self.defer.now+delay,fn:fn,id:self.deferredNextId}),self.deferredFns.sort(function(a,b){return a.time-b.time}),self.deferredNextId++},self.defer.now=0,self.defer.cancel=function(deferId){var fnIndex;return angular.forEach(self.deferredFns,function(fn,index){fn.id===deferId&&(fnIndex=index)}),fnIndex!==undefined?(self.deferredFns.splice(fnIndex,1),!0):!1},self.defer.flush=function(delay){if(angular.isDefined(delay))self.defer.now+=delay;else{if(!self.deferredFns.length)throw new Error("No deferred tasks to be flushed");self.defer.now=self.deferredFns[self.deferredFns.length-1].time}for(;self.deferredFns.length&&self.deferredFns[0].time<=self.defer.now;)self.deferredFns.shift().fn()},self.$$baseHref="",self.baseHref=function(){return this.$$baseHref}},angular.mock.$Browser.prototype={poll:function(){angular.forEach(this.pollFns,function(pollFn){pollFn()})},addPollFn:function(pollFn){return this.pollFns.push(pollFn),pollFn},url:function(url,replace){return url?(this.$$url=url,this):this.$$url},cookies:function(name,value){return name?void(angular.isUndefined(value)?delete this.cookieHash[name]:angular.isString(value)&&value.length<=4096&&(this.cookieHash[name]=value)):(angular.equals(this.cookieHash,this.lastCookieHash)||(this.lastCookieHash=angular.copy(this.cookieHash),this.cookieHash=angular.copy(this.cookieHash)),this.cookieHash)},notifyWhenNoOutstandingRequests:function(fn){fn()}},angular.mock.$ExceptionHandlerProvider=function(){var handler;this.mode=function(mode){switch(mode){case"rethrow":handler=function(e){throw e};break;case"log":var errors=[];handler=function(e){1==arguments.length?errors.push(e):errors.push([].slice.call(arguments,0))},handler.errors=errors;break;default:throw new Error("Unknown mode '"+mode+"', only 'log'/'rethrow' modes are allowed!")}},this.$get=function(){return handler},this.mode("rethrow")},angular.mock.$LogProvider=function(){function concat(array1,array2,index){return array1.concat(Array.prototype.slice.call(array2,index))}var debug=!0;this.debugEnabled=function(flag){return angular.isDefined(flag)?(debug=flag,this):debug},this.$get=function(){var $log={log:function(){$log.log.logs.push(concat([],arguments,0))},warn:function(){$log.warn.logs.push(concat([],arguments,0))},info:function(){$log.info.logs.push(concat([],arguments,0))},error:function(){$log.error.logs.push(concat([],arguments,0))},debug:function(){debug&&$log.debug.logs.push(concat([],arguments,0))}};return $log.reset=function(){$log.log.logs=[],$log.info.logs=[],$log.warn.logs=[],$log.error.logs=[],$log.debug.logs=[]},$log.assertEmpty=function(){var errors=[];if(angular.forEach(["error","warn","info","log","debug"],function(logLevel){angular.forEach($log[logLevel].logs,function(log){angular.forEach(log,function(logItem){errors.push("MOCK $log ("+logLevel+"): "+String(logItem)+" "+(logItem.stack||""))})})}),errors.length)throw errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or an expected log message was not checked and removed:"),errors.push(""),new Error(errors.join(" --------- "))},$log.reset(),$log}},angular.mock.$IntervalProvider=function(){this.$get=["$rootScope","$q",function($rootScope,$q){var repeatFns=[],nextRepeatId=0,now=0,$interval=function(fn,delay,count,invokeApply){function tick(){if(deferred.notify(iteration++),count>0&&iteration>=count){var fnIndex;deferred.resolve(iteration),angular.forEach(repeatFns,function(fn,index){fn.id===promise.$$intervalId&&(fnIndex=index)}),fnIndex!==undefined&&repeatFns.splice(fnIndex,1)}skipApply||$rootScope.$apply()}var deferred=$q.defer(),promise=deferred.promise,iteration=0,skipApply=angular.isDefined(invokeApply)&&!invokeApply;return count=angular.isDefined(count)?count:0,promise.then(null,null,fn),promise.$$intervalId=nextRepeatId,repeatFns.push({nextTime:now+delay,delay:delay,fn:tick,id:nextRepeatId,deferred:deferred}),repeatFns.sort(function(a,b){return a.nextTime-b.nextTime}),nextRepeatId++,promise};return $interval.cancel=function(promise){var fnIndex;return angular.forEach(repeatFns,function(fn,index){fn.id===promise.$$intervalId&&(fnIndex=index)}),fnIndex!==undefined?(repeatFns[fnIndex].deferred.reject("canceled"),repeatFns.splice(fnIndex,1),!0):!1},$interval.flush=function(millis){for(now+=millis;repeatFns.length&&repeatFns[0].nextTime<=now;){var task=repeatFns[0];task.fn(),task.nextTime+=task.delay,repeatFns.sort(function(a,b){return a.nextTime-b.nextTime})}return millis},$interval}]};var R_ISO8061_STR=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;angular.mock.TzDate=function(offset,timestamp){var self=new Date(0);if(angular.isString(timestamp)){var tsStr=timestamp;if(self.origDate=jsonStringToDate(timestamp),timestamp=self.origDate.getTime(),isNaN(timestamp))throw{name:"Illegal Argument",message:"Arg '"+tsStr+"' passed into TzDate constructor is not a valid date string"}}else self.origDate=new Date(timestamp);var localOffset=new Date(timestamp).getTimezoneOffset();self.offsetDiff=60*localOffset*1e3-1e3*offset*60*60,self.date=new Date(timestamp+self.offsetDiff),self.getTime=function(){return self.date.getTime()-self.offsetDiff},self.toLocaleDateString=function(){return self.date.toLocaleDateString()},self.getFullYear=function(){return self.date.getFullYear()},self.getMonth=function(){return self.date.getMonth()},self.getDate=function(){return self.date.getDate()},self.getHours=function(){return self.date.getHours()},self.getMinutes=function(){return self.date.getMinutes()},self.getSeconds=function(){return self.date.getSeconds()},self.getMilliseconds=function(){return self.date.getMilliseconds()},self.getTimezoneOffset=function(){return 60*offset},self.getUTCFullYear=function(){return self.origDate.getUTCFullYear()},self.getUTCMonth=function(){return self.origDate.getUTCMonth()},self.getUTCDate=function(){return self.origDate.getUTCDate()},self.getUTCHours=function(){return self.origDate.getUTCHours()},self.getUTCMinutes=function(){return self.origDate.getUTCMinutes()},self.getUTCSeconds=function(){return self.origDate.getUTCSeconds()},self.getUTCMilliseconds=function(){return self.origDate.getUTCMilliseconds()},self.getDay=function(){return self.date.getDay()},self.toISOString&&(self.toISOString=function(){return padNumber(self.origDate.getUTCFullYear(),4)+"-"+padNumber(self.origDate.getUTCMonth()+1,2)+"-"+padNumber(self.origDate.getUTCDate(),2)+"T"+padNumber(self.origDate.getUTCHours(),2)+":"+padNumber(self.origDate.getUTCMinutes(),2)+":"+padNumber(self.origDate.getUTCSeconds(),2)+"."+padNumber(self.origDate.getUTCMilliseconds(),3)+"Z"});var unimplementedMethods=["getUTCDay","getYear","setDate","setFullYear","setHours","setMilliseconds","setMinutes","setMonth","setSeconds","setTime","setUTCDate","setUTCFullYear","setUTCHours","setUTCMilliseconds","setUTCMinutes","setUTCMonth","setUTCSeconds","setYear","toDateString","toGMTString","toJSON","toLocaleFormat","toLocaleString","toLocaleTimeString","toSource","toString","toTimeString","toUTCString","valueOf"];return angular.forEach(unimplementedMethods,function(methodName){self[methodName]=function(){throw new Error("Method '"+methodName+"' is not implemented in the TzDate mock")}}),self},angular.mock.TzDate.prototype=Date.prototype;var animateLoaded;try{angular.module("ngAnimate"),animateLoaded=!0}catch(e){}if(animateLoaded&&angular.module("ngAnimate").config(["$provide",function($provide){var reflowQueue=[];$provide.value("$$animateReflow",function(fn){return reflowQueue.push(fn),angular.noop}),$provide.decorator("$animate",function($delegate){return $delegate.triggerReflow=function(){if(0===reflowQueue.length)throw new Error("No animation reflows present");angular.forEach(reflowQueue,function(fn){fn()}),reflowQueue=[]},$delegate})}]),angular.mock.animate=angular.module("mock.animate",["ng"]).config(["$provide",function($provide){$provide.decorator("$animate",function($delegate){var animate={queue:[],enabled:$delegate.enabled,flushNext:function(name){var tick=animate.queue.shift();if(!tick)throw new Error("No animation to be flushed");if(tick.method!==name)throw new Error('The next animation is not "'+name+'", but is "'+tick.method+'"');return tick.fn(),tick}};return angular.forEach(["enter","leave","move","addClass","removeClass"],function(method){animate[method]=function(){var params=arguments;animate.queue.push({method:method,params:params,element:angular.isElement(params[0])&¶ms[0],parent:angular.isElement(params[1])&¶ms[1],after:angular.isElement(params[2])&¶ms[2],fn:function(){$delegate[method].apply($delegate,params)}})}}),animate})}]),angular.mock.dump=function(object){function serialize(object){var out;return angular.isElement(object)?(object=angular.element(object),out=angular.element("<div></div>"),angular.forEach(object,function(element){out.append(angular.element(element).clone())}),out=out.html()):angular.isArray(object)?(out=[],angular.forEach(object,function(o){out.push(serialize(o))}),out="[ "+out.join(", ")+" ]"):out=angular.isObject(object)?angular.isFunction(object.$eval)&&angular.isFunction(object.$apply)?serializeScope(object):object instanceof Error?object.stack||""+object.name+": "+object.message:angular.toJson(object,!0):String(object),out}function serializeScope(scope,offset){offset=offset||" ";var log=[offset+"Scope("+scope.$id+"): {"];for(var key in scope)Object.prototype.hasOwnProperty.call(scope,key)&&!key.match(/^(\$|this)/)&&log.push(" "+key+": "+angular.toJson(scope[key]));for(var child=scope.$$childHead;child;)log.push(serializeScope(child,offset+" ")),child=child.$$nextSibling;return log.push("}"),log.join(" "+offset)}return serialize(object)},angular.mock.$HttpBackendProvider=function(){this.$get=["$rootScope",createHttpBackendMock]},angular.mock.$TimeoutDecorator=function($delegate,$browser){function formatPendingTasksAsString(tasks){var result=[];return angular.forEach(tasks,function(task){result.push("{id: "+task.id+", time: "+task.time+"}")}),result.join(", ")}return $delegate.flush=function(delay){$browser.defer.flush(delay)},$delegate.verifyNoPendingTasks=function(){if($browser.deferredFns.length)throw new Error("Deferred tasks to flush ("+$browser.deferredFns.length+"): "+formatPendingTasksAsString($browser.deferredFns))},$delegate},angular.mock.$RootElementProvider=function(){this.$get=function(){return angular.element("<div ng-app></div>")}},angular.module("ngMock",["ng"]).provider({$browser:angular.mock.$BrowserProvider,$exceptionHandler:angular.mock.$ExceptionHandlerProvider,$log:angular.mock.$LogProvider,$interval:angular.mock.$IntervalProvider,$httpBackend:angular.mock.$HttpBackendProvider,$rootElement:angular.mock.$RootElementProvider}).config(["$provide",function($provide){$provide.decorator("$timeout",angular.mock.$TimeoutDecorator)}]),angular.module("ngMockE2E",["ng"]).config(["$provide",function($provide){$provide.decorator("$httpBackend",angular.mock.e2e.$httpBackendDecorator)}]),angular.mock.e2e={},angular.mock.e2e.$httpBackendDecorator=["$rootScope","$delegate","$browser",createHttpBackendMock],angular.mock.clearDataCache=function(){var key,cache=angular.element.cache;for(key in cache)if(Object.prototype.hasOwnProperty.call(cache,key)){var handle=cache[key].handle;handle&&angular.element(handle.elem).off(),delete cache[key]}},window.jasmine||window.mocha){var currentSpec=null,isSpecRunning=function(){return!!currentSpec};beforeEach(function(){currentSpec=this}),afterEach(function(){var injector=currentSpec.$injector;currentSpec.$injector=null,currentSpec.$modules=null,currentSpec=null,injector&&(injector.get("$rootElement").off(),injector.get("$browser").pollFns.length=0),angular.mock.clearDataCache(),angular.forEach(angular.element.fragments,function(val,key){delete angular.element.fragments[key]}),MockXhr.$$lastInstance=null,angular.forEach(angular.callbacks,function(val,key){delete angular.callbacks[key]}),angular.callbacks.counter=0}),window.module=angular.mock.module=function(){function workFn(){if(currentSpec.$injector)throw new Error("Injector already created, can not register a module!");var modules=currentSpec.$modules||(currentSpec.$modules=[]);angular.forEach(moduleFns,function(module){angular.isObject(module)&&!angular.isArray(module)?modules.push(function($provide){angular.forEach(module,function(value,key){$provide.value(key,value)})}):modules.push(module)})}var moduleFns=Array.prototype.slice.call(arguments,0);return isSpecRunning()?workFn():workFn};var ErrorAddingDeclarationLocationStack=function(e,errorForStack){this.message=e.message,this.name=e.name,e.line&&(this.line=e.line),e.sourceId&&(this.sourceId=e.sourceId),e.stack&&errorForStack&&(this.stack=e.stack+" "+errorForStack.stack),e.stackArray&&(this.stackArray=e.stackArray)};ErrorAddingDeclarationLocationStack.prototype.toString=Error.prototype.toString,window.inject=angular.mock.inject=function(){function workFn(){var modules=currentSpec.$modules||[];modules.unshift("ngMock"),modules.unshift("ng");var injector=currentSpec.$injector;injector||(injector=currentSpec.$injector=angular.injector(modules));for(var i=0,ii=blockFns.length;ii>i;i++)try{injector.invoke(blockFns[i]||angular.noop,this)}catch(e){if(e.stack&&errorForStack)throw new ErrorAddingDeclarationLocationStack(e,errorForStack);throw e}finally{errorForStack=null}}var blockFns=Array.prototype.slice.call(arguments,0),errorForStack=new Error("Declaration Location");return isSpecRunning()?workFn():workFn}}}(window,window.angular); |