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);
 | |
|            });
 | |
|          })); |