OLD | NEW |
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 "config.h" | 5 #include "config.h" |
6 #include "core/streams/ReadableStreamReader.h" | 6 #include "core/streams/ReadableStreamReader.h" |
7 | 7 |
8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" |
10 #include "bindings/core/v8/ToV8.h" | 10 #include "bindings/core/v8/ToV8.h" |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(
&onRejected)); | 175 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(
&onRejected)); |
176 reader->releaseLock(exceptionState); | 176 reader->releaseLock(exceptionState); |
177 EXPECT_FALSE(reader->isActive()); | 177 EXPECT_FALSE(reader->isActive()); |
178 EXPECT_FALSE(exceptionState.hadException()); | 178 EXPECT_FALSE(exceptionState.hadException()); |
179 | 179 |
180 EXPECT_TRUE(onFulfilled.isNull()); | 180 EXPECT_TRUE(onFulfilled.isNull()); |
181 EXPECT_TRUE(onRejected.isNull()); | 181 EXPECT_TRUE(onRejected.isNull()); |
182 | 182 |
183 isolate()->RunMicrotasks(); | 183 isolate()->RunMicrotasks(); |
184 EXPECT_EQ("undefined", onFulfilled); | 184 EXPECT_TRUE(onFulfilled.isNull()); |
185 EXPECT_TRUE(onRejected.isNull()); | 185 EXPECT_EQ("AbortError: the reader is already released", onRejected); |
186 | 186 |
187 ReadableStreamReader* another = new ReadableStreamReader(executionContext(),
m_stream); | 187 ReadableStreamReader* another = new ReadableStreamReader(executionContext(),
m_stream); |
188 EXPECT_TRUE(another->isActive()); | 188 EXPECT_TRUE(another->isActive()); |
189 EXPECT_FALSE(reader->isActive()); | 189 EXPECT_FALSE(reader->isActive()); |
190 reader->releaseLock(exceptionState); | 190 reader->releaseLock(exceptionState); |
191 EXPECT_TRUE(another->isActive()); | 191 EXPECT_TRUE(another->isActive()); |
192 EXPECT_FALSE(reader->isActive()); | 192 EXPECT_FALSE(reader->isActive()); |
193 EXPECT_FALSE(exceptionState.hadException()); | 193 EXPECT_FALSE(exceptionState.hadException()); |
194 } | 194 } |
195 | 195 |
196 TEST_F(ReadableStreamReaderTest, ReadAfterRelease) | 196 TEST_F(ReadableStreamReaderTest, ReadAfterRelease) |
197 { | 197 { |
198 ScriptState::Scope scope(scriptState()); | 198 ScriptState::Scope scope(scriptState()); |
199 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 199 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); |
200 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 200 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); |
201 EXPECT_TRUE(reader->isActive()); | 201 EXPECT_TRUE(reader->isActive()); |
202 reader->releaseLock(exceptionState); | 202 reader->releaseLock(exceptionState); |
203 EXPECT_FALSE(exceptionState.hadException()); | 203 EXPECT_FALSE(exceptionState.hadException()); |
204 EXPECT_FALSE(reader->isActive()); | 204 EXPECT_FALSE(reader->isActive()); |
205 | 205 |
206 ReadResult result; | 206 ReadResult result; |
207 String onRejected; | 207 String onRejected; |
208 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 208 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); |
209 | 209 |
210 EXPECT_FALSE(result.isSet); | 210 EXPECT_FALSE(result.isSet); |
211 EXPECT_TRUE(onRejected.isNull()); | 211 EXPECT_TRUE(onRejected.isNull()); |
212 isolate()->RunMicrotasks(); | 212 isolate()->RunMicrotasks(); |
213 | 213 |
214 EXPECT_TRUE(result.isSet); | 214 EXPECT_FALSE(result.isSet); |
215 EXPECT_TRUE(result.isDone); | 215 EXPECT_EQ("TypeError: the reader is already released", onRejected); |
216 EXPECT_EQ("undefined", result.valueString); | |
217 EXPECT_TRUE(onRejected.isNull()); | |
218 EXPECT_FALSE(exceptionState.hadException()); | 216 EXPECT_FALSE(exceptionState.hadException()); |
219 } | 217 } |
220 | 218 |
221 TEST_F(ReadableStreamReaderTest, ReleaseShouldFailWhenCalledWhileReading) | 219 TEST_F(ReadableStreamReaderTest, ReleaseShouldFailWhenCalledWhileReading) |
222 { | 220 { |
223 ScriptState::Scope scope(scriptState()); | 221 ScriptState::Scope scope(scriptState()); |
224 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 222 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); |
225 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 223 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); |
226 EXPECT_TRUE(reader->isActive()); | 224 EXPECT_TRUE(reader->isActive()); |
227 reader->read(scriptState()); | 225 reader->read(scriptState()); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 } | 319 } |
322 | 320 |
323 TEST_F(ReadableStreamReaderTest, ClosedReader) | 321 TEST_F(ReadableStreamReaderTest, ClosedReader) |
324 { | 322 { |
325 ScriptState::Scope scope(scriptState()); | 323 ScriptState::Scope scope(scriptState()); |
326 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 324 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); |
327 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 325 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); |
328 | 326 |
329 m_stream->close(); | 327 m_stream->close(); |
330 | 328 |
331 EXPECT_FALSE(reader->isActive()); | 329 EXPECT_TRUE(reader->isActive()); |
332 | 330 |
333 String onClosedFulfilled, onClosedRejected; | 331 String onClosedFulfilled, onClosedRejected; |
334 ReadResult result; | 332 ReadResult result; |
335 String onReadRejected; | 333 String onReadRejected; |
336 isolate()->RunMicrotasks(); | 334 isolate()->RunMicrotasks(); |
337 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); | 335 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); |
338 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onReadRejected)); | 336 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onReadRejected)); |
339 EXPECT_TRUE(onClosedFulfilled.isNull()); | 337 EXPECT_TRUE(onClosedFulfilled.isNull()); |
340 EXPECT_TRUE(onClosedRejected.isNull()); | 338 EXPECT_TRUE(onClosedRejected.isNull()); |
341 EXPECT_FALSE(result.isSet); | 339 EXPECT_FALSE(result.isSet); |
(...skipping 11 matching lines...) Expand all Loading... |
353 | 351 |
354 TEST_F(ReadableStreamReaderTest, ErroredReader) | 352 TEST_F(ReadableStreamReaderTest, ErroredReader) |
355 { | 353 { |
356 ScriptState::Scope scope(scriptState()); | 354 ScriptState::Scope scope(scriptState()); |
357 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 355 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); |
358 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 356 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); |
359 | 357 |
360 m_stream->error(DOMException::create(SyntaxError, "some error")); | 358 m_stream->error(DOMException::create(SyntaxError, "some error")); |
361 | 359 |
362 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); | 360 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); |
363 EXPECT_FALSE(reader->isActive()); | 361 EXPECT_TRUE(reader->isActive()); |
364 | 362 |
365 String onClosedFulfilled, onClosedRejected; | 363 String onClosedFulfilled, onClosedRejected; |
366 String onReadFulfilled, onReadRejected; | 364 String onReadFulfilled, onReadRejected; |
367 isolate()->RunMicrotasks(); | 365 isolate()->RunMicrotasks(); |
368 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); | 366 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); |
369 reader->read(scriptState()).then(createCaptor(&onReadFulfilled), createCapto
r(&onReadRejected)); | 367 reader->read(scriptState()).then(createCaptor(&onReadFulfilled), createCapto
r(&onReadRejected)); |
370 EXPECT_TRUE(onClosedFulfilled.isNull()); | 368 EXPECT_TRUE(onClosedFulfilled.isNull()); |
371 EXPECT_TRUE(onClosedRejected.isNull()); | 369 EXPECT_TRUE(onClosedRejected.isNull()); |
372 EXPECT_TRUE(onReadFulfilled.isNull()); | 370 EXPECT_TRUE(onReadFulfilled.isNull()); |
373 EXPECT_TRUE(onReadRejected.isNull()); | 371 EXPECT_TRUE(onReadRejected.isNull()); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 461 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); |
464 reader->read(scriptState()).then(createResultCaptor(&result2), createCaptor(
&onRejected2)); | 462 reader->read(scriptState()).then(createResultCaptor(&result2), createCaptor(
&onRejected2)); |
465 | 463 |
466 isolate()->RunMicrotasks(); | 464 isolate()->RunMicrotasks(); |
467 EXPECT_FALSE(result.isSet); | 465 EXPECT_FALSE(result.isSet); |
468 EXPECT_TRUE(onRejected.isNull()); | 466 EXPECT_TRUE(onRejected.isNull()); |
469 EXPECT_FALSE(result2.isSet); | 467 EXPECT_FALSE(result2.isSet); |
470 EXPECT_TRUE(onRejected2.isNull()); | 468 EXPECT_TRUE(onRejected2.isNull()); |
471 | 469 |
472 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))); | 470 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))); |
473 EXPECT_FALSE(reader->isActive()); | 471 EXPECT_TRUE(reader->isActive()); |
474 EXPECT_FALSE(result.isSet); | 472 EXPECT_FALSE(result.isSet); |
475 EXPECT_TRUE(onRejected.isNull()); | 473 EXPECT_TRUE(onRejected.isNull()); |
476 EXPECT_FALSE(result2.isSet); | 474 EXPECT_FALSE(result2.isSet); |
477 EXPECT_TRUE(onRejected2.isNull()); | 475 EXPECT_TRUE(onRejected2.isNull()); |
478 | 476 |
479 isolate()->RunMicrotasks(); | 477 isolate()->RunMicrotasks(); |
480 | 478 |
481 EXPECT_TRUE(result.isSet); | 479 EXPECT_TRUE(result.isSet); |
482 EXPECT_TRUE(result.isDone); | 480 EXPECT_TRUE(result.isDone); |
483 EXPECT_EQ("undefined", result.valueString); | 481 EXPECT_EQ("undefined", result.valueString); |
(...skipping 16 matching lines...) Expand all Loading... |
500 | 498 |
501 String onFulfilled, onRejected; | 499 String onFulfilled, onRejected; |
502 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); | 500 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); |
503 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 501 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
504 | 502 |
505 EXPECT_TRUE(onFulfilled.isNull()); | 503 EXPECT_TRUE(onFulfilled.isNull()); |
506 EXPECT_TRUE(onRejected.isNull()); | 504 EXPECT_TRUE(onRejected.isNull()); |
507 | 505 |
508 isolate()->RunMicrotasks(); | 506 isolate()->RunMicrotasks(); |
509 | 507 |
510 EXPECT_EQ("undefined", onFulfilled); | 508 EXPECT_TRUE(onFulfilled.isNull()); |
511 EXPECT_TRUE(onRejected.isNull()); | 509 EXPECT_EQ("TypeError: the reader is already released", onRejected); |
512 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 510 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
513 EXPECT_FALSE(exceptionState.hadException()); | 511 EXPECT_FALSE(exceptionState.hadException()); |
514 } | 512 } |
515 | 513 |
516 TEST_F(ReadableStreamReaderTest, Cancel) | 514 TEST_F(ReadableStreamReaderTest, Cancel) |
517 { | 515 { |
518 ScriptState::Scope scope(scriptState()); | 516 ScriptState::Scope scope(scriptState()); |
519 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 517 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); |
520 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 518 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); |
521 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 519 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 | 577 |
580 isolate()->RunMicrotasks(); | 578 isolate()->RunMicrotasks(); |
581 EXPECT_TRUE(onFulfilled.isNull()); | 579 EXPECT_TRUE(onFulfilled.isNull()); |
582 EXPECT_EQ("SyntaxError: some error", onRejected); | 580 EXPECT_EQ("SyntaxError: some error", onRejected); |
583 EXPECT_FALSE(exceptionState.hadException()); | 581 EXPECT_FALSE(exceptionState.hadException()); |
584 } | 582 } |
585 | 583 |
586 } // namespace | 584 } // namespace |
587 | 585 |
588 } // namespace blink | 586 } // namespace blink |
OLD | NEW |