summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp184
1 files changed, 98 insertions, 86 deletions
diff --git a/chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp b/chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp
index 26b796dd892..8a21cf7896b 100644
--- a/chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp
+++ b/chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp
@@ -33,7 +33,6 @@
#include "bindings/v8/ScriptPromise.h"
#include "bindings/v8/V8Binding.h"
-#include "bindings/v8/custom/V8PromiseCustom.h"
#include <gtest/gtest.h>
#include <v8.h>
@@ -42,132 +41,145 @@ namespace WebCore {
namespace {
-class ScriptPromiseResolverTest : public testing::Test {
+class Function : public ScriptFunction {
public:
- ScriptPromiseResolverTest()
- : m_isolate(v8::Isolate::GetCurrent())
- , m_handleScope(m_isolate)
- , m_context(m_isolate, v8::Context::New(m_isolate))
- , m_contextScope(m_context.newLocal(m_isolate))
+ static PassOwnPtr<Function> create(v8::Isolate* isolate, String* value)
{
+ return adoptPtr(new Function(isolate, value));
}
- void SetUp()
+ virtual ScriptValue call(ScriptValue value) OVERRIDE
{
- v8::Handle<v8::Context> context(m_context.newLocal(m_isolate));
- V8PerContextDataHolder::install(context);
- m_perContextData = V8PerContextData::create(context);
- m_perContextData->init();
- m_promise = ScriptPromise::createPending();
- m_resolver = ScriptPromiseResolver::create(m_promise);
+ ASSERT(!value.isEmpty());
+ *m_value = toCoreString(value.v8Value()->ToString());
+ return value;
}
- void TearDown()
- {
- m_resolver = 0;
- m_promise.clear();
- m_perContextData.clear();
- }
+private:
+ Function(v8::Isolate* isolate, String* value) : ScriptFunction(isolate), m_value(value) { }
- V8PromiseCustom::PromiseState state()
- {
- return V8PromiseCustom::getState(V8PromiseCustom::getInternal(promise()));
- }
+ String* m_value;
+};
- v8::Local<v8::Value> result()
+class ScriptPromiseResolverTest : public testing::Test {
+public:
+ ScriptPromiseResolverTest()
+ : m_scope(v8::Isolate::GetCurrent())
{
- return V8PromiseCustom::getInternal(promise())->GetInternalField(V8PromiseCustom::InternalResultIndex);
+ m_resolver = ScriptPromiseResolver::create(m_scope.scriptState());
}
- v8::Local<v8::Object> promise()
+ virtual ~ScriptPromiseResolverTest()
{
- ASSERT(!m_promise.hasNoValue());
- return m_promise.v8Value().As<v8::Object>();
+ // Run all pending microtasks here.
+ isolate()->RunMicrotasks();
}
+ v8::Isolate* isolate() { return m_scope.isolate(); }
+
protected:
- v8::Isolate* m_isolate;
- v8::HandleScope m_handleScope;
- ScopedPersistent<v8::Context> m_context;
- v8::Context::Scope m_contextScope;
RefPtr<ScriptPromiseResolver> m_resolver;
- ScriptPromise m_promise;
- OwnPtr<V8PerContextData> m_perContextData;
+ V8TestingScope m_scope;
};
TEST_F(ScriptPromiseResolverTest, initialState)
{
- EXPECT_TRUE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Pending, state());
- EXPECT_TRUE(result()->IsUndefined());
+ ScriptPromise promise = m_resolver->promise();
+ ASSERT_FALSE(promise.isEmpty());
+ String onFulfilled, onRejected;
+ promise.then(Function::create(isolate(), &onFulfilled), Function::create(isolate(), &onRejected));
+
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ(String(), onRejected);
+
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ(String(), onRejected);
}
TEST_F(ScriptPromiseResolverTest, resolve)
{
- EXPECT_TRUE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Pending, state());
- EXPECT_TRUE(result()->IsUndefined());
+ ScriptPromise promise = m_resolver->promise();
+ ASSERT_FALSE(promise.isEmpty());
+ String onFulfilled, onRejected;
+ promise.then(Function::create(isolate(), &onFulfilled), Function::create(isolate(), &onRejected));
+
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ(String(), onRejected);
- m_resolver->resolve(ScriptValue(v8::Integer::New(3, m_isolate), m_isolate));
+ m_resolver->resolve("hello");
+ EXPECT_TRUE(m_resolver->promise().isEmpty());
+ isolate()->RunMicrotasks();
- EXPECT_FALSE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Fulfilled, state());
- ASSERT_TRUE(result()->IsNumber());
- EXPECT_EQ(3, result().As<v8::Integer>()->Value());
+ EXPECT_EQ("hello", onFulfilled);
+ EXPECT_EQ(String(), onRejected);
}
TEST_F(ScriptPromiseResolverTest, reject)
{
- EXPECT_TRUE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Pending, state());
- EXPECT_TRUE(result()->IsUndefined());
+ ScriptPromise promise = m_resolver->promise();
+ ASSERT_FALSE(promise.isEmpty());
+ String onFulfilled, onRejected;
+ promise.then(Function::create(isolate(), &onFulfilled), Function::create(isolate(), &onRejected));
- m_resolver->reject(ScriptValue(v8::Integer::New(3, m_isolate), m_isolate));
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ(String(), onRejected);
- EXPECT_FALSE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Rejected, state());
- ASSERT_TRUE(result()->IsNumber());
- EXPECT_EQ(3, result().As<v8::Integer>()->Value());
+ m_resolver->reject("hello");
+ EXPECT_TRUE(m_resolver->promise().isEmpty());
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ("hello", onRejected);
}
TEST_F(ScriptPromiseResolverTest, resolveOverResolve)
{
- EXPECT_TRUE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Pending, state());
- EXPECT_TRUE(result()->IsUndefined());
-
- m_resolver->resolve(ScriptValue(v8::Integer::New(3, m_isolate), m_isolate));
-
- EXPECT_FALSE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Fulfilled, state());
- ASSERT_TRUE(result()->IsNumber());
- EXPECT_EQ(3, result().As<v8::Integer>()->Value());
-
- m_resolver->resolve(ScriptValue(v8::Integer::New(4, m_isolate), m_isolate));
- EXPECT_FALSE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Fulfilled, state());
- ASSERT_TRUE(result()->IsNumber());
- EXPECT_EQ(3, result().As<v8::Integer>()->Value());
+ ScriptPromise promise = m_resolver->promise();
+ ASSERT_FALSE(promise.isEmpty());
+ String onFulfilled, onRejected;
+ promise.then(Function::create(isolate(), &onFulfilled), Function::create(isolate(), &onRejected));
+
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ(String(), onRejected);
+
+ m_resolver->resolve("hello");
+ EXPECT_TRUE(m_resolver->promise().isEmpty());
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ("hello", onFulfilled);
+ EXPECT_EQ(String(), onRejected);
+
+ m_resolver->resolve("world");
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ("hello", onFulfilled);
+ EXPECT_EQ(String(), onRejected);
}
TEST_F(ScriptPromiseResolverTest, rejectOverResolve)
{
- EXPECT_TRUE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Pending, state());
- EXPECT_TRUE(result()->IsUndefined());
-
- m_resolver->resolve(ScriptValue(v8::Integer::New(3, m_isolate), m_isolate));
-
- EXPECT_FALSE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Fulfilled, state());
- ASSERT_TRUE(result()->IsNumber());
- EXPECT_EQ(3, result().As<v8::Integer>()->Value());
-
- m_resolver->reject(ScriptValue(v8::Integer::New(4, m_isolate), m_isolate));
- EXPECT_FALSE(m_resolver->isPending());
- EXPECT_EQ(V8PromiseCustom::Fulfilled, state());
- ASSERT_TRUE(result()->IsNumber());
- EXPECT_EQ(3, result().As<v8::Integer>()->Value());
+ ScriptPromise promise = m_resolver->promise();
+ ASSERT_FALSE(promise.isEmpty());
+ String onFulfilled, onRejected;
+ promise.then(Function::create(isolate(), &onFulfilled), Function::create(isolate(), &onRejected));
+
+ EXPECT_EQ(String(), onFulfilled);
+ EXPECT_EQ(String(), onRejected);
+
+ m_resolver->resolve("hello");
+ EXPECT_TRUE(m_resolver->promise().isEmpty());
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ("hello", onFulfilled);
+ EXPECT_EQ(String(), onRejected);
+
+ m_resolver->reject("world");
+ isolate()->RunMicrotasks();
+
+ EXPECT_EQ("hello", onFulfilled);
+ EXPECT_EQ(String(), onRejected);
}
} // namespace