Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/streams/piping/close-propagation-backward.js

Issue 2561443004: Implementation of ReadableStream pipeTo and pipeThrough (Closed)
Patch Set: Stop waiting for writes to terminate at shutdown Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 'use strict';
2
3 if (self.importScripts) {
4 self.importScripts('/resources/testharness.js');
5 self.importScripts('../resources/recording-streams.js');
6 }
7
8 const error1 = new Error('error1!');
9 error1.name = 'error1';
10
11 promise_test(() => {
12
13 const rs = recordingReadableStream();
14
15 const ws = recordingWritableStream();
16 const writer = ws.getWriter();
17 writer.close();
18 writer.releaseLock();
19
20 return rs.pipeTo(ws).then(
21 () => assert_unreached('the promise must not fulfill'),
22 err => {
23 assert_equals(err.name, 'TypeError', 'the promise must reject with a TypeE rror');
24
25 assert_array_equals(rs.eventsWithoutPulls, ['cancel', err]);
26 assert_array_equals(ws.events, ['close']);
27
28 return Promise.all([
29 rs.getReader().closed,
30 ws.getWriter().closed
31 ]);
32 }
33 );
34
35 }, 'Closing must be propagated backward: starts closed; preventCancel omitted; f ulfilled cancel promise');
36
37 promise_test(t => {
38
39 // Our recording streams do not deal well with errors generated by the system, so give them some help
40 let recordedError;
41 const rs = recordingReadableStream({
42 cancel(cancelErr) {
43 recordedError = cancelErr;
44 throw error1;
45 }
46 });
47
48 const ws = recordingWritableStream();
49 const writer = ws.getWriter();
50 writer.close();
51 writer.releaseLock();
52
53 return promise_rejects(t, error1, rs.pipeTo(ws), 'pipeTo must reject with the same error').then(() => {
54 assert_equals(recordedError.name, 'TypeError', 'the cancel reason must be a TypeError');
55
56 assert_array_equals(rs.eventsWithoutPulls, ['cancel', recordedError]);
57 assert_array_equals(ws.events, ['close']);
58
59 return Promise.all([
60 rs.getReader().closed,
61 ws.getWriter().closed
62 ]);
63 });
64
65 }, 'Closing must be propagated backward: starts closed; preventCancel omitted; r ejected cancel promise');
66
67 for (const falsy of [undefined, null, false, +0, -0, NaN, '']) {
68 promise_test(() => {
69
70 const rs = recordingReadableStream();
71
72 const ws = recordingWritableStream();
73 const writer = ws.getWriter();
74 writer.close();
75 writer.releaseLock();
76
77 return rs.pipeTo(ws, { preventCancel: falsy }).then(
78 () => assert_unreached('the promise must not fulfill'),
79 err => {
80 assert_equals(err.name, 'TypeError', 'the promise must reject with a Typ eError');
81
82 assert_array_equals(rs.eventsWithoutPulls, ['cancel', err]);
83 assert_array_equals(ws.events, ['close']);
84
85 return Promise.all([
86 rs.getReader().closed,
87 ws.getWriter().closed
88 ]);
89 }
90 );
91
92 }, `Closing must be propagated backward: starts closed; preventCancel = ${fals y} (falsy); fulfilled cancel promise`);
93 }
94
95 for (const truthy of [true, 'a', 1, Symbol(), { }]) {
96 promise_test(t => {
97
98 const rs = recordingReadableStream();
99
100 const ws = recordingWritableStream();
101 const writer = ws.getWriter();
102 writer.close();
103 writer.releaseLock();
104
105 return promise_rejects(t, new TypeError(), rs.pipeTo(ws, { preventCancel: tr uthy })).then(() => {
106 assert_array_equals(rs.eventsWithoutPulls, []);
107 assert_array_equals(ws.events, ['close']);
108
109 return ws.getWriter().closed;
110 });
111
112 }, `Closing must be propagated backward: starts closed; preventCancel = ${Stri ng(truthy)} (truthy)`);
113 }
114
115 promise_test(t => {
116
117 const rs = recordingReadableStream();
118
119 const ws = recordingWritableStream();
120 const writer = ws.getWriter();
121 writer.close();
122 writer.releaseLock();
123
124 return promise_rejects(t, new TypeError(), rs.pipeTo(ws, { preventCancel: true , preventAbort: true }))
125 .then(() => {
126 assert_array_equals(rs.eventsWithoutPulls, []);
127 assert_array_equals(ws.events, ['close']);
128
129 return ws.getWriter().closed;
130 });
131
132 }, 'Closing must be propagated backward: starts closed; preventCancel = true, pr eventAbort = true');
133
134 promise_test(t => {
135
136 const rs = recordingReadableStream();
137
138 const ws = recordingWritableStream();
139 const writer = ws.getWriter();
140 writer.close();
141 writer.releaseLock();
142
143 return promise_rejects(t, new TypeError(),
144 rs.pipeTo(ws, { preventCancel: true, preventAbort: true , preventClose: true }))
145 .then(() => {
146 assert_array_equals(rs.eventsWithoutPulls, []);
147 assert_array_equals(ws.events, ['close']);
148
149 return ws.getWriter().closed;
150 });
151
152 }, 'Closing must be propagated backward: starts closed; preventCancel = true, pr eventAbort = true, preventClose ' +
153 '= true');
154
155 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698