| 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 "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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |