Update the license headers throughout the repository to reference Google LLC rather than Google Inc, for the required license headers. PR Close #37205
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google LLC All Rights Reserved.
 | 
						|
 *
 | 
						|
 * Use of this source code is governed by an MIT-style license that can be
 | 
						|
 * found in the LICENSE file at https://angular.io/license
 | 
						|
 */
 | 
						|
 | 
						|
import {HttpHeaders} from '@angular/common/http/src/headers';
 | 
						|
import {XhrFactory} from '@angular/common/http/src/xhr';
 | 
						|
 | 
						|
export class MockXhrFactory implements XhrFactory {
 | 
						|
  // TODO(issue/24571): remove '!'.
 | 
						|
  mock!: MockXMLHttpRequest;
 | 
						|
 | 
						|
  build(): XMLHttpRequest {
 | 
						|
    return (this.mock = new MockXMLHttpRequest()) as any;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export class MockXMLHttpRequestUpload {
 | 
						|
  constructor(private mock: MockXMLHttpRequest) {}
 | 
						|
 | 
						|
  addEventListener(event: 'progress', handler: Function) {
 | 
						|
    this.mock.addEventListener('uploadProgress', handler);
 | 
						|
  }
 | 
						|
 | 
						|
  removeEventListener(event: 'progress', handler: Function) {
 | 
						|
    this.mock.removeEventListener('uploadProgress');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export class MockXMLHttpRequest {
 | 
						|
  // Set by method calls.
 | 
						|
  body: any;
 | 
						|
  // TODO(issue/24571): remove '!'.
 | 
						|
  method!: string;
 | 
						|
  // TODO(issue/24571): remove '!'.
 | 
						|
  url!: string;
 | 
						|
  mockHeaders: {[key: string]: string} = {};
 | 
						|
  mockAborted: boolean = false;
 | 
						|
 | 
						|
  // Directly settable interface.
 | 
						|
  withCredentials: boolean = false;
 | 
						|
  responseType: string = 'text';
 | 
						|
 | 
						|
  // Mocked response interface.
 | 
						|
  response: any|undefined = undefined;
 | 
						|
  responseText: string|undefined = undefined;
 | 
						|
  responseURL: string|null = null;
 | 
						|
  status: number = 0;
 | 
						|
  statusText: string = '';
 | 
						|
  mockResponseHeaders: string = '';
 | 
						|
 | 
						|
  listeners: {
 | 
						|
    error?: (event: ErrorEvent) => void,
 | 
						|
    load?: () => void,
 | 
						|
    progress?: (event: ProgressEvent) => void,
 | 
						|
    uploadProgress?: (event: ProgressEvent) => void,
 | 
						|
  } = {};
 | 
						|
 | 
						|
  upload = new MockXMLHttpRequestUpload(this);
 | 
						|
 | 
						|
  open(method: string, url: string): void {
 | 
						|
    this.method = method;
 | 
						|
    this.url = url;
 | 
						|
  }
 | 
						|
 | 
						|
  send(body: any): void {
 | 
						|
    this.body = body;
 | 
						|
  }
 | 
						|
 | 
						|
  addEventListener(event: 'error'|'load'|'progress'|'uploadProgress', handler: Function): void {
 | 
						|
    this.listeners[event] = handler as any;
 | 
						|
  }
 | 
						|
 | 
						|
  removeEventListener(event: 'error'|'load'|'progress'|'uploadProgress'): void {
 | 
						|
    delete this.listeners[event];
 | 
						|
  }
 | 
						|
 | 
						|
  setRequestHeader(name: string, value: string): void {
 | 
						|
    this.mockHeaders[name] = value;
 | 
						|
  }
 | 
						|
 | 
						|
  getAllResponseHeaders(): string {
 | 
						|
    return this.mockResponseHeaders;
 | 
						|
  }
 | 
						|
 | 
						|
  getResponseHeader(header: string): string|null {
 | 
						|
    return new HttpHeaders(this.mockResponseHeaders).get(header);
 | 
						|
  }
 | 
						|
 | 
						|
  mockFlush(status: number, statusText: string, body?: string) {
 | 
						|
    if (typeof body === 'string') {
 | 
						|
      this.responseText = body;
 | 
						|
    } else {
 | 
						|
      this.response = body;
 | 
						|
    }
 | 
						|
    this.status = status;
 | 
						|
    this.statusText = statusText;
 | 
						|
    this.mockLoadEvent();
 | 
						|
  }
 | 
						|
 | 
						|
  mockDownloadProgressEvent(loaded: number, total?: number): void {
 | 
						|
    if (this.listeners.progress) {
 | 
						|
      this.listeners.progress({lengthComputable: total !== undefined, loaded, total} as any);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  mockUploadProgressEvent(loaded: number, total?: number) {
 | 
						|
    if (this.listeners.uploadProgress) {
 | 
						|
      this.listeners.uploadProgress({
 | 
						|
        lengthComputable: total !== undefined,
 | 
						|
        loaded,
 | 
						|
        total,
 | 
						|
      } as any);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  mockLoadEvent(): void {
 | 
						|
    if (this.listeners.load) {
 | 
						|
      this.listeners.load();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  mockErrorEvent(error: any): void {
 | 
						|
    if (this.listeners.error) {
 | 
						|
      this.listeners.error(error);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  abort() {
 | 
						|
    this.mockAborted = true;
 | 
						|
  }
 | 
						|
}
 |