OLD | NEW |
---|---|
(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()); | |
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 { | |
esprehn
2016/03/25 23:40:11
lets put these in separate files, mega unit test f
please use gerrit instead
2016/03/29 22:15:45
Done.
| |
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 | |
OLD | NEW |