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

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

Issue 1278983003: Adding allocator annotations to blink classes and structs. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed patch conflict Created 5 years, 4 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 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/ReadableStreamImpl.h" 16 #include "core/streams/ReadableStreamImpl.h"
17 #include "core/streams/ReadableStreamReader.h" 17 #include "core/streams/ReadableStreamReader.h"
18 #include "core/streams/UnderlyingSource.h" 18 #include "core/streams/UnderlyingSource.h"
19 #include "core/testing/DummyPageHolder.h" 19 #include "core/testing/DummyPageHolder.h"
20 #include <gmock/gmock-more-actions.h>
20 #include <gmock/gmock.h> 21 #include <gmock/gmock.h>
21 #include <gtest/gtest.h> 22 #include <gtest/gtest.h>
22 23
23 namespace blink { 24 namespace blink {
24 25
25 using ::testing::_; 26 using ::testing::_;
26 using ::testing::InSequence; 27 using ::testing::InSequence;
27 using ::testing::Invoke; 28 using ::testing::Invoke;
28 using ::testing::Return; 29 using ::testing::Return;
30 using ::testing::ReturnPointee;
29 31
30 namespace { 32 namespace {
31 33
32 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; 34 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>;
33 using StringStream = ReadableStreamImpl<ReadableStreamChunkTypeTraits<String>>; 35 using StringStream = ReadableStreamImpl<ReadableStreamChunkTypeTraits<String>>;
34 36
35 class StringCapturingFunction : public ScriptFunction { 37 class StringCapturingFunction : public ScriptFunction {
36 public: 38 public:
37 static v8::Local<v8::Function> createFunction(ScriptState* scriptState, Stri ng* value) 39 static v8::Local<v8::Function> createFunction(ScriptState* scriptState, Stri ng* value)
38 { 40 {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 }; 100 };
99 101
100 } // unnamed namespace 102 } // unnamed namespace
101 103
102 // ReadableStream::read and some related functionalities are tested in 104 // ReadableStream::read and some related functionalities are tested in
103 // ReadableStreamReaderTest. 105 // ReadableStreamReaderTest.
104 class ReadableStreamTest : public ::testing::Test { 106 class ReadableStreamTest : public ::testing::Test {
105 public: 107 public:
106 ReadableStreamTest() 108 ReadableStreamTest()
107 : m_page(DummyPageHolder::create(IntSize(1, 1))) 109 : m_page(DummyPageHolder::create(IntSize(1, 1)))
108 , m_scope(scriptState())
109 , m_underlyingSource(new ::testing::StrictMock<MockUnderlyingSource>) 110 , m_underlyingSource(new ::testing::StrictMock<MockUnderlyingSource>)
110 , m_exceptionState(ExceptionState::ConstructionContext, "property", "int erface", scriptState()->context()->Global(), isolate())
111 { 111 {
112 } 112 }
113 113
114 ~ReadableStreamTest() override 114 ~ReadableStreamTest() override
115 { 115 {
116 } 116 }
117 117
118 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume nt().frame()); } 118 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume nt().frame()); }
119 v8::Isolate* isolate() { return scriptState()->isolate(); } 119 v8::Isolate* isolate() { return scriptState()->isolate(); }
120 120
(...skipping 27 matching lines...) Expand all
148 EXPECT_CALL(checkpoint, Call(1)); 148 EXPECT_CALL(checkpoint, Call(1));
149 } 149 }
150 StringStream* stream = new StringStream(m_underlyingSource, new Permissi veStrategy); 150 StringStream* stream = new StringStream(m_underlyingSource, new Permissi veStrategy);
151 checkpoint.Call(0); 151 checkpoint.Call(0);
152 stream->didSourceStart(); 152 stream->didSourceStart();
153 checkpoint.Call(1); 153 checkpoint.Call(1);
154 return stream; 154 return stream;
155 } 155 }
156 156
157 OwnPtr<DummyPageHolder> m_page; 157 OwnPtr<DummyPageHolder> m_page;
158 ScriptState::Scope m_scope;
159 Persistent<MockUnderlyingSource> m_underlyingSource; 158 Persistent<MockUnderlyingSource> m_underlyingSource;
160 ExceptionState m_exceptionState;
161 }; 159 };
162 160
163 TEST_F(ReadableStreamTest, Start) 161 TEST_F(ReadableStreamTest, Start)
164 { 162 {
163 ScriptState::Scope scope(scriptState());
164 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
165 Checkpoint checkpoint; 165 Checkpoint checkpoint;
166 { 166 {
167 InSequence s; 167 InSequence s;
168 EXPECT_CALL(checkpoint, Call(0)); 168 EXPECT_CALL(checkpoint, Call(0));
169 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 169 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
170 EXPECT_CALL(checkpoint, Call(1)); 170 EXPECT_CALL(checkpoint, Call(1));
171 } 171 }
172 172
173 StringStream* stream = new StringStream(m_underlyingSource); 173 StringStream* stream = new StringStream(m_underlyingSource);
174 EXPECT_FALSE(m_exceptionState.hadException()); 174 EXPECT_FALSE(exceptionState.hadException());
175 EXPECT_FALSE(stream->isStarted()); 175 EXPECT_FALSE(stream->isStarted());
176 EXPECT_FALSE(stream->isDraining()); 176 EXPECT_FALSE(stream->isDraining());
177 EXPECT_FALSE(stream->isPulling()); 177 EXPECT_FALSE(stream->isPulling());
178 EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable); 178 EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable);
179 179
180 checkpoint.Call(0); 180 checkpoint.Call(0);
181 stream->didSourceStart(); 181 stream->didSourceStart();
182 checkpoint.Call(1); 182 checkpoint.Call(1);
183 183
184 EXPECT_TRUE(stream->isStarted()); 184 EXPECT_TRUE(stream->isStarted());
185 EXPECT_FALSE(stream->isDraining()); 185 EXPECT_FALSE(stream->isDraining());
186 EXPECT_TRUE(stream->isPulling()); 186 EXPECT_TRUE(stream->isPulling());
187 EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable); 187 EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable);
188 188
189 // We need to call |error| in order to make 189 // We need to call |error| in order to make
190 // ActiveDOMObject::hasPendingActivity return false. 190 // ActiveDOMObject::hasPendingActivity return false.
191 stream->error(DOMException::create(AbortError, "done")); 191 stream->error(DOMException::create(AbortError, "done"));
192 } 192 }
193 193
194 TEST_F(ReadableStreamTest, StartFail) 194 TEST_F(ReadableStreamTest, StartFail)
195 { 195 {
196 ScriptState::Scope scope(scriptState());
197 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
196 StringStream* stream = new StringStream(m_underlyingSource); 198 StringStream* stream = new StringStream(m_underlyingSource);
197 EXPECT_FALSE(m_exceptionState.hadException()); 199 EXPECT_FALSE(exceptionState.hadException());
198 EXPECT_FALSE(stream->isStarted()); 200 EXPECT_FALSE(stream->isStarted());
199 EXPECT_FALSE(stream->isDraining()); 201 EXPECT_FALSE(stream->isDraining());
200 EXPECT_FALSE(stream->isPulling()); 202 EXPECT_FALSE(stream->isPulling());
201 EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable); 203 EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable);
202 204
203 stream->error(DOMException::create(NotFoundError)); 205 stream->error(DOMException::create(NotFoundError));
204 206
205 EXPECT_FALSE(stream->isStarted()); 207 EXPECT_FALSE(stream->isStarted());
206 EXPECT_FALSE(stream->isDraining()); 208 EXPECT_FALSE(stream->isDraining());
207 EXPECT_FALSE(stream->isPulling()); 209 EXPECT_FALSE(stream->isPulling());
208 EXPECT_EQ(stream->stateInternal(), ReadableStream::Errored); 210 EXPECT_EQ(stream->stateInternal(), ReadableStream::Errored);
209 } 211 }
210 212
211 TEST_F(ReadableStreamTest, ErrorAndEnqueue) 213 TEST_F(ReadableStreamTest, ErrorAndEnqueue)
212 { 214 {
215 ScriptState::Scope scope(scriptState());
216 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
213 StringStream* stream = construct(); 217 StringStream* stream = construct();
214 218
215 stream->error(DOMException::create(NotFoundError, "error")); 219 stream->error(DOMException::create(NotFoundError, "error"));
216 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 220 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
217 221
218 bool result = stream->enqueue("hello"); 222 bool result = stream->enqueue("hello");
219 EXPECT_FALSE(result); 223 EXPECT_FALSE(result);
220 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 224 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
221 } 225 }
222 226
223 TEST_F(ReadableStreamTest, CloseAndEnqueue) 227 TEST_F(ReadableStreamTest, CloseAndEnqueue)
224 { 228 {
229 ScriptState::Scope scope(scriptState());
230 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
225 StringStream* stream = construct(); 231 StringStream* stream = construct();
226 232
227 stream->close(); 233 stream->close();
228 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 234 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
229 235
230 bool result = stream->enqueue("hello"); 236 bool result = stream->enqueue("hello");
231 EXPECT_FALSE(result); 237 EXPECT_FALSE(result);
232 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 238 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
233 } 239 }
234 240
235 TEST_F(ReadableStreamTest, CloseWhenErrored) 241 TEST_F(ReadableStreamTest, CloseWhenErrored)
236 { 242 {
243 ScriptState::Scope scope(scriptState());
244 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
237 StringStream* stream = construct(); 245 StringStream* stream = construct();
238 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 246 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
239 247
240 stream->error(DOMException::create(NotFoundError, "error")); 248 stream->error(DOMException::create(NotFoundError, "error"));
241 stream->close(); 249 stream->close();
242 250
243 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 251 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
244 } 252 }
245 253
246 TEST_F(ReadableStreamTest, ReadQueue) 254 TEST_F(ReadableStreamTest, ReadQueue)
247 { 255 {
256 ScriptState::Scope scope(scriptState());
257 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
248 StringStream* stream = construct(); 258 StringStream* stream = construct();
249 Checkpoint checkpoint; 259 Checkpoint checkpoint;
250 260
251 { 261 {
252 InSequence s; 262 InSequence s;
253 EXPECT_CALL(checkpoint, Call(0)); 263 EXPECT_CALL(checkpoint, Call(0));
254 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); 264 EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
255 EXPECT_CALL(checkpoint, Call(1)); 265 EXPECT_CALL(checkpoint, Call(1));
256 } 266 }
257 267
(...skipping 12 matching lines...) Expand all
270 EXPECT_EQ(std::make_pair(String("hello"), static_cast<size_t>(5)), queue[0]) ; 280 EXPECT_EQ(std::make_pair(String("hello"), static_cast<size_t>(5)), queue[0]) ;
271 EXPECT_EQ(std::make_pair(String("bye"), static_cast<size_t>(3)), queue[1]); 281 EXPECT_EQ(std::make_pair(String("bye"), static_cast<size_t>(3)), queue[1]);
272 282
273 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 283 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
274 EXPECT_TRUE(stream->isPulling()); 284 EXPECT_TRUE(stream->isPulling());
275 EXPECT_FALSE(stream->isDraining()); 285 EXPECT_FALSE(stream->isDraining());
276 } 286 }
277 287
278 TEST_F(ReadableStreamTest, CloseWhenReadable) 288 TEST_F(ReadableStreamTest, CloseWhenReadable)
279 { 289 {
290 ScriptState::Scope scope(scriptState());
291 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
280 StringStream* stream = construct(); 292 StringStream* stream = construct();
281 293
282 EXPECT_TRUE(stream->enqueue("hello")); 294 EXPECT_TRUE(stream->enqueue("hello"));
283 EXPECT_TRUE(stream->enqueue("bye")); 295 EXPECT_TRUE(stream->enqueue("bye"));
284 stream->close(); 296 stream->close();
285 EXPECT_FALSE(stream->enqueue("should be ignored")); 297 EXPECT_FALSE(stream->enqueue("should be ignored"));
286 298
287 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 299 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
288 EXPECT_FALSE(stream->isPulling()); 300 EXPECT_FALSE(stream->isPulling());
289 EXPECT_TRUE(stream->isDraining()); 301 EXPECT_TRUE(stream->isDraining());
290 302
291 stream->read(scriptState()); 303 stream->read(scriptState());
292 304
293 isolate()->RunMicrotasks(); 305 isolate()->RunMicrotasks();
294 306
295 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 307 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
296 EXPECT_FALSE(stream->isPulling()); 308 EXPECT_FALSE(stream->isPulling());
297 EXPECT_TRUE(stream->isDraining()); 309 EXPECT_TRUE(stream->isDraining());
298 310
299 stream->read(scriptState()); 311 stream->read(scriptState());
300 312
301 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 313 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
302 EXPECT_FALSE(stream->isPulling()); 314 EXPECT_FALSE(stream->isPulling());
303 EXPECT_TRUE(stream->isDraining()); 315 EXPECT_TRUE(stream->isDraining());
304 } 316 }
305 317
306 TEST_F(ReadableStreamTest, CancelWhenClosed) 318 TEST_F(ReadableStreamTest, CancelWhenClosed)
307 { 319 {
320 ScriptState::Scope scope(scriptState());
321 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
308 StringStream* stream = construct(); 322 StringStream* stream = construct();
309 String onFulfilled, onRejected; 323 String onFulfilled, onRejected;
310 stream->close(); 324 stream->close();
311 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 325 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
312 326
313 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue()); 327 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue());
314 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 328 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
315 329
316 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 330 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
317 EXPECT_TRUE(onFulfilled.isNull()); 331 EXPECT_TRUE(onFulfilled.isNull());
318 EXPECT_TRUE(onRejected.isNull()); 332 EXPECT_TRUE(onRejected.isNull());
319 333
320 isolate()->RunMicrotasks(); 334 isolate()->RunMicrotasks();
321 EXPECT_EQ("undefined", onFulfilled); 335 EXPECT_EQ("undefined", onFulfilled);
322 EXPECT_TRUE(onRejected.isNull()); 336 EXPECT_TRUE(onRejected.isNull());
323 } 337 }
324 338
325 TEST_F(ReadableStreamTest, CancelWhenErrored) 339 TEST_F(ReadableStreamTest, CancelWhenErrored)
326 { 340 {
341 ScriptState::Scope scope(scriptState());
342 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
327 StringStream* stream = construct(); 343 StringStream* stream = construct();
328 String onFulfilled, onRejected; 344 String onFulfilled, onRejected;
329 stream->error(DOMException::create(NotFoundError, "error")); 345 stream->error(DOMException::create(NotFoundError, "error"));
330 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 346 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
331 347
332 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue()); 348 ScriptPromise promise = stream->cancel(scriptState(), ScriptValue());
333 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal()); 349 EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
334 350
335 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 351 promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
336 EXPECT_TRUE(onFulfilled.isNull()); 352 EXPECT_TRUE(onFulfilled.isNull());
337 EXPECT_TRUE(onRejected.isNull()); 353 EXPECT_TRUE(onRejected.isNull());
338 354
339 isolate()->RunMicrotasks(); 355 isolate()->RunMicrotasks();
340 EXPECT_TRUE(onFulfilled.isNull()); 356 EXPECT_TRUE(onFulfilled.isNull());
341 EXPECT_EQ("NotFoundError: error", onRejected); 357 EXPECT_EQ("NotFoundError: error", onRejected);
342 } 358 }
343 359
344 TEST_F(ReadableStreamTest, CancelWhenReadable) 360 TEST_F(ReadableStreamTest, CancelWhenReadable)
345 { 361 {
362 ScriptState::Scope scope(scriptState());
363 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
346 StringStream* stream = construct(); 364 StringStream* stream = construct();
347 String onFulfilled, onRejected; 365 String onFulfilled, onRejected;
348 String onCancelFulfilled, onCancelRejected; 366 String onCancelFulfilled, onCancelRejected;
349 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason ")); 367 ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason "));
350 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello")); 368 ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptSt ate()->isolate(), "hello"));
351 369
352 { 370 {
353 InSequence s; 371 InSequence s;
354 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(Return(promise)); 372 EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).Wi llOnce(ReturnPointee(&promise));
355 } 373 }
356 374
357 stream->enqueue("hello"); 375 stream->enqueue("hello");
358 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 376 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
359 377
360 ScriptPromise cancelResult = stream->cancel(scriptState(), reason); 378 ScriptPromise cancelResult = stream->cancel(scriptState(), reason);
361 cancelResult.then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRe jected)); 379 cancelResult.then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRe jected));
362 380
363 EXPECT_NE(promise, cancelResult); 381 EXPECT_NE(promise, cancelResult);
364 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal()); 382 EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
365 383
366 EXPECT_TRUE(onCancelFulfilled.isNull()); 384 EXPECT_TRUE(onCancelFulfilled.isNull());
367 EXPECT_TRUE(onCancelRejected.isNull()); 385 EXPECT_TRUE(onCancelRejected.isNull());
368 386
369 isolate()->RunMicrotasks(); 387 isolate()->RunMicrotasks();
370 EXPECT_EQ("undefined", onCancelFulfilled); 388 EXPECT_EQ("undefined", onCancelFulfilled);
371 EXPECT_TRUE(onCancelRejected.isNull()); 389 EXPECT_TRUE(onCancelRejected.isNull());
372 } 390 }
373 391
374 TEST_F(ReadableStreamTest, CancelWhenLocked) 392 TEST_F(ReadableStreamTest, CancelWhenLocked)
375 { 393 {
394 ScriptState::Scope scope(scriptState());
395 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
376 String onFulfilled, onRejected; 396 String onFulfilled, onRejected;
377 StringStream* stream = construct(); 397 StringStream* stream = construct();
378 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), m_exceptionState); 398 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), exceptionState);
379 399
380 EXPECT_TRUE(reader->isActive()); 400 EXPECT_TRUE(reader->isActive());
381 EXPECT_FALSE(m_exceptionState.hadException()); 401 EXPECT_FALSE(exceptionState.hadException());
382 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 402 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
383 403
384 stream->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola te()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); 404 stream->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola te()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
385 405
386 EXPECT_TRUE(onFulfilled.isNull()); 406 EXPECT_TRUE(onFulfilled.isNull());
387 EXPECT_TRUE(onRejected.isNull()); 407 EXPECT_TRUE(onRejected.isNull());
388 408
389 isolate()->RunMicrotasks(); 409 isolate()->RunMicrotasks();
390 410
391 EXPECT_TRUE(onFulfilled.isNull()); 411 EXPECT_TRUE(onFulfilled.isNull());
392 EXPECT_EQ("TypeError: this stream is locked to a ReadableStreamReader", onRe jected); 412 EXPECT_EQ("TypeError: this stream is locked to a ReadableStreamReader", onRe jected);
393 EXPECT_TRUE(reader->isActive()); 413 EXPECT_TRUE(reader->isActive());
394 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 414 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
395 } 415 }
396 416
397 TEST_F(ReadableStreamTest, ReadableArrayBufferStreamCompileTest) 417 TEST_F(ReadableStreamTest, ReadableArrayBufferStreamCompileTest)
398 { 418 {
419 ScriptState::Scope scope(scriptState());
420 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
399 // This test tests if ReadableStreamImpl<DOMArrayBuffer> can be 421 // This test tests if ReadableStreamImpl<DOMArrayBuffer> can be
400 // instantiated. 422 // instantiated.
401 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBuffer>>(m_unde rlyingSource); 423 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBuffer>>(m_unde rlyingSource);
402 } 424 }
403 425
404 TEST_F(ReadableStreamTest, ReadableArrayBufferViewStreamCompileTest) 426 TEST_F(ReadableStreamTest, ReadableArrayBufferViewStreamCompileTest)
405 { 427 {
428 ScriptState::Scope scope(scriptState());
429 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
406 // This test tests if ReadableStreamImpl<DOMArrayBufferVIew> can be 430 // This test tests if ReadableStreamImpl<DOMArrayBufferVIew> can be
407 // instantiated. 431 // instantiated.
408 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBufferView>>(m_ underlyingSource); 432 new ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBufferView>>(m_ underlyingSource);
409 } 433 }
410 434
411 TEST_F(ReadableStreamTest, BackpressureOnEnqueueing) 435 TEST_F(ReadableStreamTest, BackpressureOnEnqueueing)
412 { 436 {
437 ScriptState::Scope scope(scriptState());
438 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
413 auto strategy = MockStrategy::create(); 439 auto strategy = MockStrategy::create();
414 Checkpoint checkpoint; 440 Checkpoint checkpoint;
415 441
416 StringStream* stream = construct(strategy); 442 StringStream* stream = construct(strategy);
417 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 443 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
418 444
419 { 445 {
420 InSequence s; 446 InSequence s;
421 EXPECT_CALL(checkpoint, Call(0)); 447 EXPECT_CALL(checkpoint, Call(0));
422 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(1) ); 448 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(1) );
(...skipping 12 matching lines...) Expand all
435 checkpoint.Call(2); 461 checkpoint.Call(2);
436 result = stream->enqueue("world"); 462 result = stream->enqueue("world");
437 checkpoint.Call(3); 463 checkpoint.Call(3);
438 EXPECT_FALSE(result); 464 EXPECT_FALSE(result);
439 465
440 stream->error(DOMException::create(AbortError, "done")); 466 stream->error(DOMException::create(AbortError, "done"));
441 } 467 }
442 468
443 TEST_F(ReadableStreamTest, BackpressureOnReading) 469 TEST_F(ReadableStreamTest, BackpressureOnReading)
444 { 470 {
471 ScriptState::Scope scope(scriptState());
472 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
445 auto strategy = MockStrategy::create(); 473 auto strategy = MockStrategy::create();
446 Checkpoint checkpoint; 474 Checkpoint checkpoint;
447 475
448 StringStream* stream = construct(strategy); 476 StringStream* stream = construct(strategy);
449 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal()); 477 EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
450 478
451 { 479 {
452 InSequence s; 480 InSequence s;
453 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(2) ); 481 EXPECT_CALL(*strategy, size(String("hello"), stream)).WillOnce(Return(2) );
454 EXPECT_CALL(*strategy, shouldApplyBackpressure(2, stream)).WillOnce(Retu rn(false)); 482 EXPECT_CALL(*strategy, shouldApplyBackpressure(2, stream)).WillOnce(Retu rn(false));
(...skipping 28 matching lines...) Expand all
483 checkpoint.Call(3); 511 checkpoint.Call(3);
484 stream->read(scriptState()); 512 stream->read(scriptState());
485 checkpoint.Call(4); 513 checkpoint.Call(4);
486 514
487 stream->error(DOMException::create(AbortError, "done")); 515 stream->error(DOMException::create(AbortError, "done"));
488 } 516 }
489 517
490 // Note: Detailed tests are on ReadableStreamReaderTest. 518 // Note: Detailed tests are on ReadableStreamReaderTest.
491 TEST_F(ReadableStreamTest, ReadableStreamReader) 519 TEST_F(ReadableStreamTest, ReadableStreamReader)
492 { 520 {
521 ScriptState::Scope scope(scriptState());
522 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
493 StringStream* stream = construct(); 523 StringStream* stream = construct();
494 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), m_exceptionState); 524 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), exceptionState);
495 525
496 ASSERT_TRUE(reader); 526 ASSERT_TRUE(reader);
497 EXPECT_FALSE(m_exceptionState.hadException()); 527 EXPECT_FALSE(exceptionState.hadException());
498 EXPECT_TRUE(reader->isActive()); 528 EXPECT_TRUE(reader->isActive());
499 EXPECT_TRUE(stream->isLockedTo(reader)); 529 EXPECT_TRUE(stream->isLockedTo(reader));
500 530
501 ReadableStreamReader* another = stream->getReader(scriptState()->executionCo ntext(), m_exceptionState); 531 ReadableStreamReader* another = stream->getReader(scriptState()->executionCo ntext(), exceptionState);
502 ASSERT_EQ(nullptr, another); 532 ASSERT_EQ(nullptr, another);
503 EXPECT_TRUE(m_exceptionState.hadException()); 533 EXPECT_TRUE(exceptionState.hadException());
504 EXPECT_TRUE(reader->isActive()); 534 EXPECT_TRUE(reader->isActive());
505 EXPECT_TRUE(stream->isLockedTo(reader)); 535 EXPECT_TRUE(stream->isLockedTo(reader));
506 } 536 }
507 537
508 TEST_F(ReadableStreamTest, GetClosedReader) 538 TEST_F(ReadableStreamTest, GetClosedReader)
509 { 539 {
540 ScriptState::Scope scope(scriptState());
541 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
510 StringStream* stream = construct(); 542 StringStream* stream = construct();
511 stream->close(); 543 stream->close();
512 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), m_exceptionState); 544 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), exceptionState);
513 545
514 ASSERT_TRUE(reader); 546 ASSERT_TRUE(reader);
515 EXPECT_FALSE(m_exceptionState.hadException()); 547 EXPECT_FALSE(exceptionState.hadException());
516 548
517 String onFulfilled, onRejected; 549 String onFulfilled, onRejected;
518 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor( &onRejected)); 550 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor( &onRejected));
519 551
520 EXPECT_FALSE(reader->isActive()); 552 EXPECT_FALSE(reader->isActive());
521 EXPECT_TRUE(onFulfilled.isNull()); 553 EXPECT_TRUE(onFulfilled.isNull());
522 EXPECT_TRUE(onRejected.isNull()); 554 EXPECT_TRUE(onRejected.isNull());
523 555
524 isolate()->RunMicrotasks(); 556 isolate()->RunMicrotasks();
525 EXPECT_EQ("undefined", onFulfilled); 557 EXPECT_EQ("undefined", onFulfilled);
526 EXPECT_TRUE(onRejected.isNull()); 558 EXPECT_TRUE(onRejected.isNull());
527 } 559 }
528 560
529 TEST_F(ReadableStreamTest, GetErroredReader) 561 TEST_F(ReadableStreamTest, GetErroredReader)
530 { 562 {
563 ScriptState::Scope scope(scriptState());
564 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
531 StringStream* stream = construct(); 565 StringStream* stream = construct();
532 stream->error(DOMException::create(SyntaxError, "some error")); 566 stream->error(DOMException::create(SyntaxError, "some error"));
533 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), m_exceptionState); 567 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), exceptionState);
534 568
535 ASSERT_TRUE(reader); 569 ASSERT_TRUE(reader);
536 EXPECT_FALSE(m_exceptionState.hadException()); 570 EXPECT_FALSE(exceptionState.hadException());
537 571
538 String onFulfilled, onRejected; 572 String onFulfilled, onRejected;
539 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor( &onRejected)); 573 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor( &onRejected));
540 574
541 EXPECT_FALSE(reader->isActive()); 575 EXPECT_FALSE(reader->isActive());
542 EXPECT_TRUE(onFulfilled.isNull()); 576 EXPECT_TRUE(onFulfilled.isNull());
543 EXPECT_TRUE(onRejected.isNull()); 577 EXPECT_TRUE(onRejected.isNull());
544 578
545 isolate()->RunMicrotasks(); 579 isolate()->RunMicrotasks();
546 EXPECT_TRUE(onFulfilled.isNull()); 580 EXPECT_TRUE(onFulfilled.isNull());
547 EXPECT_EQ("SyntaxError: some error", onRejected); 581 EXPECT_EQ("SyntaxError: some error", onRejected);
548 } 582 }
549 583
550 TEST_F(ReadableStreamTest, StrictStrategy) 584 TEST_F(ReadableStreamTest, StrictStrategy)
551 { 585 {
586 ScriptState::Scope scope(scriptState());
587 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property ", "interface", scriptState()->context()->Global(), isolate());
552 Checkpoint checkpoint; 588 Checkpoint checkpoint;
553 { 589 {
554 InSequence s; 590 InSequence s;
555 EXPECT_CALL(checkpoint, Call(0)); 591 EXPECT_CALL(checkpoint, Call(0));
556 EXPECT_CALL(checkpoint, Call(1)); 592 EXPECT_CALL(checkpoint, Call(1));
557 EXPECT_CALL(*m_underlyingSource, pullSource()); 593 EXPECT_CALL(*m_underlyingSource, pullSource());
558 EXPECT_CALL(checkpoint, Call(2)); 594 EXPECT_CALL(checkpoint, Call(2));
559 EXPECT_CALL(checkpoint, Call(3)); 595 EXPECT_CALL(checkpoint, Call(3));
560 EXPECT_CALL(*m_underlyingSource, pullSource()); 596 EXPECT_CALL(*m_underlyingSource, pullSource());
561 EXPECT_CALL(checkpoint, Call(4)); 597 EXPECT_CALL(checkpoint, Call(4));
562 EXPECT_CALL(checkpoint, Call(5)); 598 EXPECT_CALL(checkpoint, Call(5));
563 EXPECT_CALL(checkpoint, Call(6)); 599 EXPECT_CALL(checkpoint, Call(6));
564 EXPECT_CALL(checkpoint, Call(7)); 600 EXPECT_CALL(checkpoint, Call(7));
565 EXPECT_CALL(checkpoint, Call(8)); 601 EXPECT_CALL(checkpoint, Call(8));
566 EXPECT_CALL(checkpoint, Call(9)); 602 EXPECT_CALL(checkpoint, Call(9));
567 EXPECT_CALL(*m_underlyingSource, pullSource()); 603 EXPECT_CALL(*m_underlyingSource, pullSource());
568 } 604 }
569 StringStream* stream = new StringStream(m_underlyingSource, new StringStream ::StrictStrategy); 605 StringStream* stream = new StringStream(m_underlyingSource, new StringStream ::StrictStrategy);
570 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), m_exceptionState); 606 ReadableStreamReader* reader = stream->getReader(scriptState()->executionCon text(), exceptionState);
571 607
572 checkpoint.Call(0); 608 checkpoint.Call(0);
573 stream->didSourceStart(); 609 stream->didSourceStart();
574 610
575 checkpoint.Call(1); 611 checkpoint.Call(1);
576 EXPECT_FALSE(stream->isPulling()); 612 EXPECT_FALSE(stream->isPulling());
577 reader->read(scriptState()); 613 reader->read(scriptState());
578 EXPECT_TRUE(stream->isPulling()); 614 EXPECT_TRUE(stream->isPulling());
579 checkpoint.Call(2); 615 checkpoint.Call(2);
580 stream->enqueue("hello"); 616 stream->enqueue("hello");
(...skipping 17 matching lines...) Expand all
598 reader->read(scriptState()); 634 reader->read(scriptState());
599 EXPECT_FALSE(stream->isPulling()); 635 EXPECT_FALSE(stream->isPulling());
600 checkpoint.Call(9); 636 checkpoint.Call(9);
601 reader->read(scriptState()); 637 reader->read(scriptState());
602 EXPECT_TRUE(stream->isPulling()); 638 EXPECT_TRUE(stream->isPulling());
603 639
604 stream->error(DOMException::create(AbortError, "done")); 640 stream->error(DOMException::create(AbortError, "done"));
605 } 641 }
606 642
607 } // namespace blink 643 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/streams/ReadableStreamReaderTest.cpp ('k') | Source/core/workers/SharedWorkerRepositoryClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698