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

Side by Side Diff: third_party/WebKit/Source/core/streams/ReadableStreamReaderTest.cpp

Issue 1743763004: Use v8::MicrotasksScope internally in V8RecursionScope. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v8rs-2-endofscope
Patch Set: v8_helpers Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "core/streams/ReadableStreamReader.h" 5 #include "core/streams/ReadableStreamReader.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptState.h" 8 #include "bindings/core/v8/ScriptState.h"
9 #include "bindings/core/v8/ToV8.h" 9 #include "bindings/core/v8/ToV8.h"
10 #include "bindings/core/v8/V8ThrowException.h" 10 #include "bindings/core/v8/V8ThrowException.h"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 EXPECT_TRUE(reader->isActive()); 172 EXPECT_TRUE(reader->isActive());
173 173
174 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt or(&onRejected)); 174 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt or(&onRejected));
175 reader->releaseLock(exceptionState); 175 reader->releaseLock(exceptionState);
176 EXPECT_FALSE(reader->isActive()); 176 EXPECT_FALSE(reader->isActive());
177 EXPECT_FALSE(exceptionState.hadException()); 177 EXPECT_FALSE(exceptionState.hadException());
178 178
179 EXPECT_TRUE(onFulfilled.isNull()); 179 EXPECT_TRUE(onFulfilled.isNull());
180 EXPECT_TRUE(onRejected.isNull()); 180 EXPECT_TRUE(onRejected.isNull());
181 181
182 isolate()->RunMicrotasks(); 182 v8::MicrotasksScope::PerformCheckpoint(isolate());
183 EXPECT_TRUE(onFulfilled.isNull()); 183 EXPECT_TRUE(onFulfilled.isNull());
184 EXPECT_EQ("AbortError: the reader is already released", onRejected); 184 EXPECT_EQ("AbortError: the reader is already released", onRejected);
185 185
186 ReadableStreamReader* another = new ReadableStreamReader(getExecutionContext (), m_stream); 186 ReadableStreamReader* another = new ReadableStreamReader(getExecutionContext (), m_stream);
187 EXPECT_TRUE(another->isActive()); 187 EXPECT_TRUE(another->isActive());
188 EXPECT_FALSE(reader->isActive()); 188 EXPECT_FALSE(reader->isActive());
189 reader->releaseLock(exceptionState); 189 reader->releaseLock(exceptionState);
190 EXPECT_TRUE(another->isActive()); 190 EXPECT_TRUE(another->isActive());
191 EXPECT_FALSE(reader->isActive()); 191 EXPECT_FALSE(reader->isActive());
192 EXPECT_FALSE(exceptionState.hadException()); 192 EXPECT_FALSE(exceptionState.hadException());
193 } 193 }
194 194
195 TEST_F(ReadableStreamReaderTest, ReadAfterRelease) 195 TEST_F(ReadableStreamReaderTest, ReadAfterRelease)
196 { 196 {
197 ScriptState::Scope scope(getScriptState()); 197 ScriptState::Scope scope(getScriptState());
198 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 198 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
199 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 199 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
200 EXPECT_TRUE(reader->isActive()); 200 EXPECT_TRUE(reader->isActive());
201 reader->releaseLock(exceptionState); 201 reader->releaseLock(exceptionState);
202 EXPECT_FALSE(exceptionState.hadException()); 202 EXPECT_FALSE(exceptionState.hadException());
203 EXPECT_FALSE(reader->isActive()); 203 EXPECT_FALSE(reader->isActive());
204 204
205 ReadResult result; 205 ReadResult result;
206 String onRejected; 206 String onRejected;
207 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected)); 207 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected));
208 208
209 EXPECT_FALSE(result.isSet); 209 EXPECT_FALSE(result.isSet);
210 EXPECT_TRUE(onRejected.isNull()); 210 EXPECT_TRUE(onRejected.isNull());
211 isolate()->RunMicrotasks(); 211 v8::MicrotasksScope::PerformCheckpoint(isolate());
212 212
213 EXPECT_FALSE(result.isSet); 213 EXPECT_FALSE(result.isSet);
214 EXPECT_EQ("TypeError: the reader is already released", onRejected); 214 EXPECT_EQ("TypeError: the reader is already released", onRejected);
215 EXPECT_FALSE(exceptionState.hadException()); 215 EXPECT_FALSE(exceptionState.hadException());
216 } 216 }
217 217
218 TEST_F(ReadableStreamReaderTest, ReleaseShouldFailWhenCalledWhileReading) 218 TEST_F(ReadableStreamReaderTest, ReleaseShouldFailWhenCalledWhileReading)
219 { 219 {
220 ScriptState::Scope scope(getScriptState()); 220 ScriptState::Scope scope(getScriptState());
221 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 221 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
(...skipping 21 matching lines...) Expand all
243 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 243 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
244 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 244 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
245 245
246 ReadResult result; 246 ReadResult result;
247 String onRejected; 247 String onRejected;
248 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected)); 248 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected));
249 249
250 EXPECT_FALSE(result.isSet); 250 EXPECT_FALSE(result.isSet);
251 EXPECT_TRUE(onRejected.isNull()); 251 EXPECT_TRUE(onRejected.isNull());
252 252
253 isolate()->RunMicrotasks(); 253 v8::MicrotasksScope::PerformCheckpoint(isolate());
254 254
255 EXPECT_TRUE(result.isSet); 255 EXPECT_TRUE(result.isSet);
256 EXPECT_FALSE(result.isDone); 256 EXPECT_FALSE(result.isDone);
257 EXPECT_EQ("hello", result.valueString); 257 EXPECT_EQ("hello", result.valueString);
258 EXPECT_TRUE(onRejected.isNull()); 258 EXPECT_TRUE(onRejected.isNull());
259 259
260 ReadResult result2; 260 ReadResult result2;
261 String onRejected2; 261 String onRejected2;
262 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2)); 262 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2));
263 263
264 EXPECT_FALSE(result2.isSet); 264 EXPECT_FALSE(result2.isSet);
265 EXPECT_TRUE(onRejected2.isNull()); 265 EXPECT_TRUE(onRejected2.isNull());
266 266
267 isolate()->RunMicrotasks(); 267 v8::MicrotasksScope::PerformCheckpoint(isolate());
268 268
269 EXPECT_TRUE(result2.isSet); 269 EXPECT_TRUE(result2.isSet);
270 EXPECT_FALSE(result2.isDone); 270 EXPECT_FALSE(result2.isDone);
271 EXPECT_EQ("world", result2.valueString); 271 EXPECT_EQ("world", result2.valueString);
272 EXPECT_TRUE(onRejected2.isNull()); 272 EXPECT_TRUE(onRejected2.isNull());
273 EXPECT_FALSE(exceptionState.hadException()); 273 EXPECT_FALSE(exceptionState.hadException());
274 } 274 }
275 275
276 TEST_F(ReadableStreamReaderTest, ReadThenEnqueue) 276 TEST_F(ReadableStreamReaderTest, ReadThenEnqueue)
277 { 277 {
278 ScriptState::Scope scope(getScriptState()); 278 ScriptState::Scope scope(getScriptState());
279 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 279 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
280 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 280 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
281 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 281 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
282 282
283 ReadResult result, result2; 283 ReadResult result, result2;
284 String onRejected, onRejected2; 284 String onRejected, onRejected2;
285 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected)); 285 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected));
286 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2)); 286 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2));
287 287
288 EXPECT_FALSE(result.isSet); 288 EXPECT_FALSE(result.isSet);
289 EXPECT_TRUE(onRejected.isNull()); 289 EXPECT_TRUE(onRejected.isNull());
290 EXPECT_FALSE(result2.isSet); 290 EXPECT_FALSE(result2.isSet);
291 EXPECT_TRUE(onRejected2.isNull()); 291 EXPECT_TRUE(onRejected2.isNull());
292 292
293 isolate()->RunMicrotasks(); 293 v8::MicrotasksScope::PerformCheckpoint(isolate());
294 294
295 EXPECT_FALSE(result.isSet); 295 EXPECT_FALSE(result.isSet);
296 EXPECT_TRUE(onRejected.isNull()); 296 EXPECT_TRUE(onRejected.isNull());
297 EXPECT_FALSE(result2.isSet); 297 EXPECT_FALSE(result2.isSet);
298 EXPECT_TRUE(onRejected2.isNull()); 298 EXPECT_TRUE(onRejected2.isNull());
299 299
300 m_stream->enqueue("hello"); 300 m_stream->enqueue("hello");
301 isolate()->RunMicrotasks(); 301 v8::MicrotasksScope::PerformCheckpoint(isolate());
302 302
303 EXPECT_TRUE(result.isSet); 303 EXPECT_TRUE(result.isSet);
304 EXPECT_FALSE(result.isDone); 304 EXPECT_FALSE(result.isDone);
305 EXPECT_EQ("hello", result.valueString); 305 EXPECT_EQ("hello", result.valueString);
306 EXPECT_TRUE(onRejected.isNull()); 306 EXPECT_TRUE(onRejected.isNull());
307 EXPECT_FALSE(result2.isSet); 307 EXPECT_FALSE(result2.isSet);
308 EXPECT_TRUE(onRejected2.isNull()); 308 EXPECT_TRUE(onRejected2.isNull());
309 309
310 m_stream->enqueue("world"); 310 m_stream->enqueue("world");
311 isolate()->RunMicrotasks(); 311 v8::MicrotasksScope::PerformCheckpoint(isolate());
312 312
313 EXPECT_TRUE(result2.isSet); 313 EXPECT_TRUE(result2.isSet);
314 EXPECT_FALSE(result2.isDone); 314 EXPECT_FALSE(result2.isDone);
315 EXPECT_EQ("world", result2.valueString); 315 EXPECT_EQ("world", result2.valueString);
316 EXPECT_TRUE(onRejected2.isNull()); 316 EXPECT_TRUE(onRejected2.isNull());
317 EXPECT_FALSE(exceptionState.hadException()); 317 EXPECT_FALSE(exceptionState.hadException());
318 } 318 }
319 319
320 TEST_F(ReadableStreamReaderTest, ClosedReader) 320 TEST_F(ReadableStreamReaderTest, ClosedReader)
321 { 321 {
322 ScriptState::Scope scope(getScriptState()); 322 ScriptState::Scope scope(getScriptState());
323 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 323 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
324 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 324 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
325 325
326 m_stream->close(); 326 m_stream->close();
327 327
328 EXPECT_TRUE(reader->isActive()); 328 EXPECT_TRUE(reader->isActive());
329 329
330 String onClosedFulfilled, onClosedRejected; 330 String onClosedFulfilled, onClosedRejected;
331 ReadResult result; 331 ReadResult result;
332 String onReadRejected; 332 String onReadRejected;
333 isolate()->RunMicrotasks(); 333 v8::MicrotasksScope::PerformCheckpoint(isolate());
334 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea teCaptor(&onClosedRejected)); 334 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea teCaptor(&onClosedRejected));
335 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onReadRejected)); 335 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onReadRejected));
336 EXPECT_TRUE(onClosedFulfilled.isNull()); 336 EXPECT_TRUE(onClosedFulfilled.isNull());
337 EXPECT_TRUE(onClosedRejected.isNull()); 337 EXPECT_TRUE(onClosedRejected.isNull());
338 EXPECT_FALSE(result.isSet); 338 EXPECT_FALSE(result.isSet);
339 EXPECT_TRUE(onReadRejected.isNull()); 339 EXPECT_TRUE(onReadRejected.isNull());
340 340
341 isolate()->RunMicrotasks(); 341 v8::MicrotasksScope::PerformCheckpoint(isolate());
342 EXPECT_EQ("undefined", onClosedFulfilled); 342 EXPECT_EQ("undefined", onClosedFulfilled);
343 EXPECT_TRUE(onClosedRejected.isNull()); 343 EXPECT_TRUE(onClosedRejected.isNull());
344 EXPECT_TRUE(result.isSet); 344 EXPECT_TRUE(result.isSet);
345 EXPECT_TRUE(result.isDone); 345 EXPECT_TRUE(result.isDone);
346 EXPECT_EQ("undefined", result.valueString); 346 EXPECT_EQ("undefined", result.valueString);
347 EXPECT_TRUE(onReadRejected.isNull()); 347 EXPECT_TRUE(onReadRejected.isNull());
348 EXPECT_FALSE(exceptionState.hadException()); 348 EXPECT_FALSE(exceptionState.hadException());
349 } 349 }
350 350
351 TEST_F(ReadableStreamReaderTest, ErroredReader) 351 TEST_F(ReadableStreamReaderTest, ErroredReader)
352 { 352 {
353 ScriptState::Scope scope(getScriptState()); 353 ScriptState::Scope scope(getScriptState());
354 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 354 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
355 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 355 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
356 356
357 m_stream->error(DOMException::create(SyntaxError, "some error")); 357 m_stream->error(DOMException::create(SyntaxError, "some error"));
358 358
359 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); 359 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal());
360 EXPECT_TRUE(reader->isActive()); 360 EXPECT_TRUE(reader->isActive());
361 361
362 String onClosedFulfilled, onClosedRejected; 362 String onClosedFulfilled, onClosedRejected;
363 String onReadFulfilled, onReadRejected; 363 String onReadFulfilled, onReadRejected;
364 isolate()->RunMicrotasks(); 364 v8::MicrotasksScope::PerformCheckpoint(isolate());
365 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea teCaptor(&onClosedRejected)); 365 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea teCaptor(&onClosedRejected));
366 reader->read(getScriptState()).then(createCaptor(&onReadFulfilled), createCa ptor(&onReadRejected)); 366 reader->read(getScriptState()).then(createCaptor(&onReadFulfilled), createCa ptor(&onReadRejected));
367 EXPECT_TRUE(onClosedFulfilled.isNull()); 367 EXPECT_TRUE(onClosedFulfilled.isNull());
368 EXPECT_TRUE(onClosedRejected.isNull()); 368 EXPECT_TRUE(onClosedRejected.isNull());
369 EXPECT_TRUE(onReadFulfilled.isNull()); 369 EXPECT_TRUE(onReadFulfilled.isNull());
370 EXPECT_TRUE(onReadRejected.isNull()); 370 EXPECT_TRUE(onReadRejected.isNull());
371 371
372 isolate()->RunMicrotasks(); 372 v8::MicrotasksScope::PerformCheckpoint(isolate());
373 EXPECT_TRUE(onClosedFulfilled.isNull()); 373 EXPECT_TRUE(onClosedFulfilled.isNull());
374 EXPECT_EQ("SyntaxError: some error", onClosedRejected); 374 EXPECT_EQ("SyntaxError: some error", onClosedRejected);
375 EXPECT_TRUE(onReadFulfilled.isNull()); 375 EXPECT_TRUE(onReadFulfilled.isNull());
376 EXPECT_EQ("SyntaxError: some error", onReadRejected); 376 EXPECT_EQ("SyntaxError: some error", onReadRejected);
377 EXPECT_FALSE(exceptionState.hadException()); 377 EXPECT_FALSE(exceptionState.hadException());
378 } 378 }
379 379
380 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenClosed) 380 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenClosed)
381 { 381 {
382 ScriptState::Scope scope(getScriptState()); 382 ScriptState::Scope scope(getScriptState());
383 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 383 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
384 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 384 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
385 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 385 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
386 386
387 ReadResult result, result2; 387 ReadResult result, result2;
388 String onRejected, onRejected2; 388 String onRejected, onRejected2;
389 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected)); 389 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected));
390 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2)); 390 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2));
391 391
392 isolate()->RunMicrotasks(); 392 v8::MicrotasksScope::PerformCheckpoint(isolate());
393 EXPECT_FALSE(result.isSet); 393 EXPECT_FALSE(result.isSet);
394 EXPECT_TRUE(onRejected.isNull()); 394 EXPECT_TRUE(onRejected.isNull());
395 EXPECT_FALSE(result2.isSet); 395 EXPECT_FALSE(result2.isSet);
396 EXPECT_TRUE(onRejected2.isNull()); 396 EXPECT_TRUE(onRejected2.isNull());
397 397
398 m_stream->close(); 398 m_stream->close();
399 EXPECT_FALSE(result.isSet); 399 EXPECT_FALSE(result.isSet);
400 EXPECT_TRUE(onRejected.isNull()); 400 EXPECT_TRUE(onRejected.isNull());
401 EXPECT_FALSE(result2.isSet); 401 EXPECT_FALSE(result2.isSet);
402 EXPECT_TRUE(onRejected2.isNull()); 402 EXPECT_TRUE(onRejected2.isNull());
403 403
404 isolate()->RunMicrotasks(); 404 v8::MicrotasksScope::PerformCheckpoint(isolate());
405 405
406 EXPECT_TRUE(result.isSet); 406 EXPECT_TRUE(result.isSet);
407 EXPECT_TRUE(result.isDone); 407 EXPECT_TRUE(result.isDone);
408 EXPECT_EQ("undefined", result.valueString); 408 EXPECT_EQ("undefined", result.valueString);
409 EXPECT_TRUE(onRejected.isNull()); 409 EXPECT_TRUE(onRejected.isNull());
410 410
411 EXPECT_TRUE(result2.isSet); 411 EXPECT_TRUE(result2.isSet);
412 EXPECT_TRUE(result2.isDone); 412 EXPECT_TRUE(result2.isDone);
413 EXPECT_EQ("undefined", result2.valueString); 413 EXPECT_EQ("undefined", result2.valueString);
414 EXPECT_TRUE(onRejected2.isNull()); 414 EXPECT_TRUE(onRejected2.isNull());
415 EXPECT_FALSE(exceptionState.hadException()); 415 EXPECT_FALSE(exceptionState.hadException());
416 } 416 }
417 417
418 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeRejectedWhenErrored) 418 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeRejectedWhenErrored)
419 { 419 {
420 ScriptState::Scope scope(getScriptState()); 420 ScriptState::Scope scope(getScriptState());
421 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 421 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
422 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 422 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
423 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 423 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
424 424
425 String onFulfilled, onFulfilled2; 425 String onFulfilled, onFulfilled2;
426 String onRejected, onRejected2; 426 String onRejected, onRejected2;
427 reader->read(getScriptState()).then(createCaptor(&onFulfilled), createCaptor (&onRejected)); 427 reader->read(getScriptState()).then(createCaptor(&onFulfilled), createCaptor (&onRejected));
428 reader->read(getScriptState()).then(createCaptor(&onFulfilled2), createCapto r(&onRejected2)); 428 reader->read(getScriptState()).then(createCaptor(&onFulfilled2), createCapto r(&onRejected2));
429 429
430 isolate()->RunMicrotasks(); 430 v8::MicrotasksScope::PerformCheckpoint(isolate());
431 EXPECT_TRUE(onFulfilled.isNull()); 431 EXPECT_TRUE(onFulfilled.isNull());
432 EXPECT_TRUE(onRejected.isNull()); 432 EXPECT_TRUE(onRejected.isNull());
433 EXPECT_TRUE(onFulfilled2.isNull()); 433 EXPECT_TRUE(onFulfilled2.isNull());
434 EXPECT_TRUE(onRejected2.isNull()); 434 EXPECT_TRUE(onRejected2.isNull());
435 435
436 m_stream->error(DOMException::create(SyntaxError, "some error")); 436 m_stream->error(DOMException::create(SyntaxError, "some error"));
437 EXPECT_TRUE(onFulfilled.isNull()); 437 EXPECT_TRUE(onFulfilled.isNull());
438 EXPECT_TRUE(onRejected.isNull()); 438 EXPECT_TRUE(onRejected.isNull());
439 EXPECT_TRUE(onFulfilled2.isNull()); 439 EXPECT_TRUE(onFulfilled2.isNull());
440 EXPECT_TRUE(onRejected2.isNull()); 440 EXPECT_TRUE(onRejected2.isNull());
441 441
442 isolate()->RunMicrotasks(); 442 v8::MicrotasksScope::PerformCheckpoint(isolate());
443 443
444 EXPECT_TRUE(onFulfilled.isNull()); 444 EXPECT_TRUE(onFulfilled.isNull());
445 EXPECT_EQ(onRejected, "SyntaxError: some error"); 445 EXPECT_EQ(onRejected, "SyntaxError: some error");
446 EXPECT_TRUE(onFulfilled2.isNull()); 446 EXPECT_TRUE(onFulfilled2.isNull());
447 EXPECT_EQ(onRejected2, "SyntaxError: some error"); 447 EXPECT_EQ(onRejected2, "SyntaxError: some error");
448 EXPECT_FALSE(exceptionState.hadException()); 448 EXPECT_FALSE(exceptionState.hadException());
449 } 449 }
450 450
451 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenCanceled) 451 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenCanceled)
452 { 452 {
453 ScriptState::Scope scope(getScriptState()); 453 ScriptState::Scope scope(getScriptState());
454 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 454 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
455 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 455 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
456 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 456 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
457 457
458 ReadResult result, result2; 458 ReadResult result, result2;
459 String onRejected, onRejected2; 459 String onRejected, onRejected2;
460 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected)); 460 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto r(&onRejected));
461 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2)); 461 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt or(&onRejected2));
462 462
463 isolate()->RunMicrotasks(); 463 v8::MicrotasksScope::PerformCheckpoint(isolate());
464 EXPECT_FALSE(result.isSet); 464 EXPECT_FALSE(result.isSet);
465 EXPECT_TRUE(onRejected.isNull()); 465 EXPECT_TRUE(onRejected.isNull());
466 EXPECT_FALSE(result2.isSet); 466 EXPECT_FALSE(result2.isSet);
467 EXPECT_TRUE(onRejected2.isNull()); 467 EXPECT_TRUE(onRejected2.isNull());
468 468
469 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined (isolate()))); 469 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined (isolate())));
470 EXPECT_TRUE(reader->isActive()); 470 EXPECT_TRUE(reader->isActive());
471 EXPECT_FALSE(result.isSet); 471 EXPECT_FALSE(result.isSet);
472 EXPECT_TRUE(onRejected.isNull()); 472 EXPECT_TRUE(onRejected.isNull());
473 EXPECT_FALSE(result2.isSet); 473 EXPECT_FALSE(result2.isSet);
474 EXPECT_TRUE(onRejected2.isNull()); 474 EXPECT_TRUE(onRejected2.isNull());
475 475
476 isolate()->RunMicrotasks(); 476 v8::MicrotasksScope::PerformCheckpoint(isolate());
477 477
478 EXPECT_TRUE(result.isSet); 478 EXPECT_TRUE(result.isSet);
479 EXPECT_TRUE(result.isDone); 479 EXPECT_TRUE(result.isDone);
480 EXPECT_EQ("undefined", result.valueString); 480 EXPECT_EQ("undefined", result.valueString);
481 EXPECT_TRUE(onRejected.isNull()); 481 EXPECT_TRUE(onRejected.isNull());
482 482
483 EXPECT_TRUE(result2.isSet); 483 EXPECT_TRUE(result2.isSet);
484 EXPECT_TRUE(result2.isDone); 484 EXPECT_TRUE(result2.isDone);
485 EXPECT_EQ("undefined", result2.valueString); 485 EXPECT_EQ("undefined", result2.valueString);
486 EXPECT_TRUE(onRejected2.isNull()); 486 EXPECT_TRUE(onRejected2.isNull());
487 EXPECT_FALSE(exceptionState.hadException()); 487 EXPECT_FALSE(exceptionState.hadException());
488 } 488 }
489 489
490 TEST_F(ReadableStreamReaderTest, CancelShouldNotWorkWhenNotActive) 490 TEST_F(ReadableStreamReaderTest, CancelShouldNotWorkWhenNotActive)
491 { 491 {
492 ScriptState::Scope scope(getScriptState()); 492 ScriptState::Scope scope(getScriptState());
493 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 493 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
494 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 494 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
495 reader->releaseLock(exceptionState); 495 reader->releaseLock(exceptionState);
496 EXPECT_FALSE(reader->isActive()); 496 EXPECT_FALSE(reader->isActive());
497 497
498 String onFulfilled, onRejected; 498 String onFulfilled, onRejected;
499 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined (isolate()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 499 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined (isolate()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
500 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 500 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
501 501
502 EXPECT_TRUE(onFulfilled.isNull()); 502 EXPECT_TRUE(onFulfilled.isNull());
503 EXPECT_TRUE(onRejected.isNull()); 503 EXPECT_TRUE(onRejected.isNull());
504 504
505 isolate()->RunMicrotasks(); 505 v8::MicrotasksScope::PerformCheckpoint(isolate());
506 506
507 EXPECT_TRUE(onFulfilled.isNull()); 507 EXPECT_TRUE(onFulfilled.isNull());
508 EXPECT_EQ("TypeError: the reader is already released", onRejected); 508 EXPECT_EQ("TypeError: the reader is already released", onRejected);
509 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 509 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
510 EXPECT_FALSE(exceptionState.hadException()); 510 EXPECT_FALSE(exceptionState.hadException());
511 } 511 }
512 512
513 TEST_F(ReadableStreamReaderTest, Cancel) 513 TEST_F(ReadableStreamReaderTest, Cancel)
514 { 514 {
515 ScriptState::Scope scope(getScriptState()); 515 ScriptState::Scope scope(getScriptState());
516 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 516 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
517 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 517 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
518 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 518 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
519 519
520 String onClosedFulfilled, onClosedRejected; 520 String onClosedFulfilled, onClosedRejected;
521 String onCancelFulfilled, onCancelRejected; 521 String onCancelFulfilled, onCancelRejected;
522 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea teCaptor(&onClosedRejected)); 522 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea teCaptor(&onClosedRejected));
523 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined (isolate()))).then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRejec ted)); 523 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined (isolate()))).then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRejec ted));
524 524
525 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal()); 525 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal());
526 EXPECT_TRUE(onClosedFulfilled.isNull()); 526 EXPECT_TRUE(onClosedFulfilled.isNull());
527 EXPECT_TRUE(onClosedRejected.isNull()); 527 EXPECT_TRUE(onClosedRejected.isNull());
528 EXPECT_TRUE(onCancelFulfilled.isNull()); 528 EXPECT_TRUE(onCancelFulfilled.isNull());
529 EXPECT_TRUE(onCancelRejected.isNull()); 529 EXPECT_TRUE(onCancelRejected.isNull());
530 530
531 isolate()->RunMicrotasks(); 531 v8::MicrotasksScope::PerformCheckpoint(isolate());
532 EXPECT_EQ("undefined", onClosedFulfilled); 532 EXPECT_EQ("undefined", onClosedFulfilled);
533 EXPECT_TRUE(onClosedRejected.isNull()); 533 EXPECT_TRUE(onClosedRejected.isNull());
534 EXPECT_EQ("undefined", onCancelFulfilled); 534 EXPECT_EQ("undefined", onCancelFulfilled);
535 EXPECT_TRUE(onCancelRejected.isNull()); 535 EXPECT_TRUE(onCancelRejected.isNull());
536 EXPECT_FALSE(exceptionState.hadException()); 536 EXPECT_FALSE(exceptionState.hadException());
537 } 537 }
538 538
539 TEST_F(ReadableStreamReaderTest, Close) 539 TEST_F(ReadableStreamReaderTest, Close)
540 { 540 {
541 ScriptState::Scope scope(getScriptState()); 541 ScriptState::Scope scope(getScriptState());
542 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 542 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
543 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 543 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
544 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 544 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
545 545
546 String onFulfilled, onRejected; 546 String onFulfilled, onRejected;
547 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt or(&onRejected)); 547 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt or(&onRejected));
548 548
549 m_stream->close(); 549 m_stream->close();
550 550
551 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal()); 551 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal());
552 EXPECT_TRUE(onFulfilled.isNull()); 552 EXPECT_TRUE(onFulfilled.isNull());
553 EXPECT_TRUE(onRejected.isNull()); 553 EXPECT_TRUE(onRejected.isNull());
554 554
555 isolate()->RunMicrotasks(); 555 v8::MicrotasksScope::PerformCheckpoint(isolate());
556 EXPECT_EQ("undefined", onFulfilled); 556 EXPECT_EQ("undefined", onFulfilled);
557 EXPECT_TRUE(onRejected.isNull()); 557 EXPECT_TRUE(onRejected.isNull());
558 EXPECT_FALSE(exceptionState.hadException()); 558 EXPECT_FALSE(exceptionState.hadException());
559 } 559 }
560 560
561 TEST_F(ReadableStreamReaderTest, Error) 561 TEST_F(ReadableStreamReaderTest, Error)
562 { 562 {
563 ScriptState::Scope scope(getScriptState()); 563 ScriptState::Scope scope(getScriptState());
564 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate()); 564 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", getScriptState()->context()->Global(), isolate());
565 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream); 565 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext( ), m_stream);
566 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); 566 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal());
567 567
568 String onFulfilled, onRejected; 568 String onFulfilled, onRejected;
569 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt or(&onRejected)); 569 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt or(&onRejected));
570 570
571 m_stream->error(DOMException::create(SyntaxError, "some error")); 571 m_stream->error(DOMException::create(SyntaxError, "some error"));
572 572
573 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); 573 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal());
574 EXPECT_TRUE(onFulfilled.isNull()); 574 EXPECT_TRUE(onFulfilled.isNull());
575 EXPECT_TRUE(onRejected.isNull()); 575 EXPECT_TRUE(onRejected.isNull());
576 576
577 isolate()->RunMicrotasks(); 577 v8::MicrotasksScope::PerformCheckpoint(isolate());
578 EXPECT_TRUE(onFulfilled.isNull()); 578 EXPECT_TRUE(onFulfilled.isNull());
579 EXPECT_EQ("SyntaxError: some error", onRejected); 579 EXPECT_EQ("SyntaxError: some error", onRejected);
580 EXPECT_FALSE(exceptionState.hadException()); 580 EXPECT_FALSE(exceptionState.hadException());
581 } 581 }
582 582
583 } // namespace 583 } // namespace
584 584
585 } // namespace blink 585 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Microtask.cpp ('k') | third_party/WebKit/Source/core/streams/ReadableStreamTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698