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

Unified Diff: third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp

Issue 1167343002: Add methods for creating V8 extras-based ReadableStreams from C++ (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase on smaller CLs; move ReadableStreamController Created 4 years, 11 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
Index: third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp
diff --git a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp
index 97151473f77fa4024ab66ff8d688efa883df1554..224f9160c245257c2531e53a943ca8bb019e0073 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp
@@ -5,15 +5,18 @@
#include "bindings/core/v8/ReadableStreamOperations.h"
#include "bindings/core/v8/ExceptionState.h"
+#include "bindings/core/v8/ReadableStreamController.h"
#include "bindings/core/v8/ScriptFunction.h"
#include "bindings/core/v8/ScriptState.h"
#include "bindings/core/v8/ScriptValue.h"
+#include "bindings/core/v8/ScriptWrappable.h"
#include "bindings/core/v8/V8Binding.h"
#include "bindings/core/v8/V8BindingForTesting.h"
#include "bindings/core/v8/V8BindingMacros.h"
#include "bindings/core/v8/V8IteratorResultValue.h"
#include "bindings/core/v8/V8ThrowException.h"
#include "core/dom/Document.h"
+#include "core/streams/UnderlyingSourceBase.h"
#include "platform/heap/Handle.h"
#include "testing/gtest/include/gtest/gtest.h"
#include <v8.h>
@@ -110,6 +113,20 @@ private:
Member<Iteration> m_iteration;
};
+class UnderlyingSourceTest final : public UnderlyingSourceBase {
yhirano 2016/01/25 11:10:32 Can you rename this class to something like FakeUn
domenic 2016/02/02 22:59:55 done
+public:
+ UnderlyingSourceTest(ScriptState* scriptState)
yhirano 2016/01/25 11:10:33 +explicit
domenic 2016/02/02 22:59:55 done
+ : UnderlyingSourceBase(scriptState)
+ {
+ }
+
+ // Just expose the controller methods for easy testing
+ void enqueue(ScriptValue v) { controller()->enqueue(v); }
+ void close() { controller()->close(); }
+ void error(ScriptValue e) { controller()->error(e); }
+ double desiredSize() { return controller()->desiredSize(); }
+};
+
class ReadableStreamOperationsTest : public ::testing::Test {
public:
ReadableStreamOperationsTest()
@@ -260,6 +277,63 @@ TEST_F(ReadableStreamOperationsTest, Read)
EXPECT_TRUE(it2->isDone());
}
+TEST_F(ReadableStreamOperationsTest, CreateReadableStreamWithCustomUnderlyingSourceAndStrategy)
+{
+ auto underlyingSource = new UnderlyingSourceTest(scriptState());
+
+ ScriptValue strategy = ReadableStreamOperations::createCountQueuingStrategy(scriptState(), 10);
+ ASSERT_FALSE(strategy.isEmpty());
+
+ ScriptValue stream = ReadableStreamOperations::createReadableStream(scriptState(), underlyingSource, strategy);
+ ASSERT_FALSE(stream.isEmpty());
+
+ EXPECT_EQ(10, underlyingSource->desiredSize());
+
+ underlyingSource->enqueue(ScriptValue::from(scriptState(), "a"));
+ EXPECT_EQ(9, underlyingSource->desiredSize());
+
+ underlyingSource->enqueue(ScriptValue::from(scriptState(), "b"));
+ EXPECT_EQ(8, underlyingSource->desiredSize());
+
+ ScriptValue reader;
+ {
+ TrackExceptionState es;
+ reader = ReadableStreamOperations::getReader(scriptState(), stream, es);
+ ASSERT_FALSE(es.hadException());
+ }
+ ASSERT_FALSE(reader.isEmpty());
+
+ Iteration* it1 = new Iteration();
+ Iteration* it2 = new Iteration();
+ Iteration* it3 = new Iteration();
+ ReadableStreamOperations::read(scriptState(), reader).then(Function::createFunction(scriptState(), it1), NotReached::createFunction(scriptState()));
+ ReadableStreamOperations::read(scriptState(), reader).then(Function::createFunction(scriptState(), it2), NotReached::createFunction(scriptState()));
+ ReadableStreamOperations::read(scriptState(), reader).then(Function::createFunction(scriptState(), it3), NotReached::createFunction(scriptState()));
+
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ(10, underlyingSource->desiredSize());
+
+ EXPECT_TRUE(it1->isSet());
+ EXPECT_TRUE(it1->isValid());
+ EXPECT_FALSE(it1->isDone());
+ EXPECT_EQ("a", it1->value());
+
+ EXPECT_TRUE(it2->isSet());
+ EXPECT_TRUE(it2->isValid());
+ EXPECT_FALSE(it2->isDone());
+ EXPECT_EQ("b", it2->value());
+
+ EXPECT_FALSE(it3->isSet());
+
+ underlyingSource->close();
+ isolate()->RunMicrotasks();
+
+ EXPECT_TRUE(it3->isSet());
+ EXPECT_TRUE(it3->isValid());
+ EXPECT_TRUE(it3->isDone());
+}
+
} // namespace
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698