diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/bindings/v8/ScriptPromiseResolverTest.cpp | 184 |
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 |