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

Side by Side Diff: Source/core/streams/ReadableStreamTest.cpp

Issue 712043002: Make ReadableStream implementation up to date. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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
« no previous file with comments | « Source/core/streams/ReadableStream.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/streams/ReadableStream.h" 6 #include "core/streams/ReadableStream.h"
7 7
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h" 9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "bindings/core/v8/ScriptState.h" 10 #include "bindings/core/v8/ScriptState.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume nt().frame()); } 98 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume nt().frame()); }
99 v8::Isolate* isolate() { return scriptState()->isolate(); } 99 v8::Isolate* isolate() { return scriptState()->isolate(); }
100 100
101 v8::Handle<v8::Function> createCaptor(String* value) 101 v8::Handle<v8::Function> createCaptor(String* value)
102 { 102 {
103 return StringCapturingFunction::createFunction(scriptState(), value); 103 return StringCapturingFunction::createFunction(scriptState(), value);
104 } 104 }
105 105
106 StringStream* construct() 106 StringStream* construct()
107 { 107 {
108 Checkpoint checkpoint;
109 {
110 InSequence s;
111 EXPECT_CALL(checkpoint, Call(0));
112 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
113 EXPECT_CALL(checkpoint, Call(1));
114 }
108 StringStream* stream = new StringStream(scriptState()->executionContext( ), m_underlyingSource); 115 StringStream* stream = new StringStream(scriptState()->executionContext( ), m_underlyingSource);
116 checkpoint.Call(0);
109 stream->didSourceStart(); 117 stream->didSourceStart();
118 checkpoint.Call(1);
110 return stream; 119 return stream;
111 } 120 }
112 121
113 OwnPtr<DummyPageHolder> m_page; 122 OwnPtr<DummyPageHolder> m_page;
114 ScriptState::Scope m_scope; 123 ScriptState::Scope m_scope;
115 Persistent<MockUnderlyingSource> m_underlyingSource; 124 Persistent<MockUnderlyingSource> m_underlyingSource;
116 ExceptionState m_exceptionState; 125 ExceptionState m_exceptionState;
117 }; 126 };
118 127
119 TEST_F(ReadableStreamTest, Start) 128 TEST_F(ReadableStreamTest, Start)
120 { 129 {
130 Checkpoint checkpoint;
131 {
132 InSequence s;
133 EXPECT_CALL(checkpoint, Call(0));
134 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
135 EXPECT_CALL(checkpoint, Call(1));
136 }
137
121 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource); 138 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource);
122 EXPECT_FALSE(m_exceptionState.hadException()); 139 EXPECT_FALSE(m_exceptionState.hadException());
123 EXPECT_FALSE(stream->isStarted()); 140 EXPECT_FALSE(stream->isStarted());
124 EXPECT_FALSE(stream->isDraining()); 141 EXPECT_FALSE(stream->isDraining());
125 EXPECT_FALSE(stream->isPulling()); 142 EXPECT_FALSE(stream->isPulling());
126 EXPECT_EQ(stream->state(), ReadableStream::Waiting); 143 EXPECT_EQ(stream->state(), ReadableStream::Waiting);
127 144
145 checkpoint.Call(0);
128 stream->didSourceStart(); 146 stream->didSourceStart();
147 checkpoint.Call(1);
129 148
130 EXPECT_TRUE(stream->isStarted()); 149 EXPECT_TRUE(stream->isStarted());
131 EXPECT_FALSE(stream->isDraining()); 150 EXPECT_FALSE(stream->isDraining());
132 EXPECT_FALSE(stream->isPulling()); 151 EXPECT_TRUE(stream->isPulling());
133 EXPECT_EQ(stream->state(), ReadableStream::Waiting); 152 EXPECT_EQ(stream->state(), ReadableStream::Waiting);
134 } 153 }
135 154
136 TEST_F(ReadableStreamTest, StartFail) 155 TEST_F(ReadableStreamTest, StartFail)
137 { 156 {
138 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource); 157 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource);
139 EXPECT_FALSE(m_exceptionState.hadException()); 158 EXPECT_FALSE(m_exceptionState.hadException());
140 EXPECT_FALSE(stream->isStarted()); 159 EXPECT_FALSE(stream->isStarted());
141 EXPECT_FALSE(stream->isDraining()); 160 EXPECT_FALSE(stream->isDraining());
142 EXPECT_FALSE(stream->isPulling()); 161 EXPECT_FALSE(stream->isPulling());
143 EXPECT_EQ(stream->state(), ReadableStream::Waiting); 162 EXPECT_EQ(stream->state(), ReadableStream::Waiting);
144 163
145 stream->error(DOMException::create(NotFoundError)); 164 stream->error(DOMException::create(NotFoundError));
146 165
147 EXPECT_FALSE(stream->isStarted()); 166 EXPECT_FALSE(stream->isStarted());
148 EXPECT_FALSE(stream->isDraining()); 167 EXPECT_FALSE(stream->isDraining());
149 EXPECT_FALSE(stream->isPulling()); 168 EXPECT_FALSE(stream->isPulling());
150 EXPECT_EQ(stream->state(), ReadableStream::Errored); 169 EXPECT_EQ(stream->state(), ReadableStream::Errored);
151 } 170 }
152 171
153 TEST_F(ReadableStreamTest, WaitOnWaiting) 172 TEST_F(ReadableStreamTest, WaitOnWaiting)
154 { 173 {
155 StringStream* stream = construct(); 174 StringStream* stream = construct();
156 Checkpoint checkpoint; 175 Checkpoint checkpoint;
157 176
158 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 177 EXPECT_EQ(ReadableStream::Waiting, stream->state());
159 EXPECT_TRUE(stream->isStarted()); 178 EXPECT_TRUE(stream->isStarted());
160 EXPECT_FALSE(stream->isPulling()); 179 EXPECT_TRUE(stream->isPulling());
161 180
162 {
163 InSequence s;
164 EXPECT_CALL(checkpoint, Call(0));
165 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
166 EXPECT_CALL(checkpoint, Call(1));
167 }
168
169 checkpoint.Call(0);
170 ScriptPromise p = stream->wait(scriptState()); 181 ScriptPromise p = stream->wait(scriptState());
171 ScriptPromise q = stream->wait(scriptState()); 182 ScriptPromise q = stream->wait(scriptState());
172 checkpoint.Call(1);
173 183
174 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 184 EXPECT_EQ(ReadableStream::Waiting, stream->state());
175 EXPECT_TRUE(stream->isPulling());
176 EXPECT_EQ(q, p); 185 EXPECT_EQ(q, p);
177 } 186 }
178 187
179 TEST_F(ReadableStreamTest, WaitDuringStarting) 188 TEST_F(ReadableStreamTest, WaitDuringStarting)
180 { 189 {
181 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource); 190 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource);
182 Checkpoint checkpoint; 191 Checkpoint checkpoint;
183 192
184 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 193 EXPECT_EQ(ReadableStream::Waiting, stream->state());
185 EXPECT_FALSE(stream->isStarted()); 194 EXPECT_FALSE(stream->isStarted());
186 EXPECT_FALSE(stream->isPulling()); 195 EXPECT_FALSE(stream->isPulling());
187 196
188 { 197 {
189 InSequence s; 198 InSequence s;
190 EXPECT_CALL(checkpoint, Call(0)); 199 EXPECT_CALL(checkpoint, Call(0));
200 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
191 EXPECT_CALL(checkpoint, Call(1)); 201 EXPECT_CALL(checkpoint, Call(1));
192 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
193 } 202 }
194 203
204 stream->wait(scriptState());
195 checkpoint.Call(0); 205 checkpoint.Call(0);
196 stream->wait(scriptState()); 206 stream->didSourceStart();
197 checkpoint.Call(1); 207 checkpoint.Call(1);
198 208
199 EXPECT_TRUE(stream->isPulling());
200
201 stream->didSourceStart();
202
203 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 209 EXPECT_EQ(ReadableStream::Waiting, stream->state());
210 EXPECT_TRUE(stream->isStarted());
204 EXPECT_TRUE(stream->isPulling()); 211 EXPECT_TRUE(stream->isPulling());
205 } 212 }
206 213
207 TEST_F(ReadableStreamTest, WaitAndError) 214 TEST_F(ReadableStreamTest, WaitAndError)
208 { 215 {
209 StringStream* stream = construct(); 216 StringStream* stream = construct();
210 String onFulfilled, onRejected; 217 String onFulfilled, onRejected;
211 218
212 {
213 InSequence s;
214 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
215 }
216
217 ScriptPromise promise = stream->wait(scriptState()); 219 ScriptPromise promise = stream->wait(scriptState());
218 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 220 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
219 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 221 EXPECT_EQ(ReadableStream::Waiting, stream->state());
220 EXPECT_TRUE(stream->isPulling()); 222 EXPECT_TRUE(stream->isPulling());
221 stream->error(DOMException::create(NotFoundError, "hello, error")); 223 stream->error(DOMException::create(NotFoundError, "hello, error"));
222 EXPECT_EQ(ReadableStream::Errored, stream->state()); 224 EXPECT_EQ(ReadableStream::Errored, stream->state());
223 EXPECT_TRUE(stream->isPulling()); 225 EXPECT_TRUE(stream->isPulling());
224 EXPECT_TRUE(onFulfilled.isNull()); 226 EXPECT_TRUE(onFulfilled.isNull());
225 EXPECT_TRUE(onRejected.isNull()); 227 EXPECT_TRUE(onRejected.isNull());
226 228
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 EXPECT_EQ("undefined", onFulfilled); 278 EXPECT_EQ("undefined", onFulfilled);
277 EXPECT_TRUE(onRejected.isNull()); 279 EXPECT_TRUE(onRejected.isNull());
278 } 280 }
279 281
280 TEST_F(ReadableStreamTest, WaitAndEnqueue) 282 TEST_F(ReadableStreamTest, WaitAndEnqueue)
281 { 283 {
282 StringStream* stream = construct(); 284 StringStream* stream = construct();
283 String onFulfilled, onRejected; 285 String onFulfilled, onRejected;
284 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 286 EXPECT_EQ(ReadableStream::Waiting, stream->state());
285 287
286 {
287 InSequence s;
288 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
289 }
290
291 stream->wait(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&o nRejected)); 288 stream->wait(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&o nRejected));
292 isolate()->RunMicrotasks(); 289 isolate()->RunMicrotasks();
293 290
294 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 291 EXPECT_EQ(ReadableStream::Waiting, stream->state());
295 EXPECT_TRUE(stream->isPulling()); 292 EXPECT_TRUE(stream->isPulling());
296 EXPECT_TRUE(onFulfilled.isNull()); 293 EXPECT_TRUE(onFulfilled.isNull());
297 EXPECT_TRUE(onRejected.isNull()); 294 EXPECT_TRUE(onRejected.isNull());
298 295
299 bool result = stream->enqueue("hello"); 296 bool result = stream->enqueue("hello");
300 EXPECT_TRUE(result); 297 EXPECT_TRUE(result);
301 EXPECT_EQ(ReadableStream::Readable, stream->state()); 298 EXPECT_EQ(ReadableStream::Readable, stream->state());
302 EXPECT_FALSE(stream->isPulling()); 299 EXPECT_FALSE(stream->isPulling());
303 EXPECT_TRUE(onFulfilled.isNull()); 300 EXPECT_TRUE(onFulfilled.isNull());
304 EXPECT_TRUE(onRejected.isNull()); 301 EXPECT_TRUE(onRejected.isNull());
305 302
306 isolate()->RunMicrotasks(); 303 isolate()->RunMicrotasks();
307 EXPECT_EQ("undefined", onFulfilled); 304 EXPECT_EQ("undefined", onFulfilled);
308 EXPECT_TRUE(onRejected.isNull()); 305 EXPECT_TRUE(onRejected.isNull());
309 } 306 }
310 307
311 TEST_F(ReadableStreamTest, WaitAndEnqueueAndError) 308 TEST_F(ReadableStreamTest, WaitAndEnqueueAndError)
312 { 309 {
313 StringStream* stream = construct(); 310 StringStream* stream = construct();
314 String onFulfilled, onRejected; 311 String onFulfilled, onRejected;
315 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 312 EXPECT_EQ(ReadableStream::Waiting, stream->state());
316 313
317 {
318 InSequence s;
319 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
320 }
321
322 ScriptPromise promise = stream->wait(scriptState()); 314 ScriptPromise promise = stream->wait(scriptState());
323 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 315 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
324 isolate()->RunMicrotasks(); 316 isolate()->RunMicrotasks();
325 317
326 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 318 EXPECT_EQ(ReadableStream::Waiting, stream->state());
327 EXPECT_TRUE(stream->isPulling()); 319 EXPECT_TRUE(stream->isPulling());
328 EXPECT_TRUE(onFulfilled.isNull()); 320 EXPECT_TRUE(onFulfilled.isNull());
329 EXPECT_TRUE(onRejected.isNull()); 321 EXPECT_TRUE(onRejected.isNull());
330 322
331 bool result = stream->enqueue("hello"); 323 bool result = stream->enqueue("hello");
(...skipping 13 matching lines...) Expand all
345 EXPECT_NE(promise, stream->wait(scriptState())); 337 EXPECT_NE(promise, stream->wait(scriptState()));
346 } 338 }
347 339
348 TEST_F(ReadableStreamTest, CloseWhenWaiting) 340 TEST_F(ReadableStreamTest, CloseWhenWaiting)
349 { 341 {
350 String onWaitFulfilled, onWaitRejected; 342 String onWaitFulfilled, onWaitRejected;
351 String onClosedFulfilled, onClosedRejected; 343 String onClosedFulfilled, onClosedRejected;
352 344
353 StringStream* stream = construct(); 345 StringStream* stream = construct();
354 346
355 {
356 InSequence s;
357 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
358 }
359
360 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 347 EXPECT_EQ(ReadableStream::Waiting, stream->state());
361 stream->wait(scriptState()).then(createCaptor(&onWaitFulfilled), createCapto r(&onWaitRejected)); 348 stream->wait(scriptState()).then(createCaptor(&onWaitFulfilled), createCapto r(&onWaitRejected));
362 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected)); 349 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected));
363 350
364 isolate()->RunMicrotasks(); 351 isolate()->RunMicrotasks();
365 EXPECT_TRUE(onWaitFulfilled.isNull()); 352 EXPECT_TRUE(onWaitFulfilled.isNull());
366 EXPECT_TRUE(onWaitRejected.isNull()); 353 EXPECT_TRUE(onWaitRejected.isNull());
367 EXPECT_TRUE(onClosedFulfilled.isNull()); 354 EXPECT_TRUE(onClosedFulfilled.isNull());
368 EXPECT_TRUE(onClosedRejected.isNull()); 355 EXPECT_TRUE(onClosedRejected.isNull());
369 356
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 EXPECT_FALSE(stream->isDraining()); 455 EXPECT_FALSE(stream->isDraining());
469 456
470 ScriptPromise newPromise = stream->wait(scriptState()); 457 ScriptPromise newPromise = stream->wait(scriptState());
471 newPromise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 458 newPromise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
472 isolate()->RunMicrotasks(); 459 isolate()->RunMicrotasks();
473 EXPECT_NE(promise, newPromise); 460 EXPECT_NE(promise, newPromise);
474 EXPECT_TRUE(onFulfilled.isNull()); 461 EXPECT_TRUE(onFulfilled.isNull());
475 EXPECT_TRUE(onRejected.isNull()); 462 EXPECT_TRUE(onRejected.isNull());
476 } 463 }
477 464
478 TEST_F(ReadableStreamTest, EnqueTwiceAndRead) 465 TEST_F(ReadableStreamTest, EnqueueTwiceAndRead)
479 { 466 {
480 StringStream* stream = construct(); 467 StringStream* stream = construct();
481 Checkpoint checkpoint; 468 Checkpoint checkpoint;
482 469
483 { 470 {
484 InSequence s; 471 InSequence s;
485 EXPECT_CALL(checkpoint, Call(0)); 472 EXPECT_CALL(checkpoint, Call(0));
473 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
486 EXPECT_CALL(checkpoint, Call(1)); 474 EXPECT_CALL(checkpoint, Call(1));
487 } 475 }
488 476
489 EXPECT_TRUE(stream->enqueue("hello")); 477 EXPECT_TRUE(stream->enqueue("hello"));
490 EXPECT_TRUE(stream->enqueue("bye")); 478 EXPECT_TRUE(stream->enqueue("bye"));
491 ScriptPromise promise = stream->wait(scriptState()); 479 ScriptPromise promise = stream->wait(scriptState());
492 EXPECT_EQ(ReadableStream::Readable, stream->state()); 480 EXPECT_EQ(ReadableStream::Readable, stream->state());
493 EXPECT_FALSE(stream->isPulling()); 481 EXPECT_FALSE(stream->isPulling());
494 482
483 String chunk;
495 checkpoint.Call(0); 484 checkpoint.Call(0);
496 String chunk;
497 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 485 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
498 checkpoint.Call(1); 486 checkpoint.Call(1);
499 EXPECT_FALSE(m_exceptionState.hadException()); 487 EXPECT_FALSE(m_exceptionState.hadException());
500 EXPECT_EQ("hello", chunk); 488 EXPECT_EQ("hello", chunk);
501 EXPECT_EQ(ReadableStream::Readable, stream->state()); 489 EXPECT_EQ(ReadableStream::Readable, stream->state());
502 EXPECT_FALSE(stream->isPulling()); 490 EXPECT_TRUE(stream->isPulling());
503 EXPECT_FALSE(stream->isDraining()); 491 EXPECT_FALSE(stream->isDraining());
504 492
505 ScriptPromise newPromise = stream->wait(scriptState()); 493 ScriptPromise newPromise = stream->wait(scriptState());
506 EXPECT_EQ(promise, newPromise); 494 EXPECT_EQ(promise, newPromise);
507 } 495 }
508 496
509 TEST_F(ReadableStreamTest, CloseWhenReadable) 497 TEST_F(ReadableStreamTest, CloseWhenReadable)
510 { 498 {
511 StringStream* stream = construct(); 499 StringStream* stream = construct();
512 String onWaitFulfilled, onWaitRejected;
513 String onClosedFulfilled, onClosedRejected; 500 String onClosedFulfilled, onClosedRejected;
514 501
515 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected)); 502 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected));
516 EXPECT_TRUE(stream->enqueue("hello")); 503 EXPECT_TRUE(stream->enqueue("hello"));
517 EXPECT_TRUE(stream->enqueue("bye")); 504 EXPECT_TRUE(stream->enqueue("bye"));
518 stream->close(); 505 stream->close();
519 EXPECT_FALSE(stream->enqueue("should be ignored")); 506 EXPECT_FALSE(stream->enqueue("should be ignored"));
520 507
521 ScriptPromise promise = stream->wait(scriptState()); 508 ScriptPromise promise = stream->wait(scriptState());
522 EXPECT_EQ(ReadableStream::Readable, stream->state()); 509 EXPECT_EQ(ReadableStream::Readable, stream->state());
523 EXPECT_FALSE(stream->isPulling()); 510 EXPECT_FALSE(stream->isPulling());
524 EXPECT_TRUE(stream->isDraining()); 511 EXPECT_TRUE(stream->isDraining());
525 512
526 String chunk; 513 String chunk;
527 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 514 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
528 EXPECT_EQ("hello", chunk); 515 EXPECT_EQ("hello", chunk);
529 EXPECT_EQ(promise, stream->wait(scriptState())); 516 EXPECT_EQ(promise, stream->wait(scriptState()));
530 517
531 isolate()->RunMicrotasks(); 518 isolate()->RunMicrotasks();
532 519
533 EXPECT_EQ(ReadableStream::Readable, stream->state()); 520 EXPECT_EQ(ReadableStream::Readable, stream->state());
534 EXPECT_FALSE(stream->isPulling()); 521 EXPECT_FALSE(stream->isPulling());
535 EXPECT_TRUE(stream->isDraining()); 522 EXPECT_TRUE(stream->isDraining());
536 523
537 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 524 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
538 EXPECT_EQ("bye", chunk); 525 EXPECT_EQ("bye", chunk);
539 EXPECT_FALSE(m_exceptionState.hadException()); 526 EXPECT_FALSE(m_exceptionState.hadException());
540 527
541 EXPECT_NE(promise, stream->wait(scriptState())); 528 EXPECT_EQ(promise, stream->wait(scriptState()));
542 stream->wait(scriptState()).then(createCaptor(&onWaitFulfilled), createCapto r(&onWaitRejected));
543 529
544 EXPECT_EQ(ReadableStream::Closed, stream->state()); 530 EXPECT_EQ(ReadableStream::Closed, stream->state());
545 EXPECT_FALSE(stream->isPulling()); 531 EXPECT_FALSE(stream->isPulling());
546 EXPECT_TRUE(stream->isDraining()); 532 EXPECT_TRUE(stream->isDraining());
547 533
548 EXPECT_TRUE(onWaitFulfilled.isNull());
549 EXPECT_TRUE(onWaitRejected.isNull());
550 EXPECT_TRUE(onClosedFulfilled.isNull()); 534 EXPECT_TRUE(onClosedFulfilled.isNull());
551 EXPECT_TRUE(onClosedRejected.isNull()); 535 EXPECT_TRUE(onClosedRejected.isNull());
552 536
553 isolate()->RunMicrotasks(); 537 isolate()->RunMicrotasks();
554 EXPECT_EQ("undefined", onWaitFulfilled);
555 EXPECT_TRUE(onWaitRejected.isNull());
556 EXPECT_EQ("undefined", onClosedFulfilled); 538 EXPECT_EQ("undefined", onClosedFulfilled);
557 EXPECT_TRUE(onClosedRejected.isNull()); 539 EXPECT_TRUE(onClosedRejected.isNull());
558 } 540 }
559 541
560 TEST_F(ReadableStreamTest, CancelWhenClosed) 542 TEST_F(ReadableStreamTest, CancelWhenClosed)
561 { 543 {
562 StringStream* stream = construct(); 544 StringStream* stream = construct();
563 String onFulfilled, onRejected; 545 String onFulfilled, onRejected;
564 stream->close(); 546 stream->close();
565 EXPECT_EQ(ReadableStream::Closed, stream->state()); 547 EXPECT_EQ(ReadableStream::Closed, stream->state());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 579
598 TEST_F(ReadableStreamTest, CancelWhenWaiting) 580 TEST_F(ReadableStreamTest, CancelWhenWaiting)
599 { 581 {
600 StringStream* stream = construct(); 582 StringStream* stream = construct();
601 String onFulfilled, onRejected; 583 String onFulfilled, onRejected;
602 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason ")); 584 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason "));
603 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello")); 585 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello"));
604 586
605 { 587 {
606 InSequence s; 588 InSequence s;
607 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
608 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise)); 589 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise));
609 } 590 }
610 591
611 EXPECT_EQ(ReadableStream::Waiting, stream->state()); 592 EXPECT_EQ(ReadableStream::Waiting, stream->state());
612 ScriptPromise wait = stream->wait(scriptState()); 593 ScriptPromise wait = stream->wait(scriptState());
613 EXPECT_EQ(promise, stream->cancel(scriptState(), reason)); 594 EXPECT_NE(promise, stream->cancel(scriptState(), reason));
614 EXPECT_EQ(ReadableStream::Closed, stream->state()); 595 EXPECT_EQ(ReadableStream::Closed, stream->state());
615 EXPECT_EQ(stream->wait(scriptState()), wait); 596 EXPECT_EQ(stream->wait(scriptState()), wait);
616 597
617 wait.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 598 wait.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
618 EXPECT_TRUE(onFulfilled.isNull()); 599 EXPECT_TRUE(onFulfilled.isNull());
619 EXPECT_TRUE(onRejected.isNull()); 600 EXPECT_TRUE(onRejected.isNull());
620 601
621 isolate()->RunMicrotasks(); 602 isolate()->RunMicrotasks();
622 EXPECT_EQ("undefined", onFulfilled); 603 EXPECT_EQ("undefined", onFulfilled);
623 EXPECT_TRUE(onRejected.isNull()); 604 EXPECT_TRUE(onRejected.isNull());
624 } 605 }
625 606
626 TEST_F(ReadableStreamTest, CancelWhenReadable) 607 TEST_F(ReadableStreamTest, CancelWhenReadable)
627 { 608 {
628 StringStream* stream = construct(); 609 StringStream* stream = construct();
629 String onFulfilled, onRejected; 610 String onFulfilled, onRejected;
611 String onCancelFulfilled, onCancelRejected;
630 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason ")); 612 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason "));
631 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello")); 613 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello"));
632 614
633 { 615 {
634 InSequence s; 616 InSequence s;
635 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise)); 617 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise));
636 } 618 }
637 619
638 stream->enqueue("hello"); 620 stream->enqueue("hello");
639 ScriptPromise wait = stream->wait(scriptState()); 621 ScriptPromise wait = stream->wait(scriptState());
640 EXPECT_EQ(ReadableStream::Readable, stream->state()); 622 EXPECT_EQ(ReadableStream::Readable, stream->state());
641 EXPECT_EQ(promise, stream->cancel(scriptState(), reason)); 623
624 ScriptPromise cancelResult = stream->cancel(scriptState(), reason);
625 cancelResult.then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRe jected));
626
627 EXPECT_NE(promise, cancelResult);
642 EXPECT_EQ(ReadableStream::Closed, stream->state()); 628 EXPECT_EQ(ReadableStream::Closed, stream->state());
643 629
644 EXPECT_NE(stream->wait(scriptState()), wait); 630 EXPECT_EQ(stream->wait(scriptState()), wait);
645 631
646 stream->wait(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&o nRejected)); 632 EXPECT_TRUE(onCancelFulfilled.isNull());
647 EXPECT_TRUE(onFulfilled.isNull()); 633 EXPECT_TRUE(onCancelRejected.isNull());
648 EXPECT_TRUE(onRejected.isNull());
649 634
650 isolate()->RunMicrotasks(); 635 isolate()->RunMicrotasks();
651 EXPECT_EQ("undefined", onFulfilled); 636 EXPECT_EQ("undefined", onCancelFulfilled);
652 EXPECT_TRUE(onRejected.isNull()); 637 EXPECT_TRUE(onCancelRejected.isNull());
653 } 638 }
654 639
655 TEST_F(ReadableStreamTest, ReadableArrayBufferCompileTest) 640 TEST_F(ReadableStreamTest, ReadableArrayBufferCompileTest)
656 { 641 {
657 // This test tests if ReadableStreamImpl<DOMArrayBuffer> can be instantiated . 642 // This test tests if ReadableStreamImpl<DOMArrayBuffer> can be instantiated .
658 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBuffer> >(scrip tState()->executionContext(), m_underlyingSource); 643 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBuffer> >(scrip tState()->executionContext(), m_underlyingSource);
659 } 644 }
660 645
661 } // namespace blink 646 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/streams/ReadableStream.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698