Index: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp |
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp |
index f5ea8a1e4d75a4e082d93ed7bcd863783233e7fe..bc9af1a275f4aaa67d1e7b83e3573fbc680bd556 100644 |
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp |
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp |
@@ -7,9 +7,11 @@ |
#include "bindings/core/v8/ExceptionState.h" |
#include "bindings/core/v8/JSONValuesForV8.h" |
#include "bindings/core/v8/ScriptState.h" |
+#include "bindings/modules/v8/V8PaymentResponse.h" |
#include "core/dom/ExceptionCode.h" |
#include "core/testing/DummyPageHolder.h" |
#include "modules/payments/CurrencyAmount.h" |
+#include "modules/payments/PaymentAddress.h" |
#include "modules/payments/PaymentDetailsTestHelper.h" |
#include "modules/payments/PaymentItem.h" |
#include "modules/payments/ShippingOption.h" |
@@ -181,6 +183,32 @@ private: |
MOCK_METHOD1(call, ScriptValue(ScriptValue)); |
}; |
+class PaymentResponseFunction : public ScriptFunction { |
+public: |
+ static v8::Local<v8::Function> create(ScriptState* scriptState, ScriptValue* outValue) |
+ { |
+ PaymentResponseFunction* self = new PaymentResponseFunction(scriptState, outValue); |
+ return self->bindToV8Function(); |
+ } |
+ |
+ ScriptValue call(ScriptValue value) override |
+ { |
+ DCHECK(!value.isEmpty()); |
+ *m_value = value; |
+ return value; |
+ } |
+ |
+private: |
+ PaymentResponseFunction(ScriptState* scriptState, ScriptValue* outValue) |
+ : ScriptFunction(scriptState) |
+ , m_value(outValue) |
+ { |
+ DCHECK(m_value); |
+ } |
+ |
+ ScriptValue* m_value; |
+}; |
+ |
TEST_F(PaymentRequestTest, CanAbortAfterShow) |
{ |
ScriptState::Scope scope(getScriptState()); |
@@ -204,10 +232,26 @@ TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddress) |
static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddressChange(mojom::blink::PaymentAddress::New()); |
} |
-TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddressInResponse) |
+TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingTrueAndEmptyShippingAddressInResponse) |
zino
2016/06/06 10:02:13
option.requestShipping == true && shipping_address
|
{ |
ScriptState::Scope scope(getScriptState()); |
- PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); |
+ PaymentOptions options; |
+ options.setRequestShipping(true); |
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState()); |
+ EXPECT_FALSE(getExceptionState().hadException()); |
+ mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New(); |
+ |
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState())); |
+ |
+ static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response)); |
+} |
+ |
+TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingTrueAndInvalidShippingAddressInResponse) |
zino
2016/06/06 10:02:13
option.requestShipping == true && shipping_address
|
+{ |
+ ScriptState::Scope scope(getScriptState()); |
+ PaymentOptions options; |
+ options.setRequestShipping(true); |
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState()); |
EXPECT_FALSE(getExceptionState().hadException()); |
mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New(); |
response->shipping_address = mojom::blink::PaymentAddress::New(); |
@@ -217,25 +261,29 @@ TEST_F(PaymentRequestTest, RejectShowPromiseOnInvalidShippingAddressInResponse) |
static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response)); |
} |
-TEST_F(PaymentRequestTest, DontRejectShowPromiseForValidShippingAddress) |
+TEST_F(PaymentRequestTest, RejectShowPromiseWithRequestShippingFalseAndShippingAddressExistsInResponse) |
zino
2016/06/06 10:02:13
option.requestShipping == false && shipping_addres
|
{ |
ScriptState::Scope scope(getScriptState()); |
- PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); |
+ PaymentOptions options; |
+ options.setRequestShipping(false); |
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState()); |
EXPECT_FALSE(getExceptionState().hadException()); |
mojom::blink::PaymentAddressPtr shippingAddress = mojom::blink::PaymentAddress::New(); |
shippingAddress->region_code = "US"; |
shippingAddress->language_code = "en"; |
shippingAddress->script_code = "Latn"; |
- request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectNoCall(getScriptState())); |
+ request->show(getScriptState()).then(MockFunction::expectNoCall(getScriptState()), MockFunction::expectCall(getScriptState())); |
static_cast<mojom::blink::PaymentRequestClient*>(request)->OnShippingAddressChange(std::move(shippingAddress)); |
} |
-TEST_F(PaymentRequestTest, ResolveShowPromiseWithValidShippingAddressInResponse) |
+TEST_F(PaymentRequestTest, ResolveShowPromiseWithRequestShippingTrueAndValidShippingAddressInResponse) |
zino
2016/06/06 10:02:13
option.requestShipping == true && shipping_address
|
{ |
ScriptState::Scope scope(getScriptState()); |
- PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); |
+ PaymentOptions options; |
+ options.setRequestShipping(true); |
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState()); |
EXPECT_FALSE(getExceptionState().hadException()); |
mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::New(); |
response->shipping_address = mojom::blink::PaymentAddress::New(); |
@@ -243,20 +291,33 @@ TEST_F(PaymentRequestTest, ResolveShowPromiseWithValidShippingAddressInResponse) |
response->shipping_address->language_code = "en"; |
response->shipping_address->script_code = "Latn"; |
- request->show(getScriptState()).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState())); |
+ ScriptValue outValue; |
+ request->show(getScriptState()).then(PaymentResponseFunction::create(getScriptState(), &outValue), MockFunction::expectNoCall(getScriptState())); |
static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(std::move(response)); |
+ v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate()); |
+ PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState()->isolate(), outValue.v8Value()); |
+ |
+ EXPECT_EQ("US", pr->shippingAddress()->regionCode()); |
+ EXPECT_EQ("en-Latn", pr->shippingAddress()->languageCode()); |
} |
-TEST_F(PaymentRequestTest, ResolveShowPromiseWithoutShippingAddressInResponse) |
+TEST_F(PaymentRequestTest, ResolveShowPromiseWithRequestShippingFalseAndEmptyShippingAddressInResponse) |
zino
2016/06/06 10:02:14
option.requestShipping == false && shipping_addres
|
{ |
ScriptState::Scope scope(getScriptState()); |
- PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), getExceptionState()); |
+ PaymentOptions options; |
+ options.setRequestShipping(false); |
+ PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState()); |
EXPECT_FALSE(getExceptionState().hadException()); |
- request->show(getScriptState()).then(MockFunction::expectCall(getScriptState()), MockFunction::expectNoCall(getScriptState())); |
+ ScriptValue outValue; |
+ request->show(getScriptState()).then(PaymentResponseFunction::create(getScriptState(), &outValue), MockFunction::expectNoCall(getScriptState())); |
static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse(mojom::blink::PaymentResponse::New()); |
+ v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate()); |
+ PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState()->isolate(), outValue.v8Value()); |
+ |
+ EXPECT_EQ(nullptr, pr->shippingAddress()); |
} |
TEST_F(PaymentRequestTest, OnShippingOptionChange) |