OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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)); | |
tyoshino (SeeGerritForStatus)
2014/11/11 12:43:33
can't we keep this line?
yhirano
2014/11/12 04:20:29
This is a test for "close when readable" case, and
tyoshino (SeeGerritForStatus)
2014/11/12 04:27:16
OK
| |
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()); | |
tyoshino (SeeGerritForStatus)
2014/11/11 12:43:33
and these
| |
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()); | |
tyoshino (SeeGerritForStatus)
2014/11/11 12:43:33
and these
| |
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 Loading... | |
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 |
OLD | NEW |