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

Side by Side Diff: Source/bindings/v8/ScriptPromiseResolverTest.cpp

Issue 293933002: Remove the Promises old implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 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 unified diff | Download patch
« no previous file with comments | « Source/bindings/v8/ScriptPromiseResolver.cpp ('k') | Source/bindings/v8/ScriptPromiseTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 13 matching lines...) Expand all
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "bindings/v8/ScriptPromiseResolver.h" 32 #include "bindings/v8/ScriptPromiseResolver.h"
33 33
34 #include "RuntimeEnabledFeatures.h"
35 #include "bindings/v8/DOMWrapperWorld.h"
36 #include "bindings/v8/ScriptPromise.h" 34 #include "bindings/v8/ScriptPromise.h"
37 #include "bindings/v8/V8Binding.h" 35 #include "bindings/v8/V8Binding.h"
38 #include "bindings/v8/custom/V8PromiseCustom.h"
39 36
40 #include <gtest/gtest.h> 37 #include <gtest/gtest.h>
41 #include <v8.h> 38 #include <v8.h>
42 39
43 namespace WebCore { 40 namespace WebCore {
44 41
45 namespace { 42 namespace {
46 43
44 class Function : public ScriptFunction {
45 public:
46 static PassOwnPtr<Function> create(v8::Isolate* isolate, String* value)
47 {
48 return adoptPtr(new Function(isolate, value));
49 }
50
51 virtual ScriptValue call(ScriptValue value) OVERRIDE
52 {
53 ASSERT(!value.isEmpty());
54 *m_value = toCoreString(value.v8Value()->ToString());
55 return value;
56 }
57
58 private:
59 Function(v8::Isolate* isolate, String* value) : ScriptFunction(isolate), m_v alue(value) { }
60
61 String* m_value;
62 };
63
47 class ScriptPromiseResolverTest : public testing::Test { 64 class ScriptPromiseResolverTest : public testing::Test {
48 public: 65 public:
49 ScriptPromiseResolverTest() 66 ScriptPromiseResolverTest()
50 : m_isolate(v8::Isolate::GetCurrent()) 67 : m_scope(V8ExecutionScope::create(v8::Isolate::GetCurrent()))
51 { 68 {
69 m_resolver = ScriptPromiseResolver::create(m_scope->scriptState());
52 } 70 }
53 71
54 void SetUp() 72 virtual ~ScriptPromiseResolverTest()
55 { 73 {
56 m_scope = V8ExecutionScope::create(m_isolate); 74 // Run all pending microtasks here.
57 m_resolver = ScriptPromiseResolver::create(m_scope->scriptState()); 75 isolate()->RunMicrotasks();
58 m_promise = m_resolver->promise();
59 } 76 }
60 77
61 void TearDown() 78 v8::Isolate* isolate() { return m_scope->isolate(); }
62 {
63 m_resolver = nullptr;
64 m_promise.clear();
65 m_scope.clear();
66 }
67
68 V8PromiseCustom::PromiseState state()
69 {
70 return V8PromiseCustom::getState(V8PromiseCustom::getInternal(promise()) );
71 }
72
73 v8::Local<v8::Value> result()
74 {
75 return V8PromiseCustom::getInternal(promise())->GetInternalField(V8Promi seCustom::InternalResultIndex);
76 }
77
78 v8::Local<v8::Object> promise()
79 {
80 ASSERT(!m_promise.isEmpty());
81 return m_promise.v8Value().As<v8::Object>();
82 }
83 79
84 protected: 80 protected:
85 v8::Isolate* m_isolate;
86 RefPtr<ScriptPromiseResolver> m_resolver; 81 RefPtr<ScriptPromiseResolver> m_resolver;
87 ScriptPromise m_promise;
88 private:
89 OwnPtr<V8ExecutionScope> m_scope; 82 OwnPtr<V8ExecutionScope> m_scope;
90 }; 83 };
91 84
92 TEST_F(ScriptPromiseResolverTest, initialState) 85 TEST_F(ScriptPromiseResolverTest, initialState)
93 { 86 {
94 if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) 87 ScriptPromise promise = m_resolver->promise();
95 return; 88 ASSERT_FALSE(promise.isEmpty());
96 EXPECT_EQ(V8PromiseCustom::Pending, state()); 89 String onFulfilled, onRejected;
97 EXPECT_TRUE(result()->IsUndefined()); 90 promise.then(Function::create(isolate(), &onFulfilled), Function::create(iso late(), &onRejected));
91
92 EXPECT_EQ(String(), onFulfilled);
93 EXPECT_EQ(String(), onRejected);
94
95 isolate()->RunMicrotasks();
96
97 EXPECT_EQ(String(), onFulfilled);
98 EXPECT_EQ(String(), onRejected);
98 } 99 }
99 100
100 TEST_F(ScriptPromiseResolverTest, resolve) 101 TEST_F(ScriptPromiseResolverTest, resolve)
101 { 102 {
102 if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) 103 ScriptPromise promise = m_resolver->promise();
103 return; 104 ASSERT_FALSE(promise.isEmpty());
104 EXPECT_EQ(V8PromiseCustom::Pending, state()); 105 String onFulfilled, onRejected;
105 EXPECT_TRUE(result()->IsUndefined()); 106 promise.then(Function::create(isolate(), &onFulfilled), Function::create(iso late(), &onRejected));
106 107
107 m_resolver->resolve(ScriptValue(ScriptState::current(m_isolate), v8::Integer ::New(m_isolate, 3))); 108 EXPECT_EQ(String(), onFulfilled);
109 EXPECT_EQ(String(), onRejected);
108 110
109 EXPECT_EQ(V8PromiseCustom::Fulfilled, state()); 111 m_resolver->resolve("hello");
110 ASSERT_TRUE(result()->IsNumber()); 112 EXPECT_TRUE(m_resolver->promise().isEmpty());
111 EXPECT_EQ(3, result().As<v8::Integer>()->Value()); 113 isolate()->RunMicrotasks();
114
115 EXPECT_EQ("hello", onFulfilled);
116 EXPECT_EQ(String(), onRejected);
112 } 117 }
113 118
114 TEST_F(ScriptPromiseResolverTest, reject) 119 TEST_F(ScriptPromiseResolverTest, reject)
115 { 120 {
116 if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) 121 ScriptPromise promise = m_resolver->promise();
117 return; 122 ASSERT_FALSE(promise.isEmpty());
118 EXPECT_EQ(V8PromiseCustom::Pending, state()); 123 String onFulfilled, onRejected;
119 EXPECT_TRUE(result()->IsUndefined()); 124 promise.then(Function::create(isolate(), &onFulfilled), Function::create(iso late(), &onRejected));
120 125
121 m_resolver->reject(ScriptValue(ScriptState::current(m_isolate), v8::Integer: :New(m_isolate, 3))); 126 EXPECT_EQ(String(), onFulfilled);
127 EXPECT_EQ(String(), onRejected);
122 128
123 EXPECT_EQ(V8PromiseCustom::Rejected, state()); 129 m_resolver->reject("hello");
124 ASSERT_TRUE(result()->IsNumber()); 130 EXPECT_TRUE(m_resolver->promise().isEmpty());
125 EXPECT_EQ(3, result().As<v8::Integer>()->Value()); 131 isolate()->RunMicrotasks();
132
133 EXPECT_EQ(String(), onFulfilled);
134 EXPECT_EQ("hello", onRejected);
126 } 135 }
127 136
128 TEST_F(ScriptPromiseResolverTest, resolveOverResolve) 137 TEST_F(ScriptPromiseResolverTest, resolveOverResolve)
129 { 138 {
130 if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) 139 ScriptPromise promise = m_resolver->promise();
131 return; 140 ASSERT_FALSE(promise.isEmpty());
132 EXPECT_EQ(V8PromiseCustom::Pending, state()); 141 String onFulfilled, onRejected;
133 EXPECT_TRUE(result()->IsUndefined()); 142 promise.then(Function::create(isolate(), &onFulfilled), Function::create(iso late(), &onRejected));
134 143
135 m_resolver->resolve(ScriptValue(ScriptState::current(m_isolate), v8::Integer ::New(m_isolate, 3))); 144 EXPECT_EQ(String(), onFulfilled);
145 EXPECT_EQ(String(), onRejected);
136 146
137 EXPECT_EQ(V8PromiseCustom::Fulfilled, state()); 147 m_resolver->resolve("hello");
138 ASSERT_TRUE(result()->IsNumber()); 148 EXPECT_TRUE(m_resolver->promise().isEmpty());
139 EXPECT_EQ(3, result().As<v8::Integer>()->Value()); 149 isolate()->RunMicrotasks();
140 150
141 m_resolver->resolve(ScriptValue(ScriptState::current(m_isolate), v8::Integer ::New(m_isolate, 4))); 151 EXPECT_EQ("hello", onFulfilled);
142 EXPECT_EQ(V8PromiseCustom::Fulfilled, state()); 152 EXPECT_EQ(String(), onRejected);
143 ASSERT_TRUE(result()->IsNumber()); 153
144 EXPECT_EQ(3, result().As<v8::Integer>()->Value()); 154 m_resolver->resolve("world");
155 isolate()->RunMicrotasks();
156
157 EXPECT_EQ("hello", onFulfilled);
158 EXPECT_EQ(String(), onRejected);
145 } 159 }
146 160
147 TEST_F(ScriptPromiseResolverTest, rejectOverResolve) 161 TEST_F(ScriptPromiseResolverTest, rejectOverResolve)
148 { 162 {
149 if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) 163 ScriptPromise promise = m_resolver->promise();
150 return; 164 ASSERT_FALSE(promise.isEmpty());
151 EXPECT_EQ(V8PromiseCustom::Pending, state()); 165 String onFulfilled, onRejected;
152 EXPECT_TRUE(result()->IsUndefined()); 166 promise.then(Function::create(isolate(), &onFulfilled), Function::create(iso late(), &onRejected));
153 167
154 m_resolver->resolve(ScriptValue(ScriptState::current(m_isolate), v8::Integer ::New(m_isolate, 3))); 168 EXPECT_EQ(String(), onFulfilled);
169 EXPECT_EQ(String(), onRejected);
155 170
156 EXPECT_EQ(V8PromiseCustom::Fulfilled, state()); 171 m_resolver->resolve("hello");
157 ASSERT_TRUE(result()->IsNumber()); 172 EXPECT_TRUE(m_resolver->promise().isEmpty());
158 EXPECT_EQ(3, result().As<v8::Integer>()->Value()); 173 isolate()->RunMicrotasks();
159 174
160 m_resolver->reject(ScriptValue(ScriptState::current(m_isolate), v8::Integer: :New(m_isolate, 4))); 175 EXPECT_EQ("hello", onFulfilled);
161 EXPECT_EQ(V8PromiseCustom::Fulfilled, state()); 176 EXPECT_EQ(String(), onRejected);
162 ASSERT_TRUE(result()->IsNumber()); 177
163 EXPECT_EQ(3, result().As<v8::Integer>()->Value()); 178 m_resolver->reject("world");
179 isolate()->RunMicrotasks();
180
181 EXPECT_EQ("hello", onFulfilled);
182 EXPECT_EQ(String(), onRejected);
164 } 183 }
165 184
166 } // namespace 185 } // namespace
167 186
168 } // namespace WebCore 187 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/bindings/v8/ScriptPromiseResolver.cpp ('k') | Source/bindings/v8/ScriptPromiseTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698