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

Side by Side Diff: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp

Issue 2048823004: PaymentRequest.abort() should return a promise. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved V8TestingScope refactoring into a different patch Created 4 years, 6 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/payments/PaymentRequest.h" 5 #include "modules/payments/PaymentRequest.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/JSONValuesForV8.h" 7 #include "bindings/core/v8/JSONValuesForV8.h"
8 #include "bindings/core/v8/ScriptFunction.h"
9 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
10 #include "bindings/modules/v8/V8PaymentResponse.h" 10 #include "bindings/modules/v8/V8PaymentResponse.h"
11 #include "core/dom/ExceptionCode.h" 11 #include "core/dom/ExceptionCode.h"
12 #include "core/testing/DummyPageHolder.h"
13 #include "modules/payments/CurrencyAmount.h"
14 #include "modules/payments/PaymentAddress.h" 12 #include "modules/payments/PaymentAddress.h"
15 #include "modules/payments/PaymentItem.h" 13 #include "modules/payments/PaymentRequestTestBase.h"
14 #include "modules/payments/PaymentResponse.h"
16 #include "modules/payments/PaymentTestHelper.h" 15 #include "modules/payments/PaymentTestHelper.h"
17 #include "modules/payments/ShippingOption.h"
18 #include "platform/heap/HeapAllocator.h" 16 #include "platform/heap/HeapAllocator.h"
19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
21 #include "wtf/OwnPtr.h"
22 #include <utility> 18 #include <utility>
23 19
24 namespace blink { 20 namespace blink {
25 namespace { 21 namespace {
26 22
27 class PaymentRequestTest : public testing::Test { 23 class PaymentRequestTest : public PaymentRequestTestBase {
28 public:
29 PaymentRequestTest()
30 : m_page(DummyPageHolder::create())
31 {
32 setSecurityOrigin("https://www.example.com/");
33 }
34
35 ~PaymentRequestTest() override {}
36
37 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); }
38 ExceptionState& getExceptionState() { return m_exceptionState; }
39
40 void setSecurityOrigin(const String& securityOrigin)
41 {
42 m_page->document().setSecurityOrigin(SecurityOrigin::create(KURL(KURL(), securityOrigin)));
43 }
44
45 private:
46 OwnPtr<DummyPageHolder> m_page;
47 TrackExceptionState m_exceptionState;
48 }; 24 };
49 25
50 TEST_F(PaymentRequestTest, NoExceptionWithValidData) 26 TEST_F(PaymentRequestTest, NoExceptionWithValidData)
51 { 27 {
52 PaymentRequest::create(getScriptState(), buildPaymentMethodDataForTest(), bu ildPaymentDetailsForTest(), getExceptionState()); 28 PaymentRequest::create(getScriptState(), buildPaymentMethodDataForTest(), bu ildPaymentDetailsForTest(), getExceptionState());
53 29
54 EXPECT_FALSE(getExceptionState().hadException()); 30 EXPECT_FALSE(getExceptionState().hadException());
55 } 31 }
56 32
57 TEST_F(PaymentRequestTest, SecureContextRequired) 33 TEST_F(PaymentRequestTest, SecureContextRequired)
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 shippingOptions[1].setSelected(true); 161 shippingOptions[1].setSelected(true);
186 details.setShippingOptions(shippingOptions); 162 details.setShippingOptions(shippingOptions);
187 PaymentOptions options; 163 PaymentOptions options;
188 options.setRequestShipping(true); 164 options.setRequestShipping(true);
189 165
190 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), details, options, getExceptionState()); 166 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), details, options, getExceptionState());
191 167
192 EXPECT_EQ("express", request->shippingOption()); 168 EXPECT_EQ("express", request->shippingOption());
193 } 169 }
194 170
195 TEST_F(PaymentRequestTest, AbortWithoutShowShouldThrow)
196 {
197 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
198 EXPECT_FALSE(getExceptionState().hadException());
199
200 request->abort(getExceptionState());
201 EXPECT_TRUE(getExceptionState().hadException());
202 }
203
204 class MockFunction : public ScriptFunction {
205 public:
206 static v8::Local<v8::Function> noExpectations(ScriptState* scriptState)
207 {
208 MockFunction* self = new MockFunction(scriptState);
209 return self->bindToV8Function();
210 }
211
212 static v8::Local<v8::Function> expectCall(ScriptState* scriptState)
213 {
214 MockFunction* self = new MockFunction(scriptState);
215 EXPECT_CALL(*self, call(testing::_));
216 return self->bindToV8Function();
217 }
218
219 static v8::Local<v8::Function> expectNoCall(ScriptState* scriptState)
220 {
221 MockFunction* self = new MockFunction(scriptState);
222 EXPECT_CALL(*self, call(testing::_)).Times(0);
223 return self->bindToV8Function();
224 }
225
226 private:
227 explicit MockFunction(ScriptState* scriptState)
228 : ScriptFunction(scriptState)
229 {
230 ON_CALL(*this, call(testing::_)).WillByDefault(testing::ReturnArg<0>());
231 }
232
233 MOCK_METHOD1(call, ScriptValue(ScriptValue));
234 };
235
236 class PaymentResponseFunction : public ScriptFunction {
237 public:
238 static v8::Local<v8::Function> create(ScriptState* scriptState, ScriptValue* outValue)
239 {
240 PaymentResponseFunction* self = new PaymentResponseFunction(scriptState, outValue);
241 return self->bindToV8Function();
242 }
243
244 ScriptValue call(ScriptValue value) override
245 {
246 DCHECK(!value.isEmpty());
247 *m_value = value;
248 return value;
249 }
250
251 private:
252 PaymentResponseFunction(ScriptState* scriptState, ScriptValue* outValue)
253 : ScriptFunction(scriptState)
254 , m_value(outValue)
255 {
256 DCHECK(m_value);
257 }
258
259 ScriptValue* m_value;
260 };
261
262 TEST_F(PaymentRequestTest, CanAbortAfterShow)
263 {
264 ScriptState::Scope scope(getScriptState());
265 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
266 EXPECT_FALSE(getExceptionState().hadException());
267
268 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::noExpectations(getScriptState()));
269 request->abort(getExceptionState());
270
271 EXPECT_FALSE(getExceptionState().hadException());
272 }
273
274 TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddress) 171 TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddress)
275 { 172 {
276 ScriptState::Scope scope(getScriptState()); 173 ScriptState::Scope scope(getScriptState());
277 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 174 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
278 EXPECT_FALSE(getExceptionState().hadException()); 175 EXPECT_FALSE(getExceptionState().hadException());
279 176
280 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 177 request->show(getScriptState()).then(expectNoCall(), expectCall());
281 178
282 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(mojom::blink::PaymentAddress::New()); 179 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(mojom::blink::PaymentAddress::New());
283 } 180 }
284 181
285 TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingTrueAndEmptyShipp ingAddressInResponse) 182 TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingTrueAndEmptyShipp ingAddressInResponse)
286 { 183 {
287 ScriptState::Scope scope(getScriptState()); 184 ScriptState::Scope scope(getScriptState());
288 PaymentOptions options; 185 PaymentOptions options;
289 options.setRequestShipping(true); 186 options.setRequestShipping(true);
290 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 187 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
291 EXPECT_FALSE(getExceptionState().hadException()); 188 EXPECT_FALSE(getExceptionState().hadException());
292 mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest(); 189 mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
293 190
294 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 191 request->show(getScriptState()).then(expectNoCall(), expectCall());
295 192
296 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response)); 193 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response));
297 } 194 }
298 195
299 TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingTrueAndInvalidShi ppingAddressInResponse) 196 TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingTrueAndInvalidShi ppingAddressInResponse)
300 { 197 {
301 ScriptState::Scope scope(getScriptState()); 198 ScriptState::Scope scope(getScriptState());
302 PaymentOptions options; 199 PaymentOptions options;
303 options.setRequestShipping(true); 200 options.setRequestShipping(true);
304 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 201 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
305 EXPECT_FALSE(getExceptionState().hadException()); 202 EXPECT_FALSE(getExceptionState().hadException());
306 mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest(); 203 mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
307 response->shipping_address = mojom::blink::PaymentAddress::New(); 204 response->shipping_address = mojom::blink::PaymentAddress::New();
308 205
309 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 206 request->show(getScriptState()).then(expectNoCall(), expectCall());
310 207
311 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response)); 208 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response));
312 } 209 }
313 210
314 TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingFalseAndShippingA ddressExistsInResponse) 211 TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingFalseAndShippingA ddressExistsInResponse)
315 { 212 {
316 ScriptState::Scope scope(getScriptState()); 213 ScriptState::Scope scope(getScriptState());
317 PaymentOptions options; 214 PaymentOptions options;
318 options.setRequestShipping(false); 215 options.setRequestShipping(false);
319 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 216 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
320 EXPECT_FALSE(getExceptionState().hadException()); 217 EXPECT_FALSE(getExceptionState().hadException());
321 mojom::blink::PaymentAddressPtr shippingAddress = mojom::blink::PaymentAddre ss::New(); 218 mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::N ew();
322 shippingAddress->country = "US"; 219 response->shipping_address = mojom::blink::PaymentAddress::New();
323 shippingAddress->language_code = "en"; 220 response->shipping_address->country = "US";
324 shippingAddress->script_code = "Latn"; 221 response->shipping_address->language_code = "en";
222 response->shipping_address->script_code = "Latn";
325 223
326 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 224 request->show(getScriptState()).then(expectNoCall(), expectCall());
327 225
328 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddress Change(std::move(shippingAddress)); 226 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response));
329 } 227 }
330 228
229 class PaymentResponseFunction : public ScriptFunction {
230 public:
231 static v8::Local<v8::Function> create(ScriptState* scriptState, ScriptValue* outValue)
232 {
233 PaymentResponseFunction* self = new PaymentResponseFunction(scriptState, outValue);
234 return self->bindToV8Function();
235 }
236
237 ScriptValue call(ScriptValue value) override
238 {
239 DCHECK(!value.isEmpty());
240 *m_value = value;
241 return value;
242 }
243
244 private:
245 PaymentResponseFunction(ScriptState* scriptState, ScriptValue* outValue)
246 : ScriptFunction(scriptState)
247 , m_value(outValue)
248 {
249 DCHECK(m_value);
250 }
251
252 ScriptValue* m_value;
253 };
254
331 TEST_F(PaymentRequestTest, ResolveShowPromiseWithRequestShippingTrueAndValidShip pingAddressInResponse) 255 TEST_F(PaymentRequestTest, ResolveShowPromiseWithRequestShippingTrueAndValidShip pingAddressInResponse)
332 { 256 {
333 ScriptState::Scope scope(getScriptState()); 257 ScriptState::Scope scope(getScriptState());
334 PaymentOptions options; 258 PaymentOptions options;
335 options.setRequestShipping(true); 259 options.setRequestShipping(true);
336 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 260 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
337 EXPECT_FALSE(getExceptionState().hadException()); 261 EXPECT_FALSE(getExceptionState().hadException());
338 mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest(); 262 mojom::blink::PaymentResponsePtr response = buildPaymentResponseForTest();
339 response->shipping_address = mojom::blink::PaymentAddress::New(); 263 response->shipping_address = mojom::blink::PaymentAddress::New();
340 response->shipping_address->country = "US"; 264 response->shipping_address->country = "US";
341 response->shipping_address->language_code = "en"; 265 response->shipping_address->language_code = "en";
342 response->shipping_address->script_code = "Latn"; 266 response->shipping_address->script_code = "Latn";
343 267
344 ScriptValue outValue; 268 ScriptValue outValue;
345 request->show(getScriptState()).then(PaymentResponseFunction::create(getScri ptState(), &outValue), MockFunction::expectNoCall(getScriptState())); 269 request->show(getScriptState()).then(PaymentResponseFunction::create(getScri ptState(), &outValue), expectNoCall());
346 270
347 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response)); 271 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response));
348 v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate()); 272 firePromiseCallbacks();
349 PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState( )->isolate(), outValue.v8Value()); 273 PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState( )->isolate(), outValue.v8Value());
350 274
351 EXPECT_EQ("US", pr->shippingAddress()->country()); 275 EXPECT_EQ("US", pr->shippingAddress()->country());
352 EXPECT_EQ("en-Latn", pr->shippingAddress()->languageCode()); 276 EXPECT_EQ("en-Latn", pr->shippingAddress()->languageCode());
353 } 277 }
354 278
355 TEST_F(PaymentRequestTest, ResolveShowPromiseWithRequestShippingFalseAndEmptyShi ppingAddressInResponse) 279 TEST_F(PaymentRequestTest, ResolveShowPromiseWithRequestShippingFalseAndEmptyShi ppingAddressInResponse)
356 { 280 {
357 ScriptState::Scope scope(getScriptState()); 281 ScriptState::Scope scope(getScriptState());
358 PaymentOptions options; 282 PaymentOptions options;
359 options.setRequestShipping(false); 283 options.setRequestShipping(false);
360 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 284 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
361 EXPECT_FALSE(getExceptionState().hadException()); 285 EXPECT_FALSE(getExceptionState().hadException());
362 286
363 ScriptValue outValue; 287 ScriptValue outValue;
364 request->show(getScriptState()).then(PaymentResponseFunction::create(getScri ptState(), &outValue), MockFunction::expectNoCall(getScriptState())); 288 request->show(getScriptState()).then(PaymentResponseFunction::create(getScri ptState(), &outValue), expectNoCall());
365 289
366 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 290 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
367 v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate()); 291 firePromiseCallbacks();
368 PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState( )->isolate(), outValue.v8Value()); 292 PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState( )->isolate(), outValue.v8Value());
369 293
370 EXPECT_EQ(nullptr, pr->shippingAddress()); 294 EXPECT_EQ(nullptr, pr->shippingAddress());
371 } 295 }
372 296
373 TEST_F(PaymentRequestTest, OnShippingOptionChange) 297 TEST_F(PaymentRequestTest, OnShippingOptionChange)
374 { 298 {
375 ScriptState::Scope scope(getScriptState()); 299 ScriptState::Scope scope(getScriptState());
376 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 300 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
377 EXPECT_FALSE(getExceptionState().hadException()); 301 EXPECT_FALSE(getExceptionState().hadException());
378 302
379 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState())); 303 request->show(getScriptState()).then(expectNoCall(), expectNoCall());
380 304
381 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingOptionC hange("standardShipping"); 305 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingOptionC hange("standardShipping");
382 } 306 }
383 307
384 TEST_F(PaymentRequestTest, CannotCallShowTwice) 308 TEST_F(PaymentRequestTest, CannotCallShowTwice)
385 { 309 {
386 ScriptState::Scope scope(getScriptState()); 310 ScriptState::Scope scope(getScriptState());
387 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 311 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
388 EXPECT_FALSE(getExceptionState().hadException()); 312 EXPECT_FALSE(getExceptionState().hadException());
389 request->show(getScriptState()); 313 request->show(getScriptState());
390 314
391 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 315 request->show(getScriptState()).then(expectNoCall(), expectCall());
392 } 316 }
393 317
394 TEST_F(PaymentRequestTest, CannotCallCompleteTwice) 318 TEST_F(PaymentRequestTest, CannotCallCompleteTwice)
395 { 319 {
396 ScriptState::Scope scope(getScriptState()); 320 ScriptState::Scope scope(getScriptState());
397 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 321 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
398 EXPECT_FALSE(getExceptionState().hadException()); 322 EXPECT_FALSE(getExceptionState().hadException());
399 request->show(getScriptState()); 323 request->show(getScriptState());
400 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 324 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
401 request->complete(getScriptState(), false); 325 request->complete(getScriptState(), false);
402 326
403 request->complete(getScriptState(), true).then(MockFunction::expectNoCall(ge tScriptState()), MockFunction::expectCall(getScriptState())); 327 request->complete(getScriptState(), true).then(expectNoCall(), expectCall()) ;
404 } 328 }
405 329
406 TEST_F(PaymentRequestTest, RejectShowPromiseOnError) 330 TEST_F(PaymentRequestTest, RejectShowPromiseOnError)
407 { 331 {
408 ScriptState::Scope scope(getScriptState()); 332 ScriptState::Scope scope(getScriptState());
409 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 333 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
410 EXPECT_FALSE(getExceptionState().hadException()); 334 EXPECT_FALSE(getExceptionState().hadException());
411 335
412 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 336 request->show(getScriptState()).then(expectNoCall(), expectCall());
413 337
414 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError(); 338 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError();
415 } 339 }
416 340
417 TEST_F(PaymentRequestTest, RejectCompletePromiseOnError) 341 TEST_F(PaymentRequestTest, RejectCompletePromiseOnError)
418 { 342 {
419 ScriptState::Scope scope(getScriptState()); 343 ScriptState::Scope scope(getScriptState());
420 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 344 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
421 EXPECT_FALSE(getExceptionState().hadException()); 345 EXPECT_FALSE(getExceptionState().hadException());
422 request->show(getScriptState()); 346 request->show(getScriptState());
423 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 347 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
424 348
425 request->complete(getScriptState(), true).then(MockFunction::expectNoCall(ge tScriptState()), MockFunction::expectCall(getScriptState())); 349 request->complete(getScriptState(), true).then(expectNoCall(), expectCall()) ;
426 350
427 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError(); 351 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError();
428 } 352 }
429 353
430 TEST_F(PaymentRequestTest, ResolvePromiseOnComplete) 354 TEST_F(PaymentRequestTest, ResolvePromiseOnComplete)
431 { 355 {
432 ScriptState::Scope scope(getScriptState()); 356 ScriptState::Scope scope(getScriptState());
433 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 357 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
434 EXPECT_FALSE(getExceptionState().hadException()); 358 EXPECT_FALSE(getExceptionState().hadException());
435 request->show(getScriptState()); 359 request->show(getScriptState());
436 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 360 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
437 361
438 request->complete(getScriptState(), true).then(MockFunction::expectCall(getS criptState()), MockFunction::expectNoCall(getScriptState())); 362 request->complete(getScriptState(), true).then(expectCall(), expectNoCall()) ;
439 363
440 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnComplete(); 364 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnComplete();
441 } 365 }
442 366
443 TEST_F(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure) 367 TEST_F(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure)
444 { 368 {
445 ScriptState::Scope scope(getScriptState()); 369 ScriptState::Scope scope(getScriptState());
446 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 370 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
447 EXPECT_FALSE(getExceptionState().hadException()); 371 EXPECT_FALSE(getExceptionState().hadException());
448 372
449 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 373 request->show(getScriptState()).then(expectNoCall(), expectCall());
450 374
451 request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), " oops")); 375 request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), " oops"));
452 } 376 }
453 377
454 TEST_F(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure) 378 TEST_F(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure)
455 { 379 {
456 ScriptState::Scope scope(getScriptState()); 380 ScriptState::Scope scope(getScriptState());
457 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 381 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
458 EXPECT_FALSE(getExceptionState().hadException()); 382 EXPECT_FALSE(getExceptionState().hadException());
459 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState())); 383 request->show(getScriptState()).then(expectCall(), expectNoCall());
460 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 384 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
461 385
462 request->complete(getScriptState(), true).then(MockFunction::expectNoCall(ge tScriptState()), MockFunction::expectCall(getScriptState())); 386 request->complete(getScriptState(), true).then(expectNoCall(), expectCall()) ;
463 387
464 request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), " oops")); 388 request->onUpdatePaymentDetailsFailure(ScriptValue::from(getScriptState(), " oops"));
465 } 389 }
466 390
467 TEST_F(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved) 391 TEST_F(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved)
468 { 392 {
469 ScriptState::Scope scope(getScriptState()); 393 ScriptState::Scope scope(getScriptState());
470 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 394 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
471 EXPECT_FALSE(getExceptionState().hadException()); 395 EXPECT_FALSE(getExceptionState().hadException());
472 request->show(getScriptState()).then(MockFunction::expectCall(getScriptState ()), MockFunction::expectNoCall(getScriptState())); 396 request->show(getScriptState()).then(expectCall(), expectNoCall());
473 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 397 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
474 398
475 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "foo")); 399 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "foo"));
476 } 400 }
477 401
478 TEST_F(PaymentRequestTest, RejectShowPromiseOnNonPaymentDetailsUpdate) 402 TEST_F(PaymentRequestTest, RejectShowPromiseOnNonPaymentDetailsUpdate)
479 { 403 {
480 ScriptState::Scope scope(getScriptState()); 404 ScriptState::Scope scope(getScriptState());
481 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 405 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
482 EXPECT_FALSE(getExceptionState().hadException()); 406 EXPECT_FALSE(getExceptionState().hadException());
483 407
484 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 408 request->show(getScriptState()).then(expectNoCall(), expectCall());
485 409
486 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "NotPaym entDetails")); 410 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), "NotPaym entDetails"));
487 } 411 }
488 412
489 TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidPaymentDetailsUpdate) 413 TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidPaymentDetailsUpdate)
490 { 414 {
491 ScriptState::Scope scope(getScriptState()); 415 ScriptState::Scope scope(getScriptState());
492 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState()); 416 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), getExceptionState());
493 EXPECT_FALSE(getExceptionState().hadException()); 417 EXPECT_FALSE(getExceptionState().hadException());
494 418
495 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectCall(getScriptState())); 419 request->show(getScriptState()).then(expectNoCall(), expectCall());
496 420
497 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), "{}", getExceptionState()))); 421 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), "{}", getExceptionState())));
498 EXPECT_FALSE(getExceptionState().hadException()); 422 EXPECT_FALSE(getExceptionState().hadException());
499 } 423 }
500 424
501 TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithoutShipp ingOptions) 425 TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithoutShipp ingOptions)
502 { 426 {
503 ScriptState::Scope scope(getScriptState()); 427 ScriptState::Scope scope(getScriptState());
504 PaymentDetails details; 428 PaymentDetails details;
505 details.setTotal(buildPaymentItemForTest()); 429 details.setTotal(buildPaymentItemForTest());
506 PaymentOptions options; 430 PaymentOptions options;
507 options.setRequestShipping(true); 431 options.setRequestShipping(true);
508 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), details, options, getExceptionState()); 432 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), details, options, getExceptionState());
509 EXPECT_FALSE(getExceptionState().hadException()); 433 EXPECT_FALSE(getExceptionState().hadException());
510 EXPECT_TRUE(request->shippingOption().isNull()); 434 EXPECT_TRUE(request->shippingOption().isNull());
511 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState())); 435 request->show(getScriptState()).then(expectNoCall(), expectNoCall());
512 String detailWithShippingOptions = "{\"total\": {\"label\": \"Total\", \"amo unt\": {\"currency\": \"USD\", \"value\": \"5.00\"}}," 436 String detailWithShippingOptions = "{\"total\": {\"label\": \"Total\", \"amo unt\": {\"currency\": \"USD\", \"value\": \"5.00\"}},"
513 "\"shippingOptions\": [{\"id\": \"standardShippingOption\", \"label\": \ "Standard shipping\", \"amount\": {\"currency\": \"USD\", \"value\": \"5.00\"}, \"selected\": true}]}"; 437 "\"shippingOptions\": [{\"id\": \"standardShippingOption\", \"label\": \ "Standard shipping\", \"amount\": {\"currency\": \"USD\", \"value\": \"5.00\"}, \"selected\": true}]}";
514 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detailWithShippingOptions, getExceptionState()))); 438 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detailWithShippingOptions, getExceptionState())));
515 EXPECT_FALSE(getExceptionState().hadException()); 439 EXPECT_FALSE(getExceptionState().hadException());
516 EXPECT_EQ("standardShippingOption", request->shippingOption()); 440 EXPECT_EQ("standardShippingOption", request->shippingOption());
517 String detailWithoutShippingOptions = "{\"total\": {\"label\": \"Total\", \" amount\": {\"currency\": \"USD\", \"value\": \"5.00\"}}}"; 441 String detailWithoutShippingOptions = "{\"total\": {\"label\": \"Total\", \" amount\": {\"currency\": \"USD\", \"value\": \"5.00\"}}}";
518 442
519 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detailWithoutShippingOptions, getExceptionState()))); 443 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detailWithoutShippingOptions, getExceptionState())));
520 444
521 EXPECT_FALSE(getExceptionState().hadException()); 445 EXPECT_FALSE(getExceptionState().hadException());
522 EXPECT_TRUE(request->shippingOption().isNull()); 446 EXPECT_TRUE(request->shippingOption().isNull());
523 } 447 }
524 448
525 TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithMultiple UnselectedShippingOptions) 449 TEST_F(PaymentRequestTest, ClearShippingOptionOnPaymentDetailsUpdateWithMultiple UnselectedShippingOptions)
526 { 450 {
527 ScriptState::Scope scope(getScriptState()); 451 ScriptState::Scope scope(getScriptState());
528 PaymentOptions options; 452 PaymentOptions options;
529 options.setRequestShipping(true); 453 options.setRequestShipping(true);
530 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 454 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
531 EXPECT_FALSE(getExceptionState().hadException()); 455 EXPECT_FALSE(getExceptionState().hadException());
532 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState())); 456 request->show(getScriptState()).then(expectNoCall(), expectNoCall());
533 String detail = "{\"total\": {\"label\": \"Total\", \"amount\": {\"currency\ ": \"USD\", \"value\": \"5.00\"}}," 457 String detail = "{\"total\": {\"label\": \"Total\", \"amount\": {\"currency\ ": \"USD\", \"value\": \"5.00\"}},"
534 "\"shippingOptions\": [{\"id\": \"slow\", \"label\": \"Slow\", \"amount\ ": {\"currency\": \"USD\", \"value\": \"5.00\"}}," 458 "\"shippingOptions\": [{\"id\": \"slow\", \"label\": \"Slow\", \"amount\ ": {\"currency\": \"USD\", \"value\": \"5.00\"}},"
535 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currency\": \"US D\", \"value\": \"50.00\"}}]}"; 459 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currency\": \"US D\", \"value\": \"50.00\"}}]}";
536 460
537 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detail, getExceptionState()))); 461 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detail, getExceptionState())));
538 EXPECT_FALSE(getExceptionState().hadException()); 462 EXPECT_FALSE(getExceptionState().hadException());
539 463
540 EXPECT_TRUE(request->shippingOption().isNull()); 464 EXPECT_TRUE(request->shippingOption().isNull());
541 } 465 }
542 466
543 TEST_F(PaymentRequestTest, UseTheSelectedShippingOptionFromPaymentDetailsUpdate) 467 TEST_F(PaymentRequestTest, UseTheSelectedShippingOptionFromPaymentDetailsUpdate)
544 { 468 {
545 ScriptState::Scope scope(getScriptState()); 469 ScriptState::Scope scope(getScriptState());
546 PaymentOptions options; 470 PaymentOptions options;
547 options.setRequestShipping(true); 471 options.setRequestShipping(true);
548 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ()); 472 PaymentRequest* request = PaymentRequest::create(getScriptState(), buildPaym entMethodDataForTest(), buildPaymentDetailsForTest(), options, getExceptionState ());
549 EXPECT_FALSE(getExceptionState().hadException()); 473 EXPECT_FALSE(getExceptionState().hadException());
550 request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptSta te()), MockFunction::expectNoCall(getScriptState())); 474 request->show(getScriptState()).then(expectNoCall(), expectNoCall());
551 String detail = "{\"total\": {\"label\": \"Total\", \"amount\": {\"currency\ ": \"USD\", \"value\": \"5.00\"}}," 475 String detail = "{\"total\": {\"label\": \"Total\", \"amount\": {\"currency\ ": \"USD\", \"value\": \"5.00\"}},"
552 "\"shippingOptions\": [{\"id\": \"slow\", \"label\": \"Slow\", \"amount\ ": {\"currency\": \"USD\", \"value\": \"5.00\"}}," 476 "\"shippingOptions\": [{\"id\": \"slow\", \"label\": \"Slow\", \"amount\ ": {\"currency\": \"USD\", \"value\": \"5.00\"}},"
553 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currency\": \"US D\", \"value\": \"50.00\"}, \"selected\": true}]}"; 477 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currency\": \"US D\", \"value\": \"50.00\"}, \"selected\": true}]}";
554 478
555 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detail, getExceptionState()))); 479 request->onUpdatePaymentDetails(ScriptValue::from(getScriptState(), fromJSON String(getScriptState(), detail, getExceptionState())));
556 EXPECT_FALSE(getExceptionState().hadException()); 480 EXPECT_FALSE(getExceptionState().hadException());
557 481
558 EXPECT_EQ("fast", request->shippingOption()); 482 EXPECT_EQ("fast", request->shippingOption());
559 } 483 }
560 484
561 } // namespace 485 } // namespace
562 } // namespace blink 486 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698