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

Side by Side Diff: third_party/WebKit/LayoutTests/http/tests/streams/writable-streams/close.js

Issue 2453713003: Implementation of WritableStream (Closed)
Patch Set: Add missing return to promise_test Created 4 years, 1 month 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/test-utils.js');
6 self.importScripts('../resources/recording-streams.js');
7 }
8
9 promise_test(() => {
10 const ws = new WritableStream({
11 close() {
12 return 'Hello';
13 }
14 });
15
16 const writer = ws.getWriter();
17
18 const closePromise = writer.close();
19 return closePromise.then(value => assert_equals(value, undefined, 'fulfillment value must be undefined'));
20 }, 'fulfillment value of ws.close() call must be undefined even if the underlyin g sink returns a non-undefined ' +
21 'value');
22
23 promise_test(t => {
24 const passedError = new Error('error me');
25 let controller;
26 const ws = new WritableStream({
27 close(c) {
28 controller = c;
29 return delay(50);
30 }
31 });
32
33 const writer = ws.getWriter();
34
35 writer.close();
36
37 return Promise.all([
38 delay(10).then(() => controller.error(passedError)),
39 promise_rejects(t, passedError, writer.closed,
40 'closed promise should be rejected with the passed error'),
41 delay(70).then(() => promise_rejects(t, passedError, writer.closed, 'closed should stay rejected'))
42 ]);
43 }, 'when sink calls error asynchronously while closing, the stream should become errored');
44
45 promise_test(t => {
46 const passedError = new Error('error me');
47 const ws = new WritableStream({
48 close(controller) {
49 controller.error(passedError);
50 }
51 });
52
53 const writer = ws.getWriter();
54
55 return promise_rejects(t, passedError, writer.close(), 'close promise should b e rejected with the passed error')
56 .then(() => promise_rejects(t, passedError, writer.closed, 'closed should stay rejected'));
57 }, 'when sink calls error synchronously while closing, the stream should become errored');
58
59 promise_test(() => {
60 const ws = recordingWritableStream();
61
62 const writer = ws.getWriter();
63
64 return writer.ready.then(() => {
65 assert_equals(writer.desiredSize, 1, 'desiredSize should be 1');
66
67 writer.close();
68 assert_equals(writer.desiredSize, 1, 'desiredSize should be still 1');
69
70 return writer.ready.then(v => {
71 assert_equals(v, undefined, 'ready promise should be fulfilled with undefi ned');
72 assert_array_equals(ws.events, ['close'], 'write and abort should not be c alled');
73 });
74 });
75 }, 'when close is called on a WritableStream in writable state, ready should ret urn a fulfilled promise');
76
77 promise_test(() => {
78 const ws = recordingWritableStream({
79 write() {
80 return new Promise(() => {});
81 }
82 });
83
84 const writer = ws.getWriter();
85
86 return writer.ready.then(() => {
87 writer.write('a');
88
89 assert_equals(writer.desiredSize, 0, 'desiredSize should be 0');
90
91 let calledClose = false;
92 return Promise.all([
93 writer.ready.then(v => {
94 assert_equals(v, undefined, 'ready promise should be fulfilled with unde fined');
95 assert_true(calledClose, 'ready should not be fulfilled before writer.cl ose() is called');
96 assert_array_equals(ws.events, ['write', 'a'], 'sink abort() should not be called');
97 }),
98 delay(100).then(() => {
99 writer.close();
100 calledClose = true;
101 })
102 ]);
103 });
104 }, 'when close is called on a WritableStream in waiting state, ready promise sho uld be fulfilled');
105
106 promise_test(() => {
107 let asyncCloseFinished = false;
108 const ws = recordingWritableStream({
109 close() {
110 return delay(50).then(() => {
111 asyncCloseFinished = true;
112 });
113 }
114 });
115
116 const writer = ws.getWriter();
117 return writer.ready.then(() => {
118 writer.write('a');
119
120 writer.close();
121
122 return writer.ready.then(v => {
123 assert_false(asyncCloseFinished, 'ready promise should be fulfilled before async close completes');
124 assert_equals(v, undefined, 'ready promise should be fulfilled with undefi ned');
125 assert_array_equals(ws.events, ['write', 'a', 'close'], 'sink abort() shou ld not be called');
126 });
127 });
128 }, 'when close is called on a WritableStream in waiting state, ready should be f ulfilled immediately even if close ' +
129 'takes a long time');
130
131 promise_test(t => {
132 const rejection = { name: 'letter' };
133 const ws = new WritableStream({
134 close() {
135 return {
136 then(onFulfilled, onRejected) { onRejected(rejection); }
137 };
138 }
139 });
140 return promise_rejects(t, rejection, ws.getWriter().close(), 'close() should r eturn a rejection');
141 }, 'returning a thenable from close() should work');
142
143 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698