1+ 'use strict' ;
2+
3+ describe ( 'FileReader' , ifEnvSupports ( 'FileReader' , function ( ) {
4+ var fileReader ;
5+ var blob ;
6+ var data = 'Hello, World!' ;
7+ var testZone = zone . fork ( ) ;
8+
9+ // Android 4.3's native browser doesn't implement add/RemoveEventListener for FileReader
10+ function supportsEventTargetFns ( ) {
11+ return FileReader . prototype . addEventListener && FileReader . prototype . removeEventListener ;
12+ }
13+ supportsEventTargetFns . message = 'FileReader#addEventListener and FileReader#removeEventListener' ;
14+
15+ beforeEach ( function ( ) {
16+ fileReader = new FileReader ( ) ;
17+
18+ try {
19+ blob = new Blob ( [ data ] ) ;
20+ } catch ( e ) {
21+ // For hosts that don't support the Blob ctor (e.g. Android 4.3's native browser)
22+ var blobBuilder = new WebKitBlobBuilder ( ) ;
23+ blobBuilder . append ( data ) ;
24+
25+ blob = blobBuilder . getBlob ( ) ;
26+ }
27+ } ) ;
28+
29+ describe ( 'EventTarget methods' , ifEnvSupports ( supportsEventTargetFns , function ( ) {
30+ it ( 'should bind addEventListener listeners' , function ( done ) {
31+ testZone . run ( function ( ) {
32+ fileReader . addEventListener ( 'load' , function ( ) {
33+ expect ( zone ) . toBeDirectChildOf ( testZone ) ;
34+ expect ( fileReader . result ) . toEqual ( data ) ;
35+ done ( ) ;
36+ } ) ;
37+ } ) ;
38+
39+ fileReader . readAsText ( blob ) ;
40+ } ) ;
41+
42+ it ( 'should remove listeners via removeEventListener' , function ( done ) {
43+ var listenerSpy = jasmine . createSpy ( ) ;
44+
45+ testZone . run ( function ( ) {
46+ fileReader . addEventListener ( 'loadstart' , listenerSpy ) ;
47+ fileReader . addEventListener ( 'loadend' , function ( ) {
48+ expect ( listenerSpy ) . not . toHaveBeenCalled ( ) ;
49+ done ( ) ;
50+ } ) ;
51+ } ) ;
52+
53+ fileReader . removeEventListener ( 'loadstart' , listenerSpy ) ;
54+ fileReader . readAsText ( blob ) ;
55+ } ) ;
56+ } ) ) ;
57+
58+ it ( 'should bind onEventType listeners' , function ( done ) {
59+ var listenersCalled = 0 ;
60+
61+ testZone . run ( function ( ) {
62+ fileReader . onloadstart = function ( ) {
63+ listenersCalled ++ ;
64+ expect ( zone ) . toBeDirectChildOf ( testZone ) ;
65+ } ;
66+
67+ fileReader . onload = function ( ) {
68+ listenersCalled ++ ;
69+ expect ( zone ) . toBeDirectChildOf ( testZone ) ;
70+ } ;
71+
72+ fileReader . onloadend = function ( ) {
73+ listenersCalled ++ ;
74+
75+ expect ( zone ) . toBeDirectChildOf ( testZone ) ;
76+ expect ( fileReader . result ) . toEqual ( data ) ;
77+ expect ( listenersCalled ) . toBe ( 3 ) ;
78+ done ( ) ;
79+ } ;
80+ } ) ;
81+
82+ fileReader . readAsText ( blob ) ;
83+ } ) ;
84+
85+ it ( 'should have correct readyState' , function ( done ) {
86+ fileReader . onloadend = function ( ) {
87+ expect ( fileReader . readyState ) . toBe ( FileReader . DONE ) ;
88+ done ( ) ;
89+ } ;
90+
91+ expect ( fileReader . readyState ) . toBe ( FileReader . EMPTY ) ;
92+
93+ fileReader . readAsText ( blob ) ;
94+ } ) ;
95+ } ) ) ;
0 commit comments