@@ -97,6 +97,192 @@ define([], function() {
9797 this . _responses = { } ;
9898 } ;
9999
100+ } ,
101+
102+ undefineMocks ( env ) {
103+ delete global . Blob ;
104+ delete global . FileReader ;
105+ delete global . XMLHttpRequest ;
106+ delete global . fetch ;
107+ delete global . getMockRequestMethod ;
108+ delete global . getMockRequestUrl ;
109+ delete global . getMockRequestHeader ;
110+ delete global . getMockRequestBody ;
111+ delete global . mockRequestSuccess ;
112+ delete global . mockRequestFail ;
113+ delete global . addMockRequestCallback ;
114+ delete env . blob ;
115+ delete env . fileReaderResult ;
116+ } ,
117+
118+ defineXMLHttpRequestMock ( env ) {
119+
120+ var requestCallbacks = [ ] ;
121+ global . XMLHttpRequest = function ( ) {
122+ XMLHttpRequest . instances . push ( this ) ;
123+ this . _headers = { } ;
124+ this . _responseHeaders = { } ;
125+ } ;
126+ XMLHttpRequest . instances = [ ] ;
127+ XMLHttpRequest . prototype = {
128+ open : function ( ) {
129+ this . _open = Array . prototype . slice . call ( arguments ) ;
130+ } ,
131+ send : function ( ) {
132+ this . _send = Array . prototype . slice . call ( arguments ) ;
133+
134+ if ( requestCallbacks . length )
135+ requestCallbacks . shift ( ) ( this ) ;
136+ } ,
137+ setRequestHeader : function ( key , value ) {
138+ this . _headers [ key ] = value ;
139+ } ,
140+ getResponseHeader : function ( key ) {
141+ return this . _responseHeaders [ key ] || null ;
142+ }
143+ } ;
144+ [ 'load' , 'abort' , 'error' ] . forEach ( function ( cb ) {
145+ Object . defineProperty ( XMLHttpRequest . prototype , 'on' + cb , {
146+ configurable : true ,
147+ set : function ( f ) {
148+ this [ '_on' + cb ] = f ;
149+ }
150+ } ) ;
151+ } ) ;
152+
153+ global . addMockRequestCallback = function ( callback ) {
154+ requestCallbacks . push ( callback ) ;
155+ } ;
156+
157+
158+ global . getMockRequestMethod = function ( ) {
159+ var request = XMLHttpRequest . instances [ 0 ] ;
160+ return request . _open [ 0 ] ;
161+ } ;
162+
163+ global . getMockRequestUrl = function ( ) {
164+ var request = XMLHttpRequest . instances [ 0 ] ;
165+ return request . _open [ 1 ] ;
166+ } ;
167+
168+ global . getMockRequestHeader = function ( headerName ) {
169+ var req = XMLHttpRequest . instances [ 0 ] ;
170+ return req . _headers [ headerName ] ;
171+ } ;
172+
173+ global . getMockRequestBody = function ( ) {
174+ var request = XMLHttpRequest . instances [ 0 ] ;
175+ return request . _send [ 0 ] ;
176+ } ;
177+
178+ global . mockRequestSuccess = function ( param ) {
179+ var req = XMLHttpRequest . instances . shift ( ) ;
180+ req . _responseHeaders = param . responseHeaders || { } ;
181+ req . status = param . status ;
182+ req . response = param . arrayBuffer || param . responseText ;
183+ req . responseText = param . responseText ;
184+ req . _onload ( ) ;
185+ } ;
186+
187+ global . mockRequestFail = function ( errMsg ) {
188+ var req = XMLHttpRequest . instances . shift ( ) ;
189+ req . _onerror ( errMsg ) ;
190+ } ;
191+ } ,
192+
193+ defineFetchMock ( env ) {
194+
195+ var fetchesData = [ ] ;
196+ var requestCallbacks = [ ] ;
197+
198+ global . fetch = function ( url , init ) {
199+ init = init || { } ;
200+ promise = new Promise ( function ( resolve , reject ) {
201+ fetchesData . push ( {
202+ url : url ,
203+ method : init . method || 'GET' ,
204+ requestHeaders : init . headers || { } ,
205+ requestBody : init . body ,
206+ resolve : resolve ,
207+ reject : reject } ) ;
208+ } ) ;
209+
210+ if ( requestCallbacks . length )
211+ requestCallbacks . shift ( ) ( this ) ;
212+ return promise ;
213+
214+ } ;
215+
216+ global . addMockRequestCallback = function ( callback ) {
217+ requestCallbacks . push ( callback ) ;
218+ } ;
219+
220+ global . getMockRequestMethod = function ( ) {
221+ var fetchData = fetchesData [ 0 ] ;
222+ return fetchData . method ;
223+ } ;
224+
225+ global . getMockRequestUrl = function ( ) {
226+ var fetchData = fetchesData [ 0 ] ;
227+ return fetchData . url ;
228+ } ;
229+
230+ global . getMockRequestHeader = function ( headerName ) {
231+ var fetchData = fetchesData [ 0 ] ;
232+ return fetchData . requestHeaders [ headerName ] ;
233+ } ;
234+
235+ global . getMockRequestBody = function ( ) {
236+ var fetchData = fetchesData [ 0 ] ;
237+ return fetchData . requestBody ;
238+ } ;
239+
240+ global . mockRequestSuccess = function ( param ) {
241+ var fetchData = fetchesData . shift ( ) ;
242+
243+ var responseHeaders = { // mock Headers obj
244+ _headers : param . responseHeaders || { } , // POJSO
245+ forEach : function ( callback , thisArg ) {
246+ var thisObj = thisArg || responseHeaders ;
247+ for ( headerName in responseHeaders . _headers ) {
248+ callback . call ( thisObj , responseHeaders . _headers [ headerName ] , headerName , responseHeaders ) ;
249+ }
250+ }
251+ } ;
252+ var response = { // mock Response obj
253+ headers : responseHeaders ,
254+ ok : param . status >= 200 && param . status < 300 ,
255+ redirected : false ,
256+ status : param . status ,
257+ statusText : param . statusText || '' ,
258+ type : param . corsResponseType || 'basic' ,
259+ url : fetchData . url ,
260+ useFinalURL : true ,
261+ body : function ( ) { // getter for ReadableStream
262+ throw new Error ( "not implemented in mock" ) ;
263+ } ,
264+ bodyUsed : false ,
265+ arrayBuffer : function ( ) {
266+ return Promise . resolve ( param . arrayBuffer ) ;
267+ } ,
268+ blob : function ( ) {
269+ throw new Error ( "not implemented in mock" ) ;
270+ } ,
271+ text : function ( ) {
272+ return Promise . resolve ( param . responseText ) ;
273+ } ,
274+ json : function ( ) {
275+ throw new Error ( "not implemented in mock" ) ;
276+ }
277+ } ;
278+
279+ fetchData . resolve ( response ) ;
280+ } ;
281+
282+ global . mockRequestFail = function ( errMsg ) {
283+ var fetchData = fetchesData . shift ( ) ;
284+ fetchData . reject ( errMsg ) ;
285+ } ;
100286 }
101287 } ;
102288} ) ;
0 commit comments