| 
									
										
										
										
											2019-06-01 00:56:07 +09:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  |  * Copyright Google LLC All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2019-06-01 00:56:07 +09:00
										 |  |  |  * | 
					
						
							|  |  |  |  * 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); | 
					
						
							|  |  |  |            }); | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  |          })); |