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

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

Issue 901013002: Revert of Introduce ExclusiveStreamReader. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « Source/core/streams/ReadableStreamImpl.h ('k') | Source/core/xmlhttprequest/XMLHttpRequest.cpp » ('j') | 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"
11 #include "bindings/core/v8/V8Binding.h" 11 #include "bindings/core/v8/V8Binding.h"
12 #include "core/dom/DOMArrayBuffer.h" 12 #include "core/dom/DOMArrayBuffer.h"
13 #include "core/dom/DOMException.h" 13 #include "core/dom/DOMException.h"
14 #include "core/dom/Document.h" 14 #include "core/dom/Document.h"
15 #include "core/dom/ExceptionCode.h" 15 #include "core/dom/ExceptionCode.h"
16 #include "core/streams/ExclusiveStreamReader.h"
17 #include "core/streams/ReadableStreamImpl.h" 16 #include "core/streams/ReadableStreamImpl.h"
18 #include "core/streams/UnderlyingSource.h" 17 #include "core/streams/UnderlyingSource.h"
19 #include "core/testing/DummyPageHolder.h" 18 #include "core/testing/DummyPageHolder.h"
20 #include <gmock/gmock.h> 19 #include <gmock/gmock.h>
21 #include <gtest/gtest.h> 20 #include <gtest/gtest.h>
22 21
23 namespace blink { 22 namespace blink {
24 23
25 using ::testing::_; 24 using ::testing::_;
26 using ::testing::InSequence; 25 using ::testing::InSequence;
27 using ::testing::Invoke; 26 using ::testing::Invoke;
28 using ::testing::Return; 27 using ::testing::Return;
29 28
30 namespace { 29 namespace {
31 30
32 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; 31 typedef ::testing::StrictMock<::testing::MockFunction<void(int)> > Checkpoint;
33 using StringStream = ReadableStreamImpl<ReadableStreamChunkTypeTraits<String>>; 32 typedef ReadableStreamImpl<ReadableStreamChunkTypeTraits<String> > StringStream;
34 33
35 class StringCapturingFunction : public ScriptFunction { 34 class StringCapturingFunction : public ScriptFunction {
36 public: 35 public:
37 static v8::Handle<v8::Function> createFunction(ScriptState* scriptState, Str ing* value) 36 static v8::Handle<v8::Function> createFunction(ScriptState* scriptState, Str ing* value)
38 { 37 {
39 StringCapturingFunction* self = new StringCapturingFunction(scriptState, value); 38 StringCapturingFunction* self = new StringCapturingFunction(scriptState, value);
40 return self->bindToV8Function(); 39 return self->bindToV8Function();
41 } 40 }
42 41
43 private: 42 private:
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 EXPECT_CALL(checkpoint, Call(0)); 165 EXPECT_CALL(checkpoint, Call(0));
167 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 166 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
168 EXPECT_CALL(checkpoint, Call(1)); 167 EXPECT_CALL(checkpoint, Call(1));
169 } 168 }
170 169
171 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource); 170 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource);
172 EXPECT_FALSE(m_exceptionState.hadException()); 171 EXPECT_FALSE(m_exceptionState.hadException());
173 EXPECT_FALSE(stream->isStarted()); 172 EXPECT_FALSE(stream->isStarted());
174 EXPECT_FALSE(stream->isDraining()); 173 EXPECT_FALSE(stream->isDraining());
175 EXPECT_FALSE(stream->isPulling()); 174 EXPECT_FALSE(stream->isPulling());
176 EXPECT_EQ(stream->stateInternal(), ReadableStream::Waiting); 175 EXPECT_EQ(stream->state(), ReadableStream::Waiting);
177 176
178 checkpoint.Call(0); 177 checkpoint.Call(0);
179 stream->didSourceStart(); 178 stream->didSourceStart();
180 checkpoint.Call(1); 179 checkpoint.Call(1);
181 180
182 EXPECT_TRUE(stream->isStarted()); 181 EXPECT_TRUE(stream->isStarted());
183 EXPECT_FALSE(stream->isDraining()); 182 EXPECT_FALSE(stream->isDraining());
184 EXPECT_TRUE(stream->isPulling()); 183 EXPECT_TRUE(stream->isPulling());
185 EXPECT_EQ(stream->stateInternal(), ReadableStream::Waiting); 184 EXPECT_EQ(stream->state(), ReadableStream::Waiting);
186 185
187 // We need to call |error| in order to make 186 // We need to call |error| in order to make
188 // ActiveDOMObject::hasPendingActivity return false. 187 // ActiveDOMObject::hasPendingActivity return false.
189 stream->error(DOMException::create(AbortError, "done")); 188 stream->error(DOMException::create(AbortError, "done"));
190 } 189 }
191 190
192 TEST_F(ReadableStreamTest, StartFail) 191 TEST_F(ReadableStreamTest, StartFail)
193 { 192 {
194 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource); 193 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource);
195 EXPECT_FALSE(m_exceptionState.hadException()); 194 EXPECT_FALSE(m_exceptionState.hadException());
196 EXPECT_FALSE(stream->isStarted()); 195 EXPECT_FALSE(stream->isStarted());
197 EXPECT_FALSE(stream->isDraining()); 196 EXPECT_FALSE(stream->isDraining());
198 EXPECT_FALSE(stream->isPulling()); 197 EXPECT_FALSE(stream->isPulling());
199 EXPECT_EQ(stream->stateInternal(), ReadableStream::Waiting); 198 EXPECT_EQ(stream->state(), ReadableStream::Waiting);
200 199
201 stream->error(DOMException::create(NotFoundError)); 200 stream->error(DOMException::create(NotFoundError));
202 201
203 EXPECT_FALSE(stream->isStarted()); 202 EXPECT_FALSE(stream->isStarted());
204 EXPECT_FALSE(stream->isDraining()); 203 EXPECT_FALSE(stream->isDraining());
205 EXPECT_FALSE(stream->isPulling()); 204 EXPECT_FALSE(stream->isPulling());
206 EXPECT_EQ(stream->stateInternal(), ReadableStream::Errored); 205 EXPECT_EQ(stream->state(), ReadableStream::Errored);
207 } 206 }
208 207
209 TEST_F(ReadableStreamTest, WaitOnWaiting) 208 TEST_F(ReadableStreamTest, WaitOnWaiting)
210 { 209 {
211 StringStream* stream = construct(); 210 StringStream* stream = construct();
212 Checkpoint checkpoint; 211 Checkpoint checkpoint;
213 212
214 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 213 EXPECT_EQ(ReadableStream::Waiting, stream->state());
215 EXPECT_TRUE(stream->isStarted()); 214 EXPECT_TRUE(stream->isStarted());
216 EXPECT_TRUE(stream->isPulling()); 215 EXPECT_TRUE(stream->isPulling());
217 216
218 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 217 ScriptPromise p = stream->ready(scriptState());
218 ScriptPromise q = stream->ready(scriptState());
219
220 EXPECT_EQ(ReadableStream::Waiting, stream->state());
221 EXPECT_EQ(q, p);
219 222
220 stream->error(DOMException::create(AbortError, "done")); 223 stream->error(DOMException::create(AbortError, "done"));
221 } 224 }
222 225
223 TEST_F(ReadableStreamTest, WaitDuringStarting) 226 TEST_F(ReadableStreamTest, WaitDuringStarting)
224 { 227 {
225 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource); 228 StringStream* stream = new StringStream(scriptState()->executionContext(), m _underlyingSource);
226 Checkpoint checkpoint; 229 Checkpoint checkpoint;
227 230
228 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 231 EXPECT_EQ(ReadableStream::Waiting, stream->state());
229 EXPECT_FALSE(stream->isStarted()); 232 EXPECT_FALSE(stream->isStarted());
230 EXPECT_FALSE(stream->isPulling()); 233 EXPECT_FALSE(stream->isPulling());
231 234
232 { 235 {
233 InSequence s; 236 InSequence s;
234 EXPECT_CALL(checkpoint, Call(0)); 237 EXPECT_CALL(checkpoint, Call(0));
235 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 238 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
236 EXPECT_CALL(checkpoint, Call(1)); 239 EXPECT_CALL(checkpoint, Call(1));
237 } 240 }
238 241
239 stream->ready(scriptState()); 242 stream->ready(scriptState());
240 checkpoint.Call(0); 243 checkpoint.Call(0);
241 stream->didSourceStart(); 244 stream->didSourceStart();
242 checkpoint.Call(1); 245 checkpoint.Call(1);
243 246
244 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 247 EXPECT_EQ(ReadableStream::Waiting, stream->state());
245 EXPECT_TRUE(stream->isStarted()); 248 EXPECT_TRUE(stream->isStarted());
246 EXPECT_TRUE(stream->isPulling()); 249 EXPECT_TRUE(stream->isPulling());
247 250
248 stream->error(DOMException::create(AbortError, "done")); 251 stream->error(DOMException::create(AbortError, "done"));
249 } 252 }
250 253
251 TEST_F(ReadableStreamTest, WaitAndError) 254 TEST_F(ReadableStreamTest, WaitAndError)
252 { 255 {
253 StringStream* stream = construct(); 256 StringStream* stream = construct();
254 String onFulfilled, onRejected; 257 String onFulfilled, onRejected;
255 258
256 ScriptPromise promise = stream->ready(scriptState()); 259 ScriptPromise promise = stream->ready(scriptState());
257 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 260 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
258 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 261 EXPECT_EQ(ReadableStream::Waiting, stream->state());
259 EXPECT_TRUE(stream->isPulling()); 262 EXPECT_TRUE(stream->isPulling());
260 stream->error(DOMException::create(NotFoundError, "hello, error")); 263 stream->error(DOMException::create(NotFoundError, "hello, error"));
261 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 264 EXPECT_EQ(ReadableStream::Errored, stream->state());
262 EXPECT_TRUE(stream->isPulling()); 265 EXPECT_TRUE(stream->isPulling());
263 EXPECT_TRUE(onFulfilled.isNull()); 266 EXPECT_TRUE(onFulfilled.isNull());
264 EXPECT_TRUE(onRejected.isNull()); 267 EXPECT_TRUE(onRejected.isNull());
265 268
266 isolate()->RunMicrotasks(); 269 isolate()->RunMicrotasks();
267 EXPECT_TRUE(onFulfilled.isNull()); 270 EXPECT_TRUE(onFulfilled.isNull());
271 EXPECT_EQ(promise, stream->ready(scriptState()));
268 EXPECT_EQ("NotFoundError: hello, error", onRejected); 272 EXPECT_EQ("NotFoundError: hello, error", onRejected);
269 } 273 }
270 274
271 TEST_F(ReadableStreamTest, ErrorAndEnqueue) 275 TEST_F(ReadableStreamTest, ErrorAndEnqueue)
272 { 276 {
273 StringStream* stream = construct(); 277 StringStream* stream = construct();
274 278
275 stream->error(DOMException::create(NotFoundError, "error")); 279 stream->error(DOMException::create(NotFoundError, "error"));
276 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 280 EXPECT_EQ(ReadableStream::Errored, stream->state());
277 281
278 bool result = stream->enqueue("hello"); 282 bool result = stream->enqueue("hello");
279 EXPECT_FALSE(result); 283 EXPECT_FALSE(result);
280 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 284 EXPECT_EQ(ReadableStream::Errored, stream->state());
281 } 285 }
282 286
283 TEST_F(ReadableStreamTest, CloseAndEnqueue) 287 TEST_F(ReadableStreamTest, CloseAndEnqueue)
284 { 288 {
285 StringStream* stream = construct(); 289 StringStream* stream = construct();
286 290
287 stream->close(); 291 stream->close();
288 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 292 EXPECT_EQ(ReadableStream::Closed, stream->state());
289 293
290 bool result = stream->enqueue("hello"); 294 bool result = stream->enqueue("hello");
291 EXPECT_FALSE(result); 295 EXPECT_FALSE(result);
292 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 296 EXPECT_EQ(ReadableStream::Closed, stream->state());
293 } 297 }
294 298
295 TEST_F(ReadableStreamTest, EnqueueAndWait) 299 TEST_F(ReadableStreamTest, EnqueueAndWait)
296 { 300 {
297 StringStream* stream = construct(); 301 StringStream* stream = construct();
298 String onFulfilled, onRejected; 302 String onFulfilled, onRejected;
299 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 303 EXPECT_EQ(ReadableStream::Waiting, stream->state());
300 304
301 bool result = stream->enqueue("hello"); 305 bool result = stream->enqueue("hello");
302 EXPECT_TRUE(result); 306 EXPECT_TRUE(result);
303 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 307 EXPECT_EQ(ReadableStream::Readable, stream->state());
304 308
305 stream->ready(scriptState()).then(createCaptor(&onFulfilled), createCaptor(& onRejected)); 309 stream->ready(scriptState()).then(createCaptor(&onFulfilled), createCaptor(& onRejected));
306 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 310 EXPECT_EQ(ReadableStream::Readable, stream->state());
307 EXPECT_FALSE(stream->isPulling()); 311 EXPECT_FALSE(stream->isPulling());
308 EXPECT_TRUE(onFulfilled.isNull()); 312 EXPECT_TRUE(onFulfilled.isNull());
309 EXPECT_TRUE(onRejected.isNull()); 313 EXPECT_TRUE(onRejected.isNull());
310 314
311 isolate()->RunMicrotasks(); 315 isolate()->RunMicrotasks();
312 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 316 EXPECT_EQ(ReadableStream::Readable, stream->state());
313 EXPECT_FALSE(stream->isPulling()); 317 EXPECT_FALSE(stream->isPulling());
314 EXPECT_EQ("undefined", onFulfilled); 318 EXPECT_EQ("undefined", onFulfilled);
315 EXPECT_TRUE(onRejected.isNull()); 319 EXPECT_TRUE(onRejected.isNull());
316 320
317 stream->error(DOMException::create(AbortError, "done")); 321 stream->error(DOMException::create(AbortError, "done"));
318 } 322 }
319 323
320 TEST_F(ReadableStreamTest, WaitAndEnqueue) 324 TEST_F(ReadableStreamTest, WaitAndEnqueue)
321 { 325 {
322 StringStream* stream = construct(); 326 StringStream* stream = construct();
323 String onFulfilled, onRejected; 327 String onFulfilled, onRejected;
324 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 328 EXPECT_EQ(ReadableStream::Waiting, stream->state());
325 329
326 stream->ready(scriptState()).then(createCaptor(&onFulfilled), createCaptor(& onRejected)); 330 stream->ready(scriptState()).then(createCaptor(&onFulfilled), createCaptor(& onRejected));
327 isolate()->RunMicrotasks(); 331 isolate()->RunMicrotasks();
328 332
329 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 333 EXPECT_EQ(ReadableStream::Waiting, stream->state());
330 EXPECT_TRUE(stream->isPulling()); 334 EXPECT_TRUE(stream->isPulling());
331 EXPECT_TRUE(onFulfilled.isNull()); 335 EXPECT_TRUE(onFulfilled.isNull());
332 EXPECT_TRUE(onRejected.isNull()); 336 EXPECT_TRUE(onRejected.isNull());
333 337
334 bool result = stream->enqueue("hello"); 338 bool result = stream->enqueue("hello");
335 EXPECT_TRUE(result); 339 EXPECT_TRUE(result);
336 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 340 EXPECT_EQ(ReadableStream::Readable, stream->state());
337 EXPECT_FALSE(stream->isPulling()); 341 EXPECT_FALSE(stream->isPulling());
338 EXPECT_TRUE(onFulfilled.isNull()); 342 EXPECT_TRUE(onFulfilled.isNull());
339 EXPECT_TRUE(onRejected.isNull()); 343 EXPECT_TRUE(onRejected.isNull());
340 344
341 isolate()->RunMicrotasks(); 345 isolate()->RunMicrotasks();
342 EXPECT_EQ("undefined", onFulfilled); 346 EXPECT_EQ("undefined", onFulfilled);
343 EXPECT_TRUE(onRejected.isNull()); 347 EXPECT_TRUE(onRejected.isNull());
344 348
345 stream->error(DOMException::create(AbortError, "done")); 349 stream->error(DOMException::create(AbortError, "done"));
346 } 350 }
347 351
348 TEST_F(ReadableStreamTest, WaitAndEnqueueAndError) 352 TEST_F(ReadableStreamTest, WaitAndEnqueueAndError)
349 { 353 {
350 StringStream* stream = construct(); 354 StringStream* stream = construct();
351 String onFulfilled, onRejected; 355 String onFulfilled, onRejected;
352 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 356 EXPECT_EQ(ReadableStream::Waiting, stream->state());
353 357
354 ScriptPromise promise = stream->ready(scriptState()); 358 ScriptPromise promise = stream->ready(scriptState());
355 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 359 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
356 isolate()->RunMicrotasks(); 360 isolate()->RunMicrotasks();
357 361
358 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 362 EXPECT_EQ(ReadableStream::Waiting, stream->state());
359 EXPECT_TRUE(stream->isPulling()); 363 EXPECT_TRUE(stream->isPulling());
360 EXPECT_TRUE(onFulfilled.isNull()); 364 EXPECT_TRUE(onFulfilled.isNull());
361 EXPECT_TRUE(onRejected.isNull()); 365 EXPECT_TRUE(onRejected.isNull());
362 366
363 bool result = stream->enqueue("hello"); 367 bool result = stream->enqueue("hello");
364 EXPECT_TRUE(result); 368 EXPECT_TRUE(result);
365 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 369 EXPECT_EQ(ReadableStream::Readable, stream->state());
366 EXPECT_FALSE(stream->isPulling()); 370 EXPECT_FALSE(stream->isPulling());
367 EXPECT_TRUE(onFulfilled.isNull()); 371 EXPECT_TRUE(onFulfilled.isNull());
368 EXPECT_TRUE(onRejected.isNull()); 372 EXPECT_TRUE(onRejected.isNull());
369 373
370 isolate()->RunMicrotasks(); 374 isolate()->RunMicrotasks();
371 EXPECT_EQ("undefined", onFulfilled); 375 EXPECT_EQ("undefined", onFulfilled);
372 EXPECT_TRUE(onRejected.isNull()); 376 EXPECT_TRUE(onRejected.isNull());
373 377
374 stream->error(DOMException::create(NotFoundError, "error")); 378 stream->error(DOMException::create(NotFoundError, "error"));
375 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 379 EXPECT_EQ(ReadableStream::Errored, stream->state());
376 380
377 EXPECT_NE(promise, stream->ready(scriptState())); 381 EXPECT_NE(promise, stream->ready(scriptState()));
378 } 382 }
379 383
380 TEST_F(ReadableStreamTest, CloseWhenWaiting) 384 TEST_F(ReadableStreamTest, CloseWhenWaiting)
381 { 385 {
382 String onWaitFulfilled, onWaitRejected; 386 String onWaitFulfilled, onWaitRejected;
383 String onClosedFulfilled, onClosedRejected; 387 String onClosedFulfilled, onClosedRejected;
384 388
385 StringStream* stream = construct(); 389 StringStream* stream = construct();
386 390
387 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 391 EXPECT_EQ(ReadableStream::Waiting, stream->state());
388 stream->ready(scriptState()).then(createCaptor(&onWaitFulfilled), createCapt or(&onWaitRejected)); 392 stream->ready(scriptState()).then(createCaptor(&onWaitFulfilled), createCapt or(&onWaitRejected));
389 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected)); 393 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected));
390 394
391 isolate()->RunMicrotasks(); 395 isolate()->RunMicrotasks();
392 EXPECT_TRUE(onWaitFulfilled.isNull()); 396 EXPECT_TRUE(onWaitFulfilled.isNull());
393 EXPECT_TRUE(onWaitRejected.isNull()); 397 EXPECT_TRUE(onWaitRejected.isNull());
394 EXPECT_TRUE(onClosedFulfilled.isNull()); 398 EXPECT_TRUE(onClosedFulfilled.isNull());
395 EXPECT_TRUE(onClosedRejected.isNull()); 399 EXPECT_TRUE(onClosedRejected.isNull());
396 400
397 stream->close(); 401 stream->close();
398 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 402 EXPECT_EQ(ReadableStream::Closed, stream->state());
399 isolate()->RunMicrotasks(); 403 isolate()->RunMicrotasks();
400 EXPECT_EQ("undefined", onWaitFulfilled); 404 EXPECT_EQ("undefined", onWaitFulfilled);
401 EXPECT_TRUE(onWaitRejected.isNull()); 405 EXPECT_TRUE(onWaitRejected.isNull());
402 EXPECT_EQ("undefined", onClosedFulfilled); 406 EXPECT_EQ("undefined", onClosedFulfilled);
403 EXPECT_TRUE(onClosedRejected.isNull()); 407 EXPECT_TRUE(onClosedRejected.isNull());
404 } 408 }
405 409
406 TEST_F(ReadableStreamTest, CloseWhenErrored) 410 TEST_F(ReadableStreamTest, CloseWhenErrored)
407 { 411 {
408 String onFulfilled, onRejected; 412 String onFulfilled, onRejected;
409 StringStream* stream = construct(); 413 StringStream* stream = construct();
410 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 414 EXPECT_EQ(ReadableStream::Waiting, stream->state());
411 stream->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor( &onRejected)); 415 stream->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor( &onRejected));
412 416
413 stream->error(DOMException::create(NotFoundError, "error")); 417 stream->error(DOMException::create(NotFoundError, "error"));
414 stream->close(); 418 stream->close();
415 419
416 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 420 EXPECT_EQ(ReadableStream::Errored, stream->state());
417 isolate()->RunMicrotasks(); 421 isolate()->RunMicrotasks();
418 422
419 EXPECT_TRUE(onFulfilled.isNull()); 423 EXPECT_TRUE(onFulfilled.isNull());
420 EXPECT_EQ("NotFoundError: error", onRejected); 424 EXPECT_EQ("NotFoundError: error", onRejected);
421 } 425 }
422 426
423 TEST_F(ReadableStreamTest, ReadWhenWaiting) 427 TEST_F(ReadableStreamTest, ReadWhenWaiting)
424 { 428 {
425 StringStream* stream = construct(); 429 StringStream* stream = construct();
426 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 430 EXPECT_EQ(ReadableStream::Waiting, stream->state());
427 EXPECT_FALSE(m_exceptionState.hadException()); 431 EXPECT_FALSE(m_exceptionState.hadException());
428 432
429 stream->read(scriptState(), m_exceptionState); 433 stream->read(scriptState(), m_exceptionState);
430 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 434 EXPECT_EQ(ReadableStream::Waiting, stream->state());
431 EXPECT_TRUE(m_exceptionState.hadException()); 435 EXPECT_TRUE(m_exceptionState.hadException());
432 EXPECT_EQ(V8TypeError, m_exceptionState.code()); 436 EXPECT_EQ(V8TypeError, m_exceptionState.code());
433 EXPECT_EQ("read is called while state is waiting", m_exceptionState.message( )); 437 EXPECT_EQ("read is called while state is waiting", m_exceptionState.message( ));
434 438
435 stream->error(DOMException::create(AbortError, "done")); 439 stream->error(DOMException::create(AbortError, "done"));
436 } 440 }
437 441
438 TEST_F(ReadableStreamTest, ReadWhenClosed) 442 TEST_F(ReadableStreamTest, ReadWhenClosed)
439 { 443 {
440 StringStream* stream = construct(); 444 StringStream* stream = construct();
441 stream->close(); 445 stream->close();
442 446
443 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 447 EXPECT_EQ(ReadableStream::Closed, stream->state());
444 EXPECT_FALSE(m_exceptionState.hadException()); 448 EXPECT_FALSE(m_exceptionState.hadException());
445 449
446 stream->read(scriptState(), m_exceptionState); 450 stream->read(scriptState(), m_exceptionState);
447 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 451 EXPECT_EQ(ReadableStream::Closed, stream->state());
448 EXPECT_TRUE(m_exceptionState.hadException()); 452 EXPECT_TRUE(m_exceptionState.hadException());
449 EXPECT_EQ(V8TypeError, m_exceptionState.code()); 453 EXPECT_EQ(V8TypeError, m_exceptionState.code());
450 EXPECT_EQ("read is called while state is closed", m_exceptionState.message() ); 454 EXPECT_EQ("read is called while state is closed", m_exceptionState.message() );
451 } 455 }
452 456
453 TEST_F(ReadableStreamTest, ReadWhenErrored) 457 TEST_F(ReadableStreamTest, ReadWhenErrored)
454 { 458 {
455 // DOMException values specified in the spec are different from enum values 459 // DOMException values specified in the spec are different from enum values
456 // defined in ExceptionCode.h. 460 // defined in ExceptionCode.h.
457 const int notFoundExceptionCode = 8; 461 const int notFoundExceptionCode = 8;
458 StringStream* stream = construct(); 462 StringStream* stream = construct();
459 stream->error(DOMException::create(NotFoundError, "error")); 463 stream->error(DOMException::create(NotFoundError, "error"));
460 464
461 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 465 EXPECT_EQ(ReadableStream::Errored, stream->state());
462 EXPECT_FALSE(m_exceptionState.hadException()); 466 EXPECT_FALSE(m_exceptionState.hadException());
463 467
464 stream->read(scriptState(), m_exceptionState); 468 stream->read(scriptState(), m_exceptionState);
465 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 469 EXPECT_EQ(ReadableStream::Errored, stream->state());
466 EXPECT_TRUE(m_exceptionState.hadException()); 470 EXPECT_TRUE(m_exceptionState.hadException());
467 EXPECT_EQ(notFoundExceptionCode, m_exceptionState.code()); 471 EXPECT_EQ(notFoundExceptionCode, m_exceptionState.code());
468 EXPECT_EQ("error", m_exceptionState.message()); 472 EXPECT_EQ("error", m_exceptionState.message());
469 } 473 }
470 474
471 TEST_F(ReadableStreamTest, EnqueuedAndRead) 475 TEST_F(ReadableStreamTest, EnqueuedAndRead)
472 { 476 {
473 StringStream* stream = construct(); 477 StringStream* stream = construct();
474 String onFulfilled, onRejected; 478 String onFulfilled, onRejected;
475 Checkpoint checkpoint; 479 Checkpoint checkpoint;
476 480
477 { 481 {
478 InSequence s; 482 InSequence s;
479 EXPECT_CALL(checkpoint, Call(0)); 483 EXPECT_CALL(checkpoint, Call(0));
480 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 484 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
481 EXPECT_CALL(checkpoint, Call(1)); 485 EXPECT_CALL(checkpoint, Call(1));
482 } 486 }
483 487
484 stream->enqueue("hello"); 488 stream->enqueue("hello");
485 ScriptPromise promise = stream->ready(scriptState()); 489 ScriptPromise promise = stream->ready(scriptState());
486 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 490 EXPECT_EQ(ReadableStream::Readable, stream->state());
487 EXPECT_FALSE(stream->isPulling()); 491 EXPECT_FALSE(stream->isPulling());
488 492
489 checkpoint.Call(0); 493 checkpoint.Call(0);
490 String chunk; 494 String chunk;
491 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 495 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
492 checkpoint.Call(1); 496 checkpoint.Call(1);
493 EXPECT_FALSE(m_exceptionState.hadException()); 497 EXPECT_FALSE(m_exceptionState.hadException());
494 EXPECT_EQ("hello", chunk); 498 EXPECT_EQ("hello", chunk);
495 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 499 EXPECT_EQ(ReadableStream::Waiting, stream->state());
496 EXPECT_TRUE(stream->isPulling()); 500 EXPECT_TRUE(stream->isPulling());
497 EXPECT_FALSE(stream->isDraining()); 501 EXPECT_FALSE(stream->isDraining());
498 502
499 ScriptPromise newPromise = stream->ready(scriptState()); 503 ScriptPromise newPromise = stream->ready(scriptState());
500 newPromise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 504 newPromise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
501 isolate()->RunMicrotasks(); 505 isolate()->RunMicrotasks();
502 EXPECT_NE(promise, newPromise); 506 EXPECT_NE(promise, newPromise);
503 EXPECT_TRUE(onFulfilled.isNull()); 507 EXPECT_TRUE(onFulfilled.isNull());
504 EXPECT_TRUE(onRejected.isNull()); 508 EXPECT_TRUE(onRejected.isNull());
505 509
506 stream->error(DOMException::create(AbortError, "done")); 510 stream->error(DOMException::create(AbortError, "done"));
507 isolate()->RunMicrotasks(); 511 isolate()->RunMicrotasks();
508 } 512 }
509 513
510 TEST_F(ReadableStreamTest, EnqueueTwiceAndRead) 514 TEST_F(ReadableStreamTest, EnqueueTwiceAndRead)
511 { 515 {
512 StringStream* stream = construct(); 516 StringStream* stream = construct();
513 Checkpoint checkpoint; 517 Checkpoint checkpoint;
514 518
515 { 519 {
516 InSequence s; 520 InSequence s;
517 EXPECT_CALL(checkpoint, Call(0)); 521 EXPECT_CALL(checkpoint, Call(0));
518 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 522 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
519 EXPECT_CALL(checkpoint, Call(1)); 523 EXPECT_CALL(checkpoint, Call(1));
520 } 524 }
521 525
522 EXPECT_TRUE(stream->enqueue("hello")); 526 EXPECT_TRUE(stream->enqueue("hello"));
523 EXPECT_TRUE(stream->enqueue("bye")); 527 EXPECT_TRUE(stream->enqueue("bye"));
524 ScriptPromise promise = stream->ready(scriptState()); 528 ScriptPromise promise = stream->ready(scriptState());
525 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 529 EXPECT_EQ(ReadableStream::Readable, stream->state());
526 EXPECT_FALSE(stream->isPulling()); 530 EXPECT_FALSE(stream->isPulling());
527 531
528 String chunk; 532 String chunk;
529 checkpoint.Call(0); 533 checkpoint.Call(0);
530 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 534 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
531 checkpoint.Call(1); 535 checkpoint.Call(1);
532 EXPECT_FALSE(m_exceptionState.hadException()); 536 EXPECT_FALSE(m_exceptionState.hadException());
533 EXPECT_EQ("hello", chunk); 537 EXPECT_EQ("hello", chunk);
534 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 538 EXPECT_EQ(ReadableStream::Readable, stream->state());
535 EXPECT_TRUE(stream->isPulling()); 539 EXPECT_TRUE(stream->isPulling());
536 EXPECT_FALSE(stream->isDraining()); 540 EXPECT_FALSE(stream->isDraining());
537 541
538 ScriptPromise newPromise = stream->ready(scriptState()); 542 ScriptPromise newPromise = stream->ready(scriptState());
539 EXPECT_EQ(promise, newPromise); 543 EXPECT_EQ(promise, newPromise);
540 544
541 stream->error(DOMException::create(AbortError, "done")); 545 stream->error(DOMException::create(AbortError, "done"));
542 } 546 }
543 547
544 TEST_F(ReadableStreamTest, ReadQueue) 548 TEST_F(ReadableStreamTest, InternalRead)
545 { 549 {
546 StringStream* stream = construct(); 550 StringStream* stream = construct();
547 Checkpoint checkpoint; 551 Checkpoint checkpoint;
548 552
549 { 553 {
550 InSequence s; 554 InSequence s;
551 EXPECT_CALL(checkpoint, Call(0)); 555 EXPECT_CALL(checkpoint, Call(0));
552 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 556 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
553 EXPECT_CALL(checkpoint, Call(1)); 557 EXPECT_CALL(checkpoint, Call(1));
554 } 558 }
555 559
556 Deque<std::pair<String, size_t>> queue; 560 Deque<std::pair<String, size_t>> queue;
557 561
558 EXPECT_TRUE(stream->enqueue("hello")); 562 EXPECT_TRUE(stream->enqueue("hello"));
559 EXPECT_TRUE(stream->enqueue("bye")); 563 EXPECT_TRUE(stream->enqueue("bye"));
560 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 564 EXPECT_EQ(ReadableStream::Readable, stream->state());
561 EXPECT_FALSE(stream->isPulling()); 565 EXPECT_FALSE(stream->isPulling());
562 566
563 String chunk; 567 String chunk;
564 checkpoint.Call(0); 568 checkpoint.Call(0);
565 stream->readInternal(queue); 569 stream->read(queue);
566 checkpoint.Call(1); 570 checkpoint.Call(1);
567 ASSERT_EQ(2u, queue.size()); 571 ASSERT_EQ(2u, queue.size());
568 572
569 EXPECT_EQ(std::make_pair(String("hello"), static_cast<size_t>(5)), queue[0]) ; 573 EXPECT_EQ(std::make_pair(String("hello"), static_cast<size_t>(5)), queue[0]) ;
570 EXPECT_EQ(std::make_pair(String("bye"), static_cast<size_t>(3)), queue[1]); 574 EXPECT_EQ(std::make_pair(String("bye"), static_cast<size_t>(3)), queue[1]);
571 575
572 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 576 EXPECT_EQ(ReadableStream::Waiting, stream->state());
573 EXPECT_TRUE(stream->isPulling()); 577 EXPECT_TRUE(stream->isPulling());
574 EXPECT_FALSE(stream->isDraining()); 578 EXPECT_FALSE(stream->isDraining());
575 } 579 }
576 580
577 TEST_F(ReadableStreamTest, CloseWhenReadable) 581 TEST_F(ReadableStreamTest, CloseWhenReadable)
578 { 582 {
579 StringStream* stream = construct(); 583 StringStream* stream = construct();
580 String onClosedFulfilled, onClosedRejected; 584 String onClosedFulfilled, onClosedRejected;
581 585
582 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected)); 586 stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC aptor(&onClosedRejected));
583 EXPECT_TRUE(stream->enqueue("hello")); 587 EXPECT_TRUE(stream->enqueue("hello"));
584 EXPECT_TRUE(stream->enqueue("bye")); 588 EXPECT_TRUE(stream->enqueue("bye"));
585 stream->close(); 589 stream->close();
586 EXPECT_FALSE(stream->enqueue("should be ignored")); 590 EXPECT_FALSE(stream->enqueue("should be ignored"));
587 591
588 ScriptPromise promise = stream->ready(scriptState()); 592 ScriptPromise promise = stream->ready(scriptState());
589 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 593 EXPECT_EQ(ReadableStream::Readable, stream->state());
590 EXPECT_FALSE(stream->isPulling()); 594 EXPECT_FALSE(stream->isPulling());
591 EXPECT_TRUE(stream->isDraining()); 595 EXPECT_TRUE(stream->isDraining());
592 596
593 String chunk; 597 String chunk;
594 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 598 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
595 EXPECT_EQ("hello", chunk); 599 EXPECT_EQ("hello", chunk);
596 EXPECT_EQ(promise, stream->ready(scriptState())); 600 EXPECT_EQ(promise, stream->ready(scriptState()));
597 601
598 isolate()->RunMicrotasks(); 602 isolate()->RunMicrotasks();
599 603
600 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 604 EXPECT_EQ(ReadableStream::Readable, stream->state());
601 EXPECT_FALSE(stream->isPulling()); 605 EXPECT_FALSE(stream->isPulling());
602 EXPECT_TRUE(stream->isDraining()); 606 EXPECT_TRUE(stream->isDraining());
603 607
604 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 608 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
605 EXPECT_EQ("bye", chunk); 609 EXPECT_EQ("bye", chunk);
606 EXPECT_FALSE(m_exceptionState.hadException()); 610 EXPECT_FALSE(m_exceptionState.hadException());
607 611
608 EXPECT_EQ(promise, stream->ready(scriptState())); 612 EXPECT_EQ(promise, stream->ready(scriptState()));
609 613
610 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 614 EXPECT_EQ(ReadableStream::Closed, stream->state());
611 EXPECT_FALSE(stream->isPulling()); 615 EXPECT_FALSE(stream->isPulling());
612 EXPECT_TRUE(stream->isDraining()); 616 EXPECT_TRUE(stream->isDraining());
613 617
614 EXPECT_TRUE(onClosedFulfilled.isNull()); 618 EXPECT_TRUE(onClosedFulfilled.isNull());
615 EXPECT_TRUE(onClosedRejected.isNull()); 619 EXPECT_TRUE(onClosedRejected.isNull());
616 620
617 isolate()->RunMicrotasks(); 621 isolate()->RunMicrotasks();
618 EXPECT_EQ("undefined", onClosedFulfilled); 622 EXPECT_EQ("undefined", onClosedFulfilled);
619 EXPECT_TRUE(onClosedRejected.isNull()); 623 EXPECT_TRUE(onClosedRejected.isNull());
620 } 624 }
621 625
622 TEST_F(ReadableStreamTest, CancelWhenClosed) 626 TEST_F(ReadableStreamTest, CancelWhenClosed)
623 { 627 {
624 StringStream* stream = construct(); 628 StringStream* stream = construct();
625 String onFulfilled, onRejected; 629 String onFulfilled, onRejected;
626 stream->close(); 630 stream->close();
627 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 631 EXPECT_EQ(ReadableStream::Closed, stream->state());
628 632
629 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue()); 633 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue());
630 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 634 EXPECT_EQ(ReadableStream::Closed, stream->state());
631 635
632 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 636 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
633 EXPECT_TRUE(onFulfilled.isNull()); 637 EXPECT_TRUE(onFulfilled.isNull());
634 EXPECT_TRUE(onRejected.isNull()); 638 EXPECT_TRUE(onRejected.isNull());
635 639
636 isolate()->RunMicrotasks(); 640 isolate()->RunMicrotasks();
637 EXPECT_EQ("undefined", onFulfilled); 641 EXPECT_EQ("undefined", onFulfilled);
638 EXPECT_TRUE(onRejected.isNull()); 642 EXPECT_TRUE(onRejected.isNull());
639 } 643 }
640 644
641 TEST_F(ReadableStreamTest, CancelWhenErrored) 645 TEST_F(ReadableStreamTest, CancelWhenErrored)
642 { 646 {
643 StringStream* stream = construct(); 647 StringStream* stream = construct();
644 String onFulfilled, onRejected; 648 String onFulfilled, onRejected;
645 stream->error(DOMException::create(NotFoundError, "error")); 649 stream->error(DOMException::create(NotFoundError, "error"));
646 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 650 EXPECT_EQ(ReadableStream::Errored, stream->state());
647 651
648 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue()); 652 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue());
649 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 653 EXPECT_EQ(ReadableStream::Errored, stream->state());
650 654
651 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 655 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
652 EXPECT_TRUE(onFulfilled.isNull()); 656 EXPECT_TRUE(onFulfilled.isNull());
653 EXPECT_TRUE(onRejected.isNull()); 657 EXPECT_TRUE(onRejected.isNull());
654 658
655 isolate()->RunMicrotasks(); 659 isolate()->RunMicrotasks();
656 EXPECT_TRUE(onFulfilled.isNull()); 660 EXPECT_TRUE(onFulfilled.isNull());
657 EXPECT_EQ("NotFoundError: error", onRejected); 661 EXPECT_EQ("NotFoundError: error", onRejected);
658 } 662 }
659 663
660 TEST_F(ReadableStreamTest, CancelWhenWaiting) 664 TEST_F(ReadableStreamTest, CancelWhenWaiting)
661 { 665 {
662 StringStream* stream = construct(); 666 StringStream* stream = construct();
663 String onFulfilled, onRejected; 667 String onFulfilled, onRejected;
664 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason ")); 668 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason "));
665 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello")); 669 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello"));
666 670
667 { 671 {
668 InSequence s; 672 InSequence s;
669 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise)); 673 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise));
670 } 674 }
671 675
672 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 676 EXPECT_EQ(ReadableStream::Waiting, stream->state());
673 ScriptPromise ready = stream->ready(scriptState()); 677 ScriptPromise ready = stream->ready(scriptState());
674 EXPECT_NE(promise, stream->cancel(scriptState(), reason)); 678 EXPECT_NE(promise, stream->cancel(scriptState(), reason));
675 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 679 EXPECT_EQ(ReadableStream::Closed, stream->state());
680 EXPECT_EQ(stream->ready(scriptState()), ready);
676 681
677 ready.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 682 ready.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
678 EXPECT_TRUE(onFulfilled.isNull()); 683 EXPECT_TRUE(onFulfilled.isNull());
679 EXPECT_TRUE(onRejected.isNull()); 684 EXPECT_TRUE(onRejected.isNull());
680 685
681 isolate()->RunMicrotasks(); 686 isolate()->RunMicrotasks();
682 EXPECT_EQ("undefined", onFulfilled); 687 EXPECT_EQ("undefined", onFulfilled);
683 EXPECT_TRUE(onRejected.isNull()); 688 EXPECT_TRUE(onRejected.isNull());
684 } 689 }
685 690
686 TEST_F(ReadableStreamTest, CancelWhenReadable) 691 TEST_F(ReadableStreamTest, CancelWhenReadable)
687 { 692 {
688 StringStream* stream = construct(); 693 StringStream* stream = construct();
689 String onFulfilled, onRejected; 694 String onFulfilled, onRejected;
690 String onCancelFulfilled, onCancelRejected; 695 String onCancelFulfilled, onCancelRejected;
691 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason ")); 696 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason "));
692 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello")); 697 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello"));
693 698
694 { 699 {
695 InSequence s; 700 InSequence s;
696 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise)); 701 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise));
697 } 702 }
698 703
699 stream->enqueue("hello"); 704 stream->enqueue("hello");
700 ScriptPromise ready = stream->ready(scriptState()); 705 ScriptPromise ready = stream->ready(scriptState());
701 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 706 EXPECT_EQ(ReadableStream::Readable, stream->state());
702 707
703 ScriptPromise cancelResult = stream->cancel(scriptState(), reason); 708 ScriptPromise cancelResult = stream->cancel(scriptState(), reason);
704 cancelResult.then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRe jected)); 709 cancelResult.then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRe jected));
705 710
706 EXPECT_NE(promise, cancelResult); 711 EXPECT_NE(promise, cancelResult);
707 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 712 EXPECT_EQ(ReadableStream::Closed, stream->state());
708 713
709 EXPECT_EQ(stream->ready(scriptState()), ready); 714 EXPECT_EQ(stream->ready(scriptState()), ready);
710 715
711 EXPECT_TRUE(onCancelFulfilled.isNull()); 716 EXPECT_TRUE(onCancelFulfilled.isNull());
712 EXPECT_TRUE(onCancelRejected.isNull()); 717 EXPECT_TRUE(onCancelRejected.isNull());
713 718
714 isolate()->RunMicrotasks(); 719 isolate()->RunMicrotasks();
715 EXPECT_EQ("undefined", onCancelFulfilled); 720 EXPECT_EQ("undefined", onCancelFulfilled);
716 EXPECT_TRUE(onCancelRejected.isNull()); 721 EXPECT_TRUE(onCancelRejected.isNull());
717 } 722 }
718 723
719 TEST_F(ReadableStreamTest, ReadableArrayBufferCompileTest) 724 TEST_F(ReadableStreamTest, ReadableArrayBufferCompileTest)
720 { 725 {
721 // This test tests if ReadableStreamImpl<DOMArrayBuffer> can be 726 // This test tests if ReadableStreamImpl<DOMArrayBuffer> can be
722 // instantiated. 727 // instantiated.
723 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBuffer>>(script State()->executionContext(), m_underlyingSource); 728 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBuffer>>(script State()->executionContext(), m_underlyingSource);
724 } 729 }
725 730
726 TEST_F(ReadableStreamTest, BackpressureOnEnqueueing) 731 TEST_F(ReadableStreamTest, BackpressureOnEnqueueing)
727 { 732 {
728 auto strategy = MockStrategy::create(); 733 auto strategy = MockStrategy::create();
729 Checkpoint checkpoint; 734 Checkpoint checkpoint;
730 735
731 StringStream* stream = construct(strategy); 736 StringStream* stream = construct(strategy);
732 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 737 EXPECT_EQ(ReadableStream::Waiting, stream->state());
733 738
734 { 739 {
735 InSequence s; 740 InSequence s;
736 EXPECT_CALL(checkpoint, Call(0)); 741 EXPECT_CALL(checkpoint, Call(0));
737 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(1) ); 742 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(1) );
738 EXPECT_CALL(*strategy, shouldApplyBackpressure(1, stream)).WillOnce(Retu rn(false)); 743 EXPECT_CALL(*strategy, shouldApplyBackpressure(1, stream)).WillOnce(Retu rn(false));
739 EXPECT_CALL(checkpoint, Call(1)); 744 EXPECT_CALL(checkpoint, Call(1));
740 EXPECT_CALL(checkpoint, Call(2)); 745 EXPECT_CALL(checkpoint, Call(2));
741 EXPECT_CALL(*strategy, size(String("world"), stream)).WillOnce(Return(2) ); 746 EXPECT_CALL(*strategy, size(String("world"), stream)).WillOnce(Return(2) );
742 EXPECT_CALL(*strategy, shouldApplyBackpressure(3, stream)).WillOnce(Retu rn(true)); 747 EXPECT_CALL(*strategy, shouldApplyBackpressure(3, stream)).WillOnce(Retu rn(true));
(...skipping 11 matching lines...) Expand all
754 759
755 stream->error(DOMException::create(AbortError, "done")); 760 stream->error(DOMException::create(AbortError, "done"));
756 } 761 }
757 762
758 TEST_F(ReadableStreamTest, BackpressureOnReading) 763 TEST_F(ReadableStreamTest, BackpressureOnReading)
759 { 764 {
760 auto strategy = MockStrategy::create(); 765 auto strategy = MockStrategy::create();
761 Checkpoint checkpoint; 766 Checkpoint checkpoint;
762 767
763 StringStream* stream = construct(strategy); 768 StringStream* stream = construct(strategy);
764 EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal()); 769 EXPECT_EQ(ReadableStream::Waiting, stream->state());
765 770
766 { 771 {
767 InSequence s; 772 InSequence s;
768 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(2) ); 773 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(2) );
769 EXPECT_CALL(*strategy, shouldApplyBackpressure(2, stream)).WillOnce(Retu rn(false)); 774 EXPECT_CALL(*strategy, shouldApplyBackpressure(2, stream)).WillOnce(Retu rn(false));
770 EXPECT_CALL(*strategy, size(String("world"), stream)).WillOnce(Return(3) ); 775 EXPECT_CALL(*strategy, size(String("world"), stream)).WillOnce(Return(3) );
771 EXPECT_CALL(*strategy, shouldApplyBackpressure(5, stream)).WillOnce(Retu rn(false)); 776 EXPECT_CALL(*strategy, shouldApplyBackpressure(5, stream)).WillOnce(Retu rn(false));
772 777
773 EXPECT_CALL(checkpoint, Call(0)); 778 EXPECT_CALL(checkpoint, Call(0));
774 EXPECT_CALL(*strategy, shouldApplyBackpressure(3, stream)).WillOnce(Retu rn(false)); 779 EXPECT_CALL(*strategy, shouldApplyBackpressure(3, stream)).WillOnce(Retu rn(false));
(...skipping 24 matching lines...) Expand all
799 stream->enqueue("foo"); 804 stream->enqueue("foo");
800 stream->enqueue("bar"); 805 stream->enqueue("bar");
801 checkpoint.Call(3); 806 checkpoint.Call(3);
802 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); 807 EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
803 EXPECT_EQ("foo", chunk); 808 EXPECT_EQ("foo", chunk);
804 checkpoint.Call(4); 809 checkpoint.Call(4);
805 810
806 stream->error(DOMException::create(AbortError, "done")); 811 stream->error(DOMException::create(AbortError, "done"));
807 } 812 }
808 813
809 // Note: Detailed tests are on ExclusiveStreamReaderTest.
810 TEST_F(ReadableStreamTest, ExclusiveStreamReader)
811 {
812 StringStream* stream = construct();
813 ExclusiveStreamReader* reader = stream->getReader(m_exceptionState);
814
815 ASSERT_TRUE(reader);
816 EXPECT_FALSE(m_exceptionState.hadException());
817 EXPECT_TRUE(reader->isActive());
818 EXPECT_TRUE(stream->isLockedTo(reader));
819
820 ExclusiveStreamReader* another = stream->getReader(m_exceptionState);
821 ASSERT_EQ(nullptr, another);
822 EXPECT_TRUE(m_exceptionState.hadException());
823 EXPECT_TRUE(reader->isActive());
824 EXPECT_TRUE(stream->isLockedTo(reader));
825 }
826
827 } // namespace blink 814 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/streams/ReadableStreamImpl.h ('k') | Source/core/xmlhttprequest/XMLHttpRequest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698