11f5d2812af03b7f6abd4ad1be648956180886ad
[WebKit-https.git] / LayoutTests / streams / readable-stream-reader-read.html
1 <!DOCTYPE html>
2 <script src='../resources/testharness.js'></script>
3 <script src='../resources/testharnessreport.js'></script>
4 <script>
5 var test1 = async_test('Reading twice on a stream that gets closed');
6 test1.step(function() {
7     var controller;
8     var rs = new ReadableStream({
9         start: function(c) {
10             controller = c;
11         }
12     });
13     var counter = 0;
14     var reader = rs.getReader();
15
16     reader.read().then(test1.step_func(function(result) {
17         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
18         assert_equals(counter, 1);
19         counter++;
20     }));
21     reader.read().then(test1.step_func(function(result) {
22         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
23         assert_equals(counter, 2);
24         counter++;
25         test1.done();
26     }));
27     reader.closed.then(test1.step_func(function() {
28         assert_equals(counter, 0);
29         counter++;
30     }));
31
32     controller.close();
33 });
34
35 var test2 = async_test('Reading twice on a closed stream');
36 test2.step(function() {
37     var controller;
38     var rs = new ReadableStream({
39         start: function(c) {
40             controller = c;
41         }
42     });
43
44     controller.close();
45
46     var counter = 0;
47     var reader = rs.getReader();
48
49     reader.read().then(test2.step_func(function(result) {
50         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
51         assert_equals(counter, 0);
52         counter++;
53     }));
54     reader.read().then(test2.step_func(function(result) {
55         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
56         assert_equals(counter, 1);
57         counter++;
58     }));
59     reader.closed.then(test2.step_func(function() {
60         assert_equals(counter, 2);
61         counter++;
62         test2.done();
63     }));
64 });
65
66 var test3 = async_test('Reading twice on an errored stream');
67 test3.step(function() {
68     var controller;
69     var rs = new ReadableStream({
70         start: function(c) {
71             controller = c;
72         }
73     });
74
75     var myError = { potato: "mashed" };
76     controller.error(myError);
77
78     var counter = 0;
79     var reader = rs.getReader();
80
81     reader.read().then(test3.step_func(function() {
82         assert_unreached('read() should reject on an errored stream');
83     }), test3.step_func(function(err) {
84         assert_equals(myError, err);
85         assert_equals(counter, 0);
86         counter++;
87     }));
88     reader.read().then(test3.step_func(function() {
89         assert_unreached('read() should reject on an errored stream');
90     }), test3.step_func(function(err) {
91         assert_equals(myError, err);
92         assert_equals(counter, 1);
93         counter++;
94     }));
95     reader.closed.then(test3.step_func(function() {
96         assert_unreached('read() should reject on an errored stream');
97     }), test3.step_func(function(err) {
98         assert_equals(myError, err);
99         assert_equals(counter, 2);
100         counter++;
101         test3.done();
102     }));
103 });
104
105 var test4 = async_test('Reading twice on a stream that gets errored');
106 test4.step(function() {
107     var controller;
108     var rs = new ReadableStream({
109         start: function(c) {
110             controller = c;
111         }
112     });
113
114     var counter = 0;
115     var reader = rs.getReader();
116
117     reader.read().then(test4.step_func(function() {
118         assert_unreached('read() should reject on an errored stream');
119     }), test4.step_func(function(err) {
120         assert_equals(myError, err);
121         assert_equals(counter, 1);
122         counter++;
123     }));
124     reader.read().then(test4.step_func(function() {
125         assert_unreached('read() should reject on an errored stream');
126     }), test4.step_func(function(err) {
127         assert_equals(myError, err);
128         assert_equals(counter, 2);
129         counter++;
130         test4.done();
131     }));
132     reader.closed.then(test4.step_func(function() {
133         assert_unreached('read() should reject on an errored stream');
134     }), test4.step_func(function(err) {
135         assert_equals(myError, err);
136         assert_equals(counter, 0);
137         counter++;
138     }));
139
140     var myError = { potato: 'mashed' };
141     controller.error(myError);
142  });
143
144 var test5 = async_test('Reading within a read promise resolve callback on a stream that gets closed');
145 test5.step(function() {
146     var controller;
147     var rs = new ReadableStream({
148         start: function(c) {
149             controller = c;
150         }
151     });
152
153     var reader = rs.getReader();
154
155     reader.read().then(test5.step_func(function() {
156         reader.read().then(test5.step_func(function() {
157             test5.done();
158         }));
159     }));
160     controller.close();
161 });
162 </script>