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

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

Issue 1753543002: PaymentRequest Mojo bindings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@interface
Patch Set: Java package name should be org.chromium.mojom.payments Created 4 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "modules/payments/PaymentRequest.h"
6
7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptState.h"
9 #include "core/dom/ExceptionCode.h"
10 #include "core/testing/DummyPageHolder.h"
11 #include "modules/payments/MockPaymentRequest.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "wtf/OwnPtr.h"
14
15 namespace blink {
16 namespace {
17
18 class PaymentRequestTest : public testing::Test {
19 public:
20 PaymentRequestTest()
21 : m_page(DummyPageHolder::create())
22 {
23 setSecurityOrigin("https://www.example.com/");
24 }
25
26 ~PaymentRequestTest() override {}
27
28 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); }
29 ExceptionState& getExceptionState() { return m_exceptionState; }
30
31 void setSecurityOrigin(const String& securityOrigin)
32 {
33 m_page->document().setSecurityOrigin(SecurityOrigin::create(KURL(KURL(), securityOrigin)));
34 }
35
36 private:
37 OwnPtr<DummyPageHolder> m_page;
38 TrackExceptionState m_exceptionState;
39 };
40
41 TEST_F(PaymentRequestTest, NoExceptionWithValidData)
42 {
43 PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), MockPayme ntRequest::buildDetails(), getExceptionState());
44
45 EXPECT_FALSE(getExceptionState().hadException());
46 }
47
48 TEST_F(PaymentRequestTest, SecureContextRequired)
49 {
50 setSecurityOrigin("http://www.example.com");
51
52 PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), MockPayme ntRequest::buildDetails(), getExceptionState());
53
54 EXPECT_TRUE(getExceptionState().hadException());
55 EXPECT_EQ(SecurityError, getExceptionState().code());
56 }
57
58 TEST_F(PaymentRequestTest, SupportedMethodListRequired)
59 {
60 PaymentRequest::create(getScriptState(), Vector<String>(), MockPaymentReques t::buildDetails(), getExceptionState());
61
62 EXPECT_TRUE(getExceptionState().hadException());
63 EXPECT_EQ(V8TypeError, getExceptionState().code());
64 }
65
66 TEST_F(PaymentRequestTest, ItemListRequired)
67 {
68 PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), PaymentDe tails(), getExceptionState());
69
70 EXPECT_TRUE(getExceptionState().hadException());
71 EXPECT_EQ(V8TypeError, getExceptionState().code());
72 }
73
74 TEST_F(PaymentRequestTest, AtLeastOnePaymentDetailsItemRequired)
75 {
76 PaymentDetails emptyItems;
77 emptyItems.setItems(HeapVector<PaymentItem>());
78
79 PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), emptyItem s, getExceptionState());
80
81 EXPECT_TRUE(getExceptionState().hadException());
82 EXPECT_EQ(V8TypeError, getExceptionState().code());
83 }
84
85 TEST_F(PaymentRequestTest, NullShippingOptionWhenNoOptionsAvailable)
86 {
87 PaymentDetails details = MockPaymentRequest::buildDetails();
88 details.setShippingOptions(HeapVector<ShippingOption>());
89
90 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), details, getExceptionState());
91
92 EXPECT_TRUE(request->shippingOption().isNull());
93 }
94
95 TEST_F(PaymentRequestTest, NullShippingOptionWhenMultipleOptionsAvailable)
96 {
97 PaymentDetails details = MockPaymentRequest::buildDetails();
98
99 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), details, getExceptionState());
100
101 EXPECT_LE(2U, details.shippingOptions().size());
Marijn Kruisselbrink 2016/03/25 22:46:25 This is testing that MockPaymentRequest returns da
please use gerrit instead 2016/03/29 22:15:44 Done.
102 EXPECT_TRUE(request->shippingOption().isNull());
103 }
104
105 TEST_F(PaymentRequestTest, SelectSingleAvailableShippingOption)
106 {
107 CurrencyAmount amount;
108 amount.setCurrencyCode("USD");
109 amount.setValue("10.00");
110 ShippingOption option;
111 option.setAmount(amount);
112 option.setId("standard");
113 option.setLabel("Standard shipping");
114 PaymentDetails details = MockPaymentRequest::buildDetails();
115 details.setShippingOptions(HeapVector<ShippingOption>(1, option));
116
117 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), details, getExceptionState());
118
119 EXPECT_EQ("standard", request->shippingOption());
120 }
121
122 TEST_F(PaymentRequestTest, AbortWithoutShowShouldThrow)
123 {
124 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), MockPaymentRequest::buildDetails(), getExceptionState());
125 EXPECT_FALSE(getExceptionState().hadException());
126
127 request->abort(getExceptionState());
128 EXPECT_TRUE(getExceptionState().hadException());
129 }
130
131 class DetailsTestCase {
132 public:
133 DetailsTestCase(DetailToChange detail, DataToChange data, ModificationType m odType, const char* valueToUse, bool expectException = false, ExceptionCode expe ctedExceptionCode = 0)
134 : m_detail(detail)
135 , m_data(data)
136 , m_modType(modType)
137 , m_valueToUse(valueToUse)
138 , m_expectException(expectException)
139 , m_expectedExceptionCode(expectedExceptionCode)
140 {
141 }
142
143 ~DetailsTestCase() {}
144
145 PaymentDetails buildDetails() const
146 {
147 return MockPaymentRequest::buildDetails(m_detail, m_data, m_modType, m_v alueToUse);
148 }
149
150 bool expectException() const
151 {
152 return m_expectException;
153 }
154
155 ExceptionCode getExpectedExceptionCode() const
156 {
157 return m_expectedExceptionCode;
158 }
159
160 private:
161 DetailToChange m_detail;
162 DataToChange m_data;
163 ModificationType m_modType;
164 const char* m_valueToUse;
165 bool m_expectException;
166 ExceptionCode m_expectedExceptionCode;
167 };
168
169 class PaymentRequestDetailsTest : public PaymentRequestTest, public testing::Wit hParamInterface<DetailsTestCase> {
170 };
171
172 TEST_P(PaymentRequestDetailsTest, ValidatesDetails)
173 {
174 PaymentRequest::create(getScriptState(), Vector<String>(1, "foo"), GetParam( ).buildDetails(), getExceptionState());
175
176 EXPECT_EQ(GetParam().expectException(), getExceptionState().hadException());
177 if (GetParam().expectException())
178 EXPECT_EQ(GetParam().getExpectedExceptionCode(), getExceptionState().cod e());
179 }
180
181 INSTANTIATE_TEST_CASE_P(RequiredData,
182 PaymentRequestDetailsTest,
183 testing::Values(
184 DetailsTestCase(DetailItem, DataAmount, RemoveKey, "", true, V8TypeError ),
185 DetailsTestCase(DetailItem, DataCurrencyCode, RemoveKey, "", true, V8Typ eError),
186 DetailsTestCase(DetailItem, DataId, RemoveKey, "", true, V8TypeError),
187 DetailsTestCase(DetailItem, DataLabel, RemoveKey, "", true, V8TypeError) ,
188 DetailsTestCase(DetailShippingOption, DataAmount, RemoveKey, "", true, V 8TypeError),
189 DetailsTestCase(DetailShippingOption, DataCurrencyCode, RemoveKey, "", t rue, V8TypeError),
190 DetailsTestCase(DetailShippingOption, DataId, RemoveKey, "", true, V8Typ eError),
191 DetailsTestCase(DetailShippingOption, DataLabel, RemoveKey, "", true, V8 TypeError)));
192
193 INSTANTIATE_TEST_CASE_P(ValidCurrencyCodeFormat,
194 PaymentRequestDetailsTest,
195 testing::Values(
196 DetailsTestCase(DetailItem, DataCurrencyCode, OverwriteValue, "USD"),
197 DetailsTestCase(DetailShippingOption, DataCurrencyCode, OverwriteValue, "USD")));
198
199 INSTANTIATE_TEST_CASE_P(InvalidCurrencyCodeFormat,
200 PaymentRequestDetailsTest,
201 testing::Values(
202 DetailsTestCase(DetailItem, DataCurrencyCode, OverwriteValue, "US1", tru e, V8TypeError),
203 DetailsTestCase(DetailItem, DataCurrencyCode, OverwriteValue, "US", true , V8TypeError),
204 DetailsTestCase(DetailItem, DataCurrencyCode, OverwriteValue, "USDO", tr ue, V8TypeError),
205 DetailsTestCase(DetailItem, DataCurrencyCode, OverwriteValue, "usd", tru e, V8TypeError),
206 DetailsTestCase(DetailItem, DataCurrencyCode, OverwriteValue, "", true, V8TypeError),
207 DetailsTestCase(DetailShippingOption, DataCurrencyCode, OverwriteValue, "US1", true, V8TypeError),
208 DetailsTestCase(DetailShippingOption, DataCurrencyCode, OverwriteValue, "US", true, V8TypeError),
209 DetailsTestCase(DetailShippingOption, DataCurrencyCode, OverwriteValue, "USDO", true, V8TypeError),
210 DetailsTestCase(DetailShippingOption, DataCurrencyCode, OverwriteValue, "usd", true, V8TypeError),
211 DetailsTestCase(DetailShippingOption, DataCurrencyCode, OverwriteValue, "", true, V8TypeError)));
212
213 INSTANTIATE_TEST_CASE_P(ValidAmountFormat,
214 PaymentRequestDetailsTest,
215 testing::Values(
216 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "0"),
217 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-0"),
218 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "1"),
219 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "10"),
220 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-3"),
221 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "10.99"),
222 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-3.00"),
223 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "012345678901234 56789.0123456789"),
224 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "012345678901234 56789012345678.9"),
225 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "012345678901234 567890123456789"),
226 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-01234567890123 456789.0123456789"),
227 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-01234567890123 456789012345678.9"),
228 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-01234567890123 4567890123456789"),
229 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "0"),
230 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "-0"),
231 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "1"),
232 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "10"),
233 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "-3"),
234 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "10.99 "),
235 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "-3.00 "),
236 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "01234 567890123456789.0123456789"),
237 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "01234 567890123456789012345678.9"),
238 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "01234 5678901234567890123456789"),
239 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "-0123 4567890123456789.0123456789"),
240 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "-0123 4567890123456789012345678.9"),
241 DetailsTestCase(DetailShippingOption, DataAmount, OverwriteValue, "-0123 45678901234567890123456789")));
242
243 INSTANTIATE_TEST_CASE_P(InvalidAmountFormat,
244 PaymentRequestDetailsTest,
245 testing::Values(
246 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "", true, V8Type Error),
247 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-", true, V8Typ eError),
248 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "notdigits", tru e, V8TypeError),
249 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "ALSONOTDIGITS", true, V8TypeError),
250 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "10.", true, V8T ypeError),
251 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, ".99", true, V8T ypeError),
252 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "-10.", true, V8 TypeError),
253 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "10-", true, V8T ypeError),
254 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "1-0", true, V8T ypeError),
255 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "1.0.0", true, V 8TypeError),
256 DetailsTestCase(DetailItem, DataAmount, OverwriteValue, "1/3", true, V8T ypeError)));
257
258 } // namespace
259 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698