106 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google Inc. 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 {ifEnvSupports} from '../test-util';
							 | 
						||
| 
								 | 
							
								declare const global: any;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('FileReader', ifEnvSupports('FileReader', function() {
							 | 
						||
| 
								 | 
							
								           let fileReader: FileReader;
							 | 
						||
| 
								 | 
							
								           let blob: Blob;
							 | 
						||
| 
								 | 
							
								           const data = 'Hello, World!';
							 | 
						||
| 
								 | 
							
								           const testZone = Zone.current.fork({name: 'TestZone'});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								           // Android 4.3's native browser doesn't implement add/RemoveEventListener for FileReader
							 | 
						||
| 
								 | 
							
								           function supportsEventTargetFns() {
							 | 
						||
| 
								 | 
							
								             return FileReader.prototype.addEventListener &&
							 | 
						||
| 
								 | 
							
								                 FileReader.prototype.removeEventListener;
							 | 
						||
| 
								 | 
							
								           }
							 | 
						||
| 
								 | 
							
								           (<any>supportsEventTargetFns).message =
							 | 
						||
| 
								 | 
							
								               'FileReader#addEventListener and FileReader#removeEventListener';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								           beforeEach(function() {
							 | 
						||
| 
								 | 
							
								             fileReader = new FileReader();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								             try {
							 | 
						||
| 
								 | 
							
								               blob = new Blob([data]);
							 | 
						||
| 
								 | 
							
								             } catch (e) {
							 | 
						||
| 
								 | 
							
								               // For hosts that don't support the Blob ctor (e.g. Android 4.3's native browser)
							 | 
						||
| 
								 | 
							
								               const blobBuilder = new global['WebKitBlobBuilder']();
							 | 
						||
| 
								 | 
							
								               blobBuilder.append(data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								               blob = blobBuilder.getBlob();
							 | 
						||
| 
								 | 
							
								             }
							 | 
						||
| 
								 | 
							
								           });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								           describe('EventTarget methods', ifEnvSupports(supportsEventTargetFns, function() {
							 | 
						||
| 
								 | 
							
								                      it('should bind addEventListener listeners', function(done) {
							 | 
						||
| 
								 | 
							
								                        testZone.run(function() {
							 | 
						||
| 
								 | 
							
								                          fileReader.addEventListener('load', function() {
							 | 
						||
| 
								 | 
							
								                            expect(Zone.current).toBe(testZone);
							 | 
						||
| 
								 | 
							
								                            expect(fileReader.result).toEqual(data);
							 | 
						||
| 
								 | 
							
								                            done();
							 | 
						||
| 
								 | 
							
								                          });
							 | 
						||
| 
								 | 
							
								                        });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        fileReader.readAsText(blob);
							 | 
						||
| 
								 | 
							
								                      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                      it('should remove listeners via removeEventListener', function(done) {
							 | 
						||
| 
								 | 
							
								                        const listenerSpy = jasmine.createSpy('listener');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        testZone.run(function() {
							 | 
						||
| 
								 | 
							
								                          fileReader.addEventListener('loadstart', listenerSpy);
							 | 
						||
| 
								 | 
							
								                          fileReader.addEventListener('loadend', function() {
							 | 
						||
| 
								 | 
							
								                            expect(listenerSpy).not.toHaveBeenCalled();
							 | 
						||
| 
								 | 
							
								                            done();
							 | 
						||
| 
								 | 
							
								                          });
							 | 
						||
| 
								 | 
							
								                        });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                        fileReader.removeEventListener('loadstart', listenerSpy);
							 | 
						||
| 
								 | 
							
								                        fileReader.readAsText(blob);
							 | 
						||
| 
								 | 
							
								                      });
							 | 
						||
| 
								 | 
							
								                    }));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								           it('should bind onEventType listeners', function(done) {
							 | 
						||
| 
								 | 
							
								             let listenersCalled = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								             testZone.run(function() {
							 | 
						||
| 
								 | 
							
								               fileReader.onloadstart = function() {
							 | 
						||
| 
								 | 
							
								                 listenersCalled++;
							 | 
						||
| 
								 | 
							
								                 expect(Zone.current).toBe(testZone);
							 | 
						||
| 
								 | 
							
								               };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								               fileReader.onload = function() {
							 | 
						||
| 
								 | 
							
								                 listenersCalled++;
							 | 
						||
| 
								 | 
							
								                 expect(Zone.current).toBe(testZone);
							 | 
						||
| 
								 | 
							
								               };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								               fileReader.onloadend = function() {
							 | 
						||
| 
								 | 
							
								                 listenersCalled++;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 expect(Zone.current).toBe(testZone);
							 | 
						||
| 
								 | 
							
								                 expect(fileReader.result).toEqual(data);
							 | 
						||
| 
								 | 
							
								                 expect(listenersCalled).toBe(3);
							 | 
						||
| 
								 | 
							
								                 done();
							 | 
						||
| 
								 | 
							
								               };
							 | 
						||
| 
								 | 
							
								             });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								             fileReader.readAsText(blob);
							 | 
						||
| 
								 | 
							
								           });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								           it('should have correct readyState', function(done) {
							 | 
						||
| 
								 | 
							
								             fileReader.onloadend = function() {
							 | 
						||
| 
								 | 
							
								               expect(fileReader.readyState).toBe((<any>FileReader).DONE);
							 | 
						||
| 
								 | 
							
								               done();
							 | 
						||
| 
								 | 
							
								             };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								             expect(fileReader.readyState).toBe((<any>FileReader).EMPTY);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								             fileReader.readAsText(blob);
							 | 
						||
| 
								 | 
							
								           });
							 | 
						||
| 
								 | 
							
								         }));
							 |