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

Unified Diff: Source/core/streams/ReadableStreamTest.cpp

Issue 1004623007: Streams Implementation Update: async read (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@stream-reader-read
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/streams/ReadableStreamReaderTest.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/streams/ReadableStreamTest.cpp
diff --git a/Source/core/streams/ReadableStreamTest.cpp b/Source/core/streams/ReadableStreamTest.cpp
index 7221ee4d319bb1ddb1a132480d96b71e3ebfa430..41310805fdc9fd818fcfdb19cc934c6b00000a69 100644
--- a/Source/core/streams/ReadableStreamTest.cpp
+++ b/Source/core/streams/ReadableStreamTest.cpp
@@ -99,6 +99,8 @@ private:
} // unnamed namespace
+// ReadableStream::read and some related functionalities are tested in
+// ReadableStreamReaderTest.
class ReadableStreamTest : public ::testing::Test {
public:
ReadableStreamTest()
@@ -173,7 +175,7 @@ TEST_F(ReadableStreamTest, Start)
EXPECT_FALSE(stream->isStarted());
EXPECT_FALSE(stream->isDraining());
EXPECT_FALSE(stream->isPulling());
- EXPECT_EQ(stream->stateInternal(), ReadableStream::Waiting);
+ EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable);
checkpoint.Call(0);
stream->didSourceStart();
@@ -182,7 +184,7 @@ TEST_F(ReadableStreamTest, Start)
EXPECT_TRUE(stream->isStarted());
EXPECT_FALSE(stream->isDraining());
EXPECT_TRUE(stream->isPulling());
- EXPECT_EQ(stream->stateInternal(), ReadableStream::Waiting);
+ EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable);
// We need to call |error| in order to make
// ActiveDOMObject::hasPendingActivity return false.
@@ -196,7 +198,7 @@ TEST_F(ReadableStreamTest, StartFail)
EXPECT_FALSE(stream->isStarted());
EXPECT_FALSE(stream->isDraining());
EXPECT_FALSE(stream->isPulling());
- EXPECT_EQ(stream->stateInternal(), ReadableStream::Waiting);
+ EXPECT_EQ(stream->stateInternal(), ReadableStream::Readable);
stream->error(DOMException::create(NotFoundError));
@@ -206,68 +208,6 @@ TEST_F(ReadableStreamTest, StartFail)
EXPECT_EQ(stream->stateInternal(), ReadableStream::Errored);
}
-TEST_F(ReadableStreamTest, WaitOnWaiting)
-{
- StringStream* stream = construct();
- Checkpoint checkpoint;
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(stream->isStarted());
- EXPECT_TRUE(stream->isPulling());
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
-
- stream->error(DOMException::create(AbortError, "done"));
-}
-
-TEST_F(ReadableStreamTest, WaitDuringStarting)
-{
- StringStream* stream = new StringStream(scriptState()->executionContext(), m_underlyingSource);
- Checkpoint checkpoint;
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_FALSE(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));
- }
-
- stream->ready(scriptState());
- checkpoint.Call(0);
- stream->didSourceStart();
- checkpoint.Call(1);
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(stream->isStarted());
- EXPECT_TRUE(stream->isPulling());
-
- stream->error(DOMException::create(AbortError, "done"));
-}
-
-TEST_F(ReadableStreamTest, WaitAndError)
-{
- StringStream* stream = construct();
- String onFulfilled, onRejected;
-
- ScriptPromise promise = stream->ready(scriptState());
- promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(stream->isPulling());
- stream->error(DOMException::create(NotFoundError, "hello, error"));
- EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
- EXPECT_TRUE(stream->isPulling());
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- isolate()->RunMicrotasks();
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_EQ("NotFoundError: hello, error", onRejected);
-}
-
TEST_F(ReadableStreamTest, ErrorAndEnqueue)
{
StringStream* stream = construct();
@@ -292,253 +232,15 @@ TEST_F(ReadableStreamTest, CloseAndEnqueue)
EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
}
-TEST_F(ReadableStreamTest, EnqueueAndWait)
-{
- StringStream* stream = construct();
- String onFulfilled, onRejected;
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
-
- bool result = stream->enqueue("hello");
- EXPECT_TRUE(result);
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
-
- stream->ready(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
- EXPECT_FALSE(stream->isPulling());
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- isolate()->RunMicrotasks();
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
- EXPECT_FALSE(stream->isPulling());
- EXPECT_EQ("undefined", onFulfilled);
- EXPECT_TRUE(onRejected.isNull());
-
- stream->error(DOMException::create(AbortError, "done"));
-}
-
-TEST_F(ReadableStreamTest, WaitAndEnqueue)
-{
- StringStream* stream = construct();
- String onFulfilled, onRejected;
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
-
- stream->ready(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
- isolate()->RunMicrotasks();
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(stream->isPulling());
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- bool result = stream->enqueue("hello");
- EXPECT_TRUE(result);
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
- EXPECT_FALSE(stream->isPulling());
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- isolate()->RunMicrotasks();
- EXPECT_EQ("undefined", onFulfilled);
- EXPECT_TRUE(onRejected.isNull());
-
- stream->error(DOMException::create(AbortError, "done"));
-}
-
-TEST_F(ReadableStreamTest, WaitAndEnqueueAndError)
-{
- StringStream* stream = construct();
- String onFulfilled, onRejected;
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
-
- ScriptPromise promise = stream->ready(scriptState());
- promise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
- isolate()->RunMicrotasks();
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(stream->isPulling());
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- bool result = stream->enqueue("hello");
- EXPECT_TRUE(result);
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
- EXPECT_FALSE(stream->isPulling());
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- isolate()->RunMicrotasks();
- EXPECT_EQ("undefined", onFulfilled);
- EXPECT_TRUE(onRejected.isNull());
-
- stream->error(DOMException::create(NotFoundError, "error"));
- EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
-
- EXPECT_NE(promise, stream->ready(scriptState()));
-}
-
-TEST_F(ReadableStreamTest, CloseWhenWaiting)
-{
- String onWaitFulfilled, onWaitRejected;
- String onClosedFulfilled, onClosedRejected;
-
- StringStream* stream = construct();
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- stream->ready(scriptState()).then(createCaptor(&onWaitFulfilled), createCaptor(&onWaitRejected));
- stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createCaptor(&onClosedRejected));
-
- isolate()->RunMicrotasks();
- EXPECT_TRUE(onWaitFulfilled.isNull());
- EXPECT_TRUE(onWaitRejected.isNull());
- EXPECT_TRUE(onClosedFulfilled.isNull());
- EXPECT_TRUE(onClosedRejected.isNull());
-
- stream->close();
- EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
- isolate()->RunMicrotasks();
- EXPECT_EQ("undefined", onWaitFulfilled);
- EXPECT_TRUE(onWaitRejected.isNull());
- EXPECT_EQ("undefined", onClosedFulfilled);
- EXPECT_TRUE(onClosedRejected.isNull());
-}
-
TEST_F(ReadableStreamTest, CloseWhenErrored)
{
- String onFulfilled, onRejected;
StringStream* stream = construct();
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- stream->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
+ EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
stream->error(DOMException::create(NotFoundError, "error"));
stream->close();
EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
- isolate()->RunMicrotasks();
-
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_EQ("NotFoundError: error", onRejected);
-}
-
-TEST_F(ReadableStreamTest, ReadWhenWaiting)
-{
- StringStream* stream = construct();
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_FALSE(m_exceptionState.hadException());
-
- stream->read(scriptState(), m_exceptionState);
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(m_exceptionState.hadException());
- EXPECT_EQ(V8TypeError, m_exceptionState.code());
- EXPECT_EQ("read is called while state is waiting", m_exceptionState.message());
-
- stream->error(DOMException::create(AbortError, "done"));
-}
-
-TEST_F(ReadableStreamTest, ReadWhenClosed)
-{
- StringStream* stream = construct();
- stream->close();
-
- EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
- EXPECT_FALSE(m_exceptionState.hadException());
-
- stream->read(scriptState(), m_exceptionState);
- EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
- EXPECT_TRUE(m_exceptionState.hadException());
- EXPECT_EQ(V8TypeError, m_exceptionState.code());
- EXPECT_EQ("read is called while state is closed", m_exceptionState.message());
-}
-
-TEST_F(ReadableStreamTest, ReadWhenErrored)
-{
- // DOMException values specified in the spec are different from enum values
- // defined in ExceptionCode.h.
- const int notFoundExceptionCode = 8;
- StringStream* stream = construct();
- stream->error(DOMException::create(NotFoundError, "error"));
-
- EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
- EXPECT_FALSE(m_exceptionState.hadException());
-
- stream->read(scriptState(), m_exceptionState);
- EXPECT_EQ(ReadableStream::Errored, stream->stateInternal());
- EXPECT_TRUE(m_exceptionState.hadException());
- EXPECT_EQ(notFoundExceptionCode, m_exceptionState.code());
- EXPECT_EQ("error", m_exceptionState.message());
-}
-
-TEST_F(ReadableStreamTest, EnqueuedAndRead)
-{
- StringStream* stream = construct();
- String onFulfilled, onRejected;
- Checkpoint checkpoint;
-
- {
- InSequence s;
- EXPECT_CALL(checkpoint, Call(0));
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
- EXPECT_CALL(checkpoint, Call(1));
- }
-
- stream->enqueue("hello");
- ScriptPromise promise = stream->ready(scriptState());
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
- EXPECT_FALSE(stream->isPulling());
-
- checkpoint.Call(0);
- String chunk;
- EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
- checkpoint.Call(1);
- EXPECT_FALSE(m_exceptionState.hadException());
- EXPECT_EQ("hello", chunk);
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- EXPECT_TRUE(stream->isPulling());
- EXPECT_FALSE(stream->isDraining());
-
- ScriptPromise newPromise = stream->ready(scriptState());
- newPromise.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
- isolate()->RunMicrotasks();
- EXPECT_NE(promise, newPromise);
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- stream->error(DOMException::create(AbortError, "done"));
- isolate()->RunMicrotasks();
-}
-
-TEST_F(ReadableStreamTest, EnqueueTwiceAndRead)
-{
- StringStream* stream = construct();
- Checkpoint checkpoint;
-
- {
- InSequence s;
- EXPECT_CALL(checkpoint, Call(0));
- EXPECT_CALL(*m_underlyingSource, pullSource()).Times(1);
- EXPECT_CALL(checkpoint, Call(1));
- }
-
- EXPECT_TRUE(stream->enqueue("hello"));
- EXPECT_TRUE(stream->enqueue("bye"));
- ScriptPromise promise = stream->ready(scriptState());
- EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
- EXPECT_FALSE(stream->isPulling());
-
- 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->stateInternal());
- EXPECT_TRUE(stream->isPulling());
- EXPECT_FALSE(stream->isDraining());
-
- ScriptPromise newPromise = stream->ready(scriptState());
- EXPECT_EQ(promise, newPromise);
-
- stream->error(DOMException::create(AbortError, "done"));
}
TEST_F(ReadableStreamTest, ReadQueue)
@@ -560,7 +262,6 @@ TEST_F(ReadableStreamTest, ReadQueue)
EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
EXPECT_FALSE(stream->isPulling());
- String chunk;
checkpoint.Call(0);
stream->readInternal(queue);
checkpoint.Call(1);
@@ -569,7 +270,7 @@ TEST_F(ReadableStreamTest, ReadQueue)
EXPECT_EQ(std::make_pair(String("hello"), static_cast<size_t>(5)), queue[0]);
EXPECT_EQ(std::make_pair(String("bye"), static_cast<size_t>(3)), queue[1]);
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
+ EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
EXPECT_TRUE(stream->isPulling());
EXPECT_FALSE(stream->isDraining());
}
@@ -577,23 +278,17 @@ TEST_F(ReadableStreamTest, ReadQueue)
TEST_F(ReadableStreamTest, CloseWhenReadable)
{
StringStream* stream = construct();
- String onClosedFulfilled, onClosedRejected;
- stream->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createCaptor(&onClosedRejected));
EXPECT_TRUE(stream->enqueue("hello"));
EXPECT_TRUE(stream->enqueue("bye"));
stream->close();
EXPECT_FALSE(stream->enqueue("should be ignored"));
- ScriptPromise promise = stream->ready(scriptState());
EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
EXPECT_FALSE(stream->isPulling());
EXPECT_TRUE(stream->isDraining());
- String chunk;
- EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
- EXPECT_EQ("hello", chunk);
- EXPECT_EQ(promise, stream->ready(scriptState()));
+ stream->read(scriptState());
isolate()->RunMicrotasks();
@@ -601,22 +296,11 @@ TEST_F(ReadableStreamTest, CloseWhenReadable)
EXPECT_FALSE(stream->isPulling());
EXPECT_TRUE(stream->isDraining());
- EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
- EXPECT_EQ("bye", chunk);
- EXPECT_FALSE(m_exceptionState.hadException());
-
- EXPECT_EQ(promise, stream->ready(scriptState()));
+ stream->read(scriptState());
EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
EXPECT_FALSE(stream->isPulling());
EXPECT_TRUE(stream->isDraining());
-
- EXPECT_TRUE(onClosedFulfilled.isNull());
- EXPECT_TRUE(onClosedRejected.isNull());
-
- isolate()->RunMicrotasks();
- EXPECT_EQ("undefined", onClosedFulfilled);
- EXPECT_TRUE(onClosedRejected.isNull());
}
TEST_F(ReadableStreamTest, CancelWhenClosed)
@@ -657,32 +341,6 @@ TEST_F(ReadableStreamTest, CancelWhenErrored)
EXPECT_EQ("NotFoundError: error", onRejected);
}
-TEST_F(ReadableStreamTest, CancelWhenWaiting)
-{
- StringStream* stream = construct();
- String onFulfilled, onRejected;
- ScriptValue reason(scriptState(), v8String(scriptState()->isolate(), "reason"));
- ScriptPromise promise = ScriptPromise::cast(scriptState(), v8String(scriptState()->isolate(), "hello"));
-
- {
- InSequence s;
- EXPECT_CALL(*m_underlyingSource, cancelSource(scriptState(), reason)).WillOnce(Return(promise));
- }
-
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
- ScriptPromise ready = stream->ready(scriptState());
- EXPECT_NE(promise, stream->cancel(scriptState(), reason));
- EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
-
- ready.then(createCaptor(&onFulfilled), createCaptor(&onRejected));
- EXPECT_TRUE(onFulfilled.isNull());
- EXPECT_TRUE(onRejected.isNull());
-
- isolate()->RunMicrotasks();
- EXPECT_EQ("undefined", onFulfilled);
- EXPECT_TRUE(onRejected.isNull());
-}
-
TEST_F(ReadableStreamTest, CancelWhenReadable)
{
StringStream* stream = construct();
@@ -697,7 +355,6 @@ TEST_F(ReadableStreamTest, CancelWhenReadable)
}
stream->enqueue("hello");
- ScriptPromise ready = stream->ready(scriptState());
EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
ScriptPromise cancelResult = stream->cancel(scriptState(), reason);
@@ -706,8 +363,6 @@ TEST_F(ReadableStreamTest, CancelWhenReadable)
EXPECT_NE(promise, cancelResult);
EXPECT_EQ(ReadableStream::Closed, stream->stateInternal());
- EXPECT_EQ(stream->ready(scriptState()), ready);
-
EXPECT_TRUE(onCancelFulfilled.isNull());
EXPECT_TRUE(onCancelRejected.isNull());
@@ -716,6 +371,29 @@ TEST_F(ReadableStreamTest, CancelWhenReadable)
EXPECT_TRUE(onCancelRejected.isNull());
}
+TEST_F(ReadableStreamTest, CancelWhenLocked)
+{
+ String onFulfilled, onRejected;
+ StringStream* stream = construct();
+ ReadableStreamReader* reader = stream->getReader(m_exceptionState);
+
+ EXPECT_TRUE(reader->isActive());
+ EXPECT_FALSE(m_exceptionState.hadException());
+ EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
+
+ stream->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isolate()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
+
+ EXPECT_TRUE(onFulfilled.isNull());
+ EXPECT_TRUE(onRejected.isNull());
+
+ isolate()->RunMicrotasks();
+
+ EXPECT_TRUE(onFulfilled.isNull());
+ EXPECT_EQ("TypeError: this stream is locked to a ReadableStreamReader", onRejected);
+ EXPECT_TRUE(reader->isActive());
+ EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
+}
+
TEST_F(ReadableStreamTest, ReadableArrayBufferCompileTest)
{
// This test tests if ReadableStreamImpl<DOMArrayBuffer> can be
@@ -729,7 +407,7 @@ TEST_F(ReadableStreamTest, BackpressureOnEnqueueing)
Checkpoint checkpoint;
StringStream* stream = construct(strategy);
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
+ EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
{
InSequence s;
@@ -761,7 +439,7 @@ TEST_F(ReadableStreamTest, BackpressureOnReading)
Checkpoint checkpoint;
StringStream* stream = construct(strategy);
- EXPECT_EQ(ReadableStream::Waiting, stream->stateInternal());
+ EXPECT_EQ(ReadableStream::Readable, stream->stateInternal());
{
InSequence s;
@@ -788,19 +466,15 @@ TEST_F(ReadableStreamTest, BackpressureOnReading)
stream->enqueue("hello");
stream->enqueue("world");
- String chunk;
checkpoint.Call(0);
- EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
- EXPECT_EQ("hello", chunk);
+ stream->read(scriptState());
checkpoint.Call(1);
- EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
- EXPECT_EQ("world", chunk);
+ stream->read(scriptState());
checkpoint.Call(2);
stream->enqueue("foo");
stream->enqueue("bar");
checkpoint.Call(3);
- EXPECT_TRUE(stream->read(scriptState(), m_exceptionState).toString(chunk));
- EXPECT_EQ("foo", chunk);
+ stream->read(scriptState());
checkpoint.Call(4);
stream->error(DOMException::create(AbortError, "done"));
@@ -824,4 +498,46 @@ TEST_F(ReadableStreamTest, ReadableStreamReader)
EXPECT_TRUE(stream->isLockedTo(reader));
}
+TEST_F(ReadableStreamTest, GetClosedReader)
+{
+ StringStream* stream = construct();
+ stream->close();
+ ReadableStreamReader* reader = stream->getReader(m_exceptionState);
+
+ ASSERT_TRUE(reader);
+ EXPECT_FALSE(m_exceptionState.hadException());
+
+ String onFulfilled, onRejected;
+ reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
+
+ EXPECT_FALSE(reader->isActive());
+ EXPECT_TRUE(onFulfilled.isNull());
+ EXPECT_TRUE(onRejected.isNull());
+
+ isolate()->RunMicrotasks();
+ EXPECT_EQ("undefined", onFulfilled);
+ EXPECT_TRUE(onRejected.isNull());
+}
+
+TEST_F(ReadableStreamTest, GetErroredReader)
+{
+ StringStream* stream = construct();
+ stream->error(DOMException::create(SyntaxError, "some error"));
+ ReadableStreamReader* reader = stream->getReader(m_exceptionState);
+
+ ASSERT_TRUE(reader);
+ EXPECT_FALSE(m_exceptionState.hadException());
+
+ String onFulfilled, onRejected;
+ reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&onRejected));
+
+ EXPECT_FALSE(reader->isActive());
+ EXPECT_TRUE(onFulfilled.isNull());
+ EXPECT_TRUE(onRejected.isNull());
+
+ isolate()->RunMicrotasks();
+ EXPECT_TRUE(onFulfilled.isNull());
+ EXPECT_EQ("SyntaxError: some error", onRejected);
+}
+
} // namespace blink
« no previous file with comments | « Source/core/streams/ReadableStreamReaderTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698