[Streams API] Update tests according to latest spec
[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     }));
20     reader.read().then(test1.step_func(function(result) {
21         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
22         assert_equals(++counter, 2);
23     }));
24     reader.closed.then(test1.step_func(function() {
25         assert_equals(++counter, 3);
26         test1.done();
27     }));
28
29     controller.close();
30 });
31
32 var test2 = async_test('Reading twice on a closed stream');
33 test2.step(function() {
34     var controller;
35     var rs = new ReadableStream({
36         start: function(c) {
37             controller = c;
38         }
39     });
40
41     controller.close();
42
43     var counter = 0;
44     var reader = rs.getReader();
45
46     reader.read().then(test2.step_func(function(result) {
47         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
48         assert_equals(counter, 0);
49         counter++;
50     }));
51     reader.read().then(test2.step_func(function(result) {
52         assert_object_equals(result, { value: undefined, done: true }, 'read() should fulfill with close');
53         assert_equals(counter, 1);
54         counter++;
55     }));
56     reader.closed.then(test2.step_func(function() {
57         assert_equals(counter, 2);
58         counter++;
59         test2.done();
60     }));
61 });
62
63 var test3 = async_test('Reading twice on an errored stream');
64 test3.step(function() {
65     var controller;
66     var rs = new ReadableStream({
67         start: function(c) {
68             controller = c;
69         }
70     });
71
72     var myError = { potato: "mashed" };
73     controller.error(myError);
74
75     var counter = 0;
76     var reader = rs.getReader();
77
78     reader.read().then(test3.step_func(function() {
79         assert_unreached('read() should reject on an errored stream');
80     }), test3.step_func(function(err) {
81         assert_equals(myError, err);
82         assert_equals(counter, 0);
83         counter++;
84     }));
85     reader.read().then(test3.step_func(function() {
86         assert_unreached('read() should reject on an errored stream');
87     }), test3.step_func(function(err) {
88         assert_equals(myError, err);
89         assert_equals(counter, 1);
90         counter++;
91     }));
92     reader.closed.then(test3.step_func(function() {
93         assert_unreached('read() should reject on an errored stream');
94     }), test3.step_func(function(err) {
95         assert_equals(myError, err);
96         assert_equals(counter, 2);
97         counter++;
98         test3.done();
99     }));
100 });
101
102 var test4 = async_test('Reading twice on a stream that gets errored');
103 test4.step(function() {
104     var controller;
105     var rs = new ReadableStream({
106         start: function(c) {
107             controller = c;
108         }
109     });
110
111     var counter = 0;
112     var reader = rs.getReader();
113
114     reader.read().then(test4.step_func(function() {
115         assert_unreached('read() should reject on an errored stream');
116     }), test4.step_func(function(err) {
117         assert_equals(myError, err);
118         assert_equals(++counter, 1);
119     }));
120     reader.read().then(test4.step_func(function() {
121         assert_unreached('read() should reject on an errored stream');
122     }), test4.step_func(function(err) {
123         assert_equals(myError, err);
124         assert_equals(++counter, 2);
125     }));
126     reader.closed.then(test4.step_func(function() {
127         assert_unreached('read() should reject on an errored stream');
128     }), test4.step_func(function(err) {
129         assert_equals(myError, err);
130         assert_equals(++counter, 3);
131         test4.done();
132     }));
133
134     var myError = { potato: 'mashed' };
135     controller.error(myError);
136  });
137
138 var test5 = async_test('ReadableStream: if start rejects with no parameter, it should error the stream with an undefined error');
139 test5.step(function() {
140     var rs = new ReadableStream({
141         start: function(c) {
142             return Promise.reject();
143         }
144     });
145
146     rs.getReader().read().catch(test5.step_func(function(e) {
147         assert_equals(typeof e, "undefined");
148         test5.done();
149     }));
150 });
151
152 </script>