Index: Source/core/streams/ReadableStreamTest.cpp |
diff --git a/Source/core/streams/ReadableStreamTest.cpp b/Source/core/streams/ReadableStreamTest.cpp |
index 6986a8669058c802344c0c700a33cde05b1eb107..89596efa81f3ba2bfc3516412af6a82a7f894666 100644 |
--- a/Source/core/streams/ReadableStreamTest.cpp |
+++ b/Source/core/streams/ReadableStreamTest.cpp |
@@ -105,8 +105,17 @@ public: |
StringStream* construct() |
{ |
+ Checkpoint checkpoint; |
+ { |
+ InSequence s; |
+ EXPECT_CALL(checkpoint, Call(0)); |
+ EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
+ EXPECT_CALL(checkpoint, Call(1)); |
+ } |
StringStream* stream = new StringStream(scriptState()->executionContext(), m_underlyingSource); |
+ checkpoint.Call(0); |
stream->didSourceStart(); |
+ checkpoint.Call(1); |
return stream; |
} |
@@ -118,6 +127,14 @@ public: |
TEST_F(ReadableStreamTest, Start) |
{ |
+ Checkpoint checkpoint; |
+ { |
+ InSequence s; |
+ EXPECT_CALL(checkpoint, Call(0)); |
+ EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
+ EXPECT_CALL(checkpoint, Call(1)); |
+ } |
+ |
StringStream* stream = new StringStream(scriptState()->executionContext(), m_underlyingSource); |
EXPECT_FALSE(m_exceptionState.hadException()); |
EXPECT_FALSE(stream->isStarted()); |
@@ -125,11 +142,13 @@ TEST_F(ReadableStreamTest, Start) |
EXPECT_FALSE(stream->isPulling()); |
EXPECT_EQ(stream->state(), ReadableStream::Waiting); |
+ checkpoint.Call(0); |
stream->didSourceStart(); |
+ checkpoint.Call(1); |
EXPECT_TRUE(stream->isStarted()); |
EXPECT_FALSE(stream->isDraining()); |
- EXPECT_FALSE(stream->isPulling()); |
+ EXPECT_TRUE(stream->isPulling()); |
EXPECT_EQ(stream->state(), ReadableStream::Waiting); |
} |
@@ -157,22 +176,12 @@ TEST_F(ReadableStreamTest, WaitOnWaiting) |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
EXPECT_TRUE(stream->isStarted()); |
- EXPECT_FALSE(stream->isPulling()); |
- |
- { |
- InSequence s; |
- EXPECT_CALL(checkpoint, Call(0)); |
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
- EXPECT_CALL(checkpoint, Call(1)); |
- } |
+ EXPECT_TRUE(stream->isPulling()); |
- checkpoint.Call(0); |
ScriptPromise p = stream->wait(scriptState()); |
ScriptPromise q = stream->wait(scriptState()); |
- checkpoint.Call(1); |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
- EXPECT_TRUE(stream->isPulling()); |
EXPECT_EQ(q, p); |
} |
@@ -188,19 +197,17 @@ TEST_F(ReadableStreamTest, WaitDuringStarting) |
{ |
InSequence s; |
EXPECT_CALL(checkpoint, Call(0)); |
- EXPECT_CALL(checkpoint, Call(1)); |
EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
+ EXPECT_CALL(checkpoint, Call(1)); |
} |
- checkpoint.Call(0); |
stream->wait(scriptState()); |
- checkpoint.Call(1); |
- |
- EXPECT_TRUE(stream->isPulling()); |
- |
+ checkpoint.Call(0); |
stream->didSourceStart(); |
+ checkpoint.Call(1); |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
+ EXPECT_TRUE(stream->isStarted()); |
EXPECT_TRUE(stream->isPulling()); |
} |
@@ -209,11 +216,6 @@ TEST_F(ReadableStreamTest, WaitAndError) |
StringStream* stream = construct(); |
String onFulfilled, onRejected; |
- { |
- InSequence s; |
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
- } |
- |
ScriptPromise promise = stream->wait(scriptState()); |
promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
@@ -283,11 +285,6 @@ TEST_F(ReadableStreamTest, WaitAndEnqueue) |
String onFulfilled, onRejected; |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
- { |
- InSequence s; |
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
- } |
- |
stream->wait(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); |
isolate()->RunMicrotasks(); |
@@ -314,11 +311,6 @@ TEST_F(ReadableStreamTest, WaitAndEnqueueAndError) |
String onFulfilled, onRejected; |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
- { |
- InSequence s; |
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
- } |
- |
ScriptPromise promise = stream->wait(scriptState()); |
promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected)); |
isolate()->RunMicrotasks(); |
@@ -352,11 +344,6 @@ TEST_F(ReadableStreamTest, CloseWhenWaiting) |
StringStream* stream = construct(); |
- { |
- InSequence s; |
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
- } |
- |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
stream->wait(scriptState()).then(createCaptor(&onWaitFulfilled), createCaptor(&onWaitRejected)); |
stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createCaptor(&onClosedRejected)); |
@@ -475,7 +462,7 @@ TEST_F(ReadableStreamTest, EnqueuedAndRead) |
EXPECT_TRUE(onRejected.isNull()); |
} |
-TEST_F(ReadableStreamTest, EnqueTwiceAndRead) |
+TEST_F(ReadableStreamTest, EnqueueTwiceAndRead) |
{ |
StringStream* stream = construct(); |
Checkpoint checkpoint; |
@@ -483,6 +470,7 @@ TEST_F(ReadableStreamTest, EnqueTwiceAndRead) |
{ |
InSequence s; |
EXPECT_CALL(checkpoint, Call(0)); |
+ EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
EXPECT_CALL(checkpoint, Call(1)); |
} |
@@ -492,14 +480,14 @@ TEST_F(ReadableStreamTest, EnqueTwiceAndRead) |
EXPECT_EQ(ReadableStream::Readable, stream->state()); |
EXPECT_FALSE(stream->isPulling()); |
- checkpoint.Call(0); |
String chunk; |
+ checkpoint.Call(0); |
EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk)); |
checkpoint.Call(1); |
EXPECT_FALSE(m_exceptionState.hadException()); |
EXPECT_EQ("hello", chunk); |
EXPECT_EQ(ReadableStream::Readable, stream->state()); |
- EXPECT_FALSE(stream->isPulling()); |
+ EXPECT_TRUE(stream->isPulling()); |
EXPECT_FALSE(stream->isDraining()); |
ScriptPromise newPromise = stream->wait(scriptState()); |
@@ -509,7 +497,6 @@ TEST_F(ReadableStreamTest, EnqueTwiceAndRead) |
TEST_F(ReadableStreamTest, CloseWhenReadable) |
{ |
StringStream* stream = construct(); |
- String onWaitFulfilled, onWaitRejected; |
String onClosedFulfilled, onClosedRejected; |
stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createCaptor(&onClosedRejected)); |
@@ -538,21 +525,16 @@ TEST_F(ReadableStreamTest, CloseWhenReadable) |
EXPECT_EQ("bye", chunk); |
EXPECT_FALSE(m_exceptionState.hadException()); |
- EXPECT_NE(promise, stream->wait(scriptState())); |
- stream->wait(scriptState()).then(createCaptor(&onWaitFulfilled), createCaptor(&onWaitRejected)); |
+ EXPECT_EQ(promise, stream->wait(scriptState())); |
EXPECT_EQ(ReadableStream::Closed, stream->state()); |
EXPECT_FALSE(stream->isPulling()); |
EXPECT_TRUE(stream->isDraining()); |
- EXPECT_TRUE(onWaitFulfilled.isNull()); |
- EXPECT_TRUE(onWaitRejected.isNull()); |
EXPECT_TRUE(onClosedFulfilled.isNull()); |
EXPECT_TRUE(onClosedRejected.isNull()); |
isolate()->RunMicrotasks(); |
- EXPECT_EQ("undefined", onWaitFulfilled); |
- EXPECT_TRUE(onWaitRejected.isNull()); |
EXPECT_EQ("undefined", onClosedFulfilled); |
EXPECT_TRUE(onClosedRejected.isNull()); |
} |
@@ -604,13 +586,12 @@ TEST_F(ReadableStreamTest, CancelWhenWaiting) |
{ |
InSequence s; |
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1); |
EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).WillOnce(Return(promise)); |
} |
EXPECT_EQ(ReadableStream::Waiting, stream->state()); |
ScriptPromise wait = stream->wait(scriptState()); |
- EXPECT_EQ(promise, stream->cancel(scriptState(), reason)); |
+ EXPECT_NE(promise, stream->cancel(scriptState(), reason)); |
EXPECT_EQ(ReadableStream::Closed, stream->state()); |
EXPECT_EQ(stream->wait(scriptState()), wait); |
@@ -627,6 +608,7 @@ TEST_F(ReadableStreamTest, CancelWhenReadable) |
{ |
StringStream* stream = construct(); |
String onFulfilled, onRejected; |
+ String onCancelFulfilled, onCancelRejected; |
ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason")); |
ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptState()->isolate(), "hello")); |
@@ -638,18 +620,21 @@ TEST_F(ReadableStreamTest, CancelWhenReadable) |
stream->enqueue("hello"); |
ScriptPromise wait = stream->wait(scriptState()); |
EXPECT_EQ(ReadableStream::Readable, stream->state()); |
- EXPECT_EQ(promise, stream->cancel(scriptState(), reason)); |
+ |
+ ScriptPromise cancelResult = stream->cancel(scriptState(), reason); |
+ cancelResult.then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRejected)); |
+ |
+ EXPECT_NE(promise, cancelResult); |
EXPECT_EQ(ReadableStream::Closed, stream->state()); |
- EXPECT_NE(stream->wait(scriptState()), wait); |
+ EXPECT_EQ(stream->wait(scriptState()), wait); |
- stream->wait(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); |
- EXPECT_TRUE(onFulfilled.isNull()); |
- EXPECT_TRUE(onRejected.isNull()); |
+ EXPECT_TRUE(onCancelFulfilled.isNull()); |
+ EXPECT_TRUE(onCancelRejected.isNull()); |
isolate()->RunMicrotasks(); |
- EXPECT_EQ("undefined", onFulfilled); |
- EXPECT_TRUE(onRejected.isNull()); |
+ EXPECT_EQ("undefined", onCancelFulfilled); |
+ EXPECT_TRUE(onCancelRejected.isNull()); |
} |
TEST_F(ReadableStreamTest, ReadableArrayBufferCompileTest) |