OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <meta charset="utf-8"> | 2 <meta charset="utf-8"> |
3 <title>Tests for PaymentRequest interface</title> | 3 <title>Tests for PaymentRequest interface</title> |
4 <script src="../resources/testharness.js"></script> | 4 <script src="../resources/testharness.js"></script> |
5 <script src="../resources/testharnessreport.js"></script> | 5 <script src="../resources/testharnessreport.js"></script> |
6 <script> | 6 <script> |
7 function substitute(originalObject, substituteKeyValuePair) { | 7 function substitute(originalObject, substituteKeyValuePair) { |
8 for (var key in originalObject) { | 8 for (var key in originalObject) { |
9 if (originalObject.hasOwnProperty(key) && substituteKeyValuePair.hasOwnP
roperty(key)) { | 9 if (originalObject.hasOwnProperty(key) && substituteKeyValuePair.hasOwnP
roperty(key)) { |
10 originalObject[key] = substituteKeyValuePair[key]; | 10 originalObject[key] = substituteKeyValuePair[key]; |
(...skipping 23 matching lines...) Expand all Loading... |
34 details[detailNames[i]] = [buildItem(optionalSubstituteKeyValuePair)
]; | 34 details[detailNames[i]] = [buildItem(optionalSubstituteKeyValuePair)
]; |
35 } else { | 35 } else { |
36 details[detailNames[i]] = [buildItem()]; | 36 details[detailNames[i]] = [buildItem()]; |
37 } | 37 } |
38 } | 38 } |
39 | 39 |
40 return details; | 40 return details; |
41 } | 41 } |
42 | 42 |
43 test(function() { | 43 test(function() { |
44 new PaymentRequest(['foo'], buildDetails(), {}, {}); | 44 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(), {}); |
45 }, 'Creating a PaymentRequest with empty parameters should not throw or crash.')
; | 45 }, 'Creating a PaymentRequest with empty parameters should not throw or crash.')
; |
46 | 46 |
47 test(function() { | 47 test(function() { |
48 new PaymentRequest(['foo'], buildDetails(), {}, {}, ''); | 48 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(), {}, ''); |
49 }, 'Creating a PaymentRequest with extra parameters should not throw or crash.')
; | 49 }, 'Creating a PaymentRequest with extra parameters should not throw or crash.')
; |
50 | 50 |
51 test(function() { | 51 test(function() { |
52 new PaymentRequest(['foo'], buildDetails()); | 52 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails()); |
53 }, 'Creating a PaymentRequest with omitted optional parameters should not throw
or crash.'); | 53 }, 'Creating a PaymentRequest with omitted optional parameters should not throw
or crash.'); |
54 | 54 |
55 test(function() { | 55 test(function() { |
56 new PaymentRequest(['foo'], buildDetails(), undefined, undefined); | 56 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(), undefine
d); |
57 }, 'Creating a PaymentRequest with undefined optional parameters should not thro
w or crash.'); | 57 }, 'Creating a PaymentRequest with undefined optional parameters should not thro
w or crash.'); |
58 | 58 |
59 test(function() { | 59 test(function() { |
60 new PaymentRequest(['foo'], buildDetails(), null, null); | 60 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(), null); |
61 }, 'Creating a PaymentRequest with null optional parameters should not throw or
crash.'); | 61 }, 'Creating a PaymentRequest with null optional parameters should not throw or
crash.'); |
62 | 62 |
63 test(function() { | 63 test(function() { |
64 var request = new PaymentRequest(['foo'], buildDetails()); | 64 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls()); |
65 assert_readonly(request, 'shippingAddress', 'PaymentRequest should have a re
adonly shippingAddress property.'); | 65 assert_readonly(request, 'shippingAddress', 'PaymentRequest should have a re
adonly shippingAddress property.'); |
66 assert_readonly(request, 'shippingOption', 'PaymentRequest should have a rea
donly shippingOption property.'); | 66 assert_readonly(request, 'shippingOption', 'PaymentRequest should have a rea
donly shippingOption property.'); |
67 }, 'PaymentRequest should have readonly shippingAddress and shippingOption prope
rties.'); | 67 }, 'PaymentRequest should have readonly shippingAddress and shippingOption prope
rties.'); |
68 | 68 |
69 test(function() { | 69 test(function() { |
70 var request = new PaymentRequest(['foo'], buildDetails()); | 70 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls()); |
71 assert_not_equals(request.onshippingaddresschange, undefined, 'PaymentReques
t should have onShippingAddressChange event.'); | 71 assert_not_equals(request.onshippingaddresschange, undefined, 'PaymentReques
t should have onShippingAddressChange event.'); |
72 assert_not_equals(request.onshippingoptionchange, undefined, 'PaymentRequest
should have onShippingOptionChange event.'); | 72 assert_not_equals(request.onshippingoptionchange, undefined, 'PaymentRequest
should have onShippingOptionChange event.'); |
73 }, 'PaymentRequest should have onShippingAddressChange and onShippingOptionChang
e events.'); | 73 }, 'PaymentRequest should have onShippingAddressChange and onShippingOptionChang
e events.'); |
74 | 74 |
75 test(function() { | 75 test(function() { |
76 var request = new PaymentRequest(['foo'], buildDetails()); | 76 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls()); |
77 assert_not_equals(request.abort, undefined, 'PaymentRequest should have abor
t() method.'); | 77 assert_not_equals(request.abort, undefined, 'PaymentRequest should have abor
t() method.'); |
78 assert_not_equals(request.show, undefined, 'PaymentRequest should have show(
) method.'); | 78 assert_not_equals(request.show, undefined, 'PaymentRequest should have show(
) method.'); |
79 }, 'PaymentRequest should have methods abort() and show().'); | 79 }, 'PaymentRequest should have methods abort() and show().'); |
80 | 80 |
81 test(function() { | 81 test(function() { |
82 var request = new PaymentRequest(['foo'], buildDetails()); | 82 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls()); |
83 request.show(); | 83 request.show(); |
84 request.abort(); | 84 request.abort(); |
85 }, 'PaymentRequest.abort() and PaymentRequest.show() should take no parameters.'
); | 85 }, 'PaymentRequest.abort() and PaymentRequest.show() should take no parameters.'
); |
86 | 86 |
87 test(function() { | 87 test(function() { |
88 var request = new PaymentRequest(['foo'], buildDetails(), {'requestShipping'
: true}, {'foo': {'gateway': 'bar'}}); | 88 var request = new PaymentRequest([{'supportedMethods': ['foo'], 'data': {'fo
o': {'gateway': 'bar'}}}], buildDetails(), {'requestShipping': true}); |
89 request.show(); | 89 request.show(); |
90 request.abort(); | 90 request.abort(); |
91 }, 'Valid data causes no errors.'); | 91 }, 'Valid data causes no errors.'); |
92 | 92 |
93 test(function() { | 93 test(function() { |
94 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {'
id': 'standard'})); | 94 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls('shippingOptions', {'id': 'standard'})); |
95 assert_equals(null, request.shippingOption); | 95 assert_equals(null, request.shippingOption); |
96 }, 'Shipping option identifier should be null if shipping request is omitted.'); | 96 }, 'Shipping option identifier should be null if shipping request is omitted.'); |
97 | 97 |
98 test(function() { | 98 test(function() { |
99 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {'
id': 'standard'}), {'requestShipping': false}); | 99 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls('shippingOptions', {'id': 'standard'}), {'requestShipping': false}); |
100 assert_equals(null, request.shippingOption); | 100 assert_equals(null, request.shippingOption); |
101 }, 'Shipping option identifier should be null if shipping is explicitly not requ
ested.'); | 101 }, 'Shipping option identifier should be null if shipping is explicitly not requ
ested.'); |
102 | 102 |
103 test(function() { | 103 test(function() { |
104 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {'
id': 'standard'}), {'requestShipping': true}); | 104 var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetai
ls('shippingOptions', {'id': 'standard'}), {'requestShipping': true}); |
105 assert_equals('standard', request.shippingOption); | 105 assert_equals('standard', request.shippingOption); |
106 }, 'Shipping option identifier should default to the single provided option.'); | 106 }, 'Shipping option identifier should default to the single provided option.'); |
107 | 107 |
108 test(function() { | 108 test(function() { |
109 var request = new PaymentRequest(['foo'], {'displayItems': [buildItem()]}, {
'requestShipping': true}); | 109 var request = new PaymentRequest([{'supportedMethods': ['foo']}], {"displayI
tems": [buildItem()]}, {'requestShipping': true}); |
110 assert_equals(null, request.shippingOption); | 110 assert_equals(null, request.shippingOption); |
111 }, 'Shipping option identifier should be null when no shipping options are provi
ded.'); | 111 }, 'Shipping option identifier should be null when no shipping options are provi
ded.'); |
112 | 112 |
113 test(function() { | 113 test(function() { |
114 var request = new PaymentRequest(['foo'], {'displayItems': [buildItem()], 's
hippingOptions': [buildItem({'id': 'standard'}), buildItem({'id': 'express'})]},
{'requestShipping': true}); | 114 var request = new PaymentRequest([{'supportedMethods': ['foo']}], {'displayI
tems': [buildItem()], 'shippingOptions': [buildItem({'id': 'standard'}), buildIt
em({'id': 'express'})]}, {'requestShipping': true}); |
115 assert_equals(null, request.shippingOption); | 115 assert_equals(null, request.shippingOption); |
116 }, 'Shipping option identifier should be null at first when multiple shipping op
tions are provided.'); | 116 }, 'Shipping option identifier should be null at first when multiple shipping op
tions are provided.'); |
117 | 117 |
118 | 118 |
119 generate_tests(assert_throws, [ | 119 generate_tests(assert_throws, [ |
120 ['PaymentRequest constructor should throw for incorrect parameter types.', n
ull, function() { | 120 ['PaymentRequest constructor should throw for incorrect parameter types.', n
ull, function() { |
121 new PaymentRequest('', '', '', '') | 121 new PaymentRequest('', '', '') |
122 }], | 122 }], |
123 ['PaymentRequest constructor should throw for undefined required parameters.
', null, function() { | 123 ['PaymentRequest constructor should throw for undefined required parameters.
', null, function() { |
124 new PaymentRequest(undefined, undefined) | 124 new PaymentRequest(undefined, undefined) |
125 }], | 125 }], |
126 ['PaymentRequest constructor should throw for null required parameter.', nul
l, function() { | 126 ['PaymentRequest constructor should throw for null required parameter.', nul
l, function() { |
127 new PaymentRequest(null, null) | 127 new PaymentRequest(null, null) |
128 }], | 128 }], |
129 ['Empty list of supported payment method identifiers should throw TypeError.
', new TypeError(), function() { | 129 ['Empty list of supported payment method identifiers should throw TypeError.
', new TypeError(), function() { |
130 new PaymentRequest([], buildDetails()) | 130 new PaymentRequest([], buildDetails()) |
131 }], | 131 }], |
132 ['Keys in payment method specific data object should match accepted method i
dentifiers.', null, function() { | |
133 new PaymentRequest(['foo'], buildDetails(), {}, {'bar': {'gateway': 'baz
'}}) | |
134 }], | |
135 ['Empty details should throw', null, function() { | 132 ['Empty details should throw', null, function() { |
136 new PaymentRequest(['foo'], {}) | 133 new PaymentRequest([{'supportedMethods': ['foo']}], {}) |
137 }], | 134 }], |
138 ['Empty items should throw', null, function() { | 135 ['Empty items should throw', null, function() { |
139 new PaymentRequest(['foo'], {'displayItems': []}) | 136 new PaymentRequest([{'supportedMethods': ['foo']}], {'displayItems': []}
) |
140 }], | 137 }], |
141 ['Aborting before showing should throw.', null, function() { | 138 ['Aborting before showing should throw.', null, function() { |
142 new PaymentRequest(['foo'], buildDetails()).abort() | 139 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails()).abor
t() |
143 }], | 140 }], |
144 | 141 |
145 // Payment method specific data should be a JSON-serializable object. | 142 // Payment method specific data should be a JSON-serializable object. |
146 ['Array value for payment method specific data parameter should throw', null
, function() { | 143 ['Array value for payment method specific data parameter should throw', null
, function() { |
147 new PaymentRequest(['foo'], buildDetails(), {}, []) | 144 new PaymentRequest([{'supportedMethods': ['foo'], 'data': []}], buildDet
ails()) |
148 }], | 145 }], |
149 ['String value for payment method specific data parameter should throw', nul
l, function() { | 146 ['String value for payment method specific data parameter should throw', nul
l, function() { |
150 new PaymentRequest(['foo'], buildDetails(), {}, 'foo') | 147 new PaymentRequest([{'supportedMethods': ['foo'], 'data': 'foo'}], build
Details()) |
151 }], | 148 }], |
152 ['Numeric value for payment method specific data parameter should throw', nu
ll, function() { | 149 ['Numeric value for payment method specific data parameter should throw', nu
ll, function() { |
153 new PaymentRequest(['foo'], buildDetails(), {}, 42) | 150 new PaymentRequest([{'supportedMethods': ['foo'], 'data': 42}], buildDet
ails()) |
154 }], | 151 }], |
155 ['Infinite JSON value for one of the payment method specific data pieces sho
uld throw', null, function() { | 152 ['Infinite JSON value for one of the payment method specific data pieces sho
uld throw', null, function() { |
156 var infiniteData = {'foo': {}}; | 153 var infiniteData = {'foo': {}}; |
157 infiniteData.foo = infiniteData; | 154 infiniteData.foo = infiniteData; |
158 new PaymentRequest(['foo'], buildDetails(), {}, infiniteData) | 155 new PaymentRequest([{'supportedMethods': ['foo'], 'data': infiniteData}]
, buildDetails()) |
159 }], | 156 }], |
160 | 157 ['Null for payment method specific data parameter should throw', null, funct
ion() { |
161 // Values in payment method specific data object should be JSON-serializable
objects. | 158 new PaymentRequest([{'supportedMethods': ['foo'], 'data': null}], buildD
etails()) |
162 ['Array value for one of the payment method specific data pieces should thro
w', null, function() { | |
163 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': []}) | |
164 }], | 159 }], |
165 ['String value for one of the payment method specific data pieces should thr
ow', null, function() { | 160 ['Empty string for payment method specific data parameter should throw', nul
l, function() { |
166 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 'bar'}) | 161 new PaymentRequest([{'supportedMethods': ['foo'], 'data': ''}], buildDet
ails()) |
167 }], | 162 }] |
168 ['Numeric value for one of the payment method specific data pieces should th
row', null, function() { | |
169 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 42}) | |
170 }], | |
171 ]); | 163 ]); |
172 | 164 |
173 var detailNames = ['displayItems', 'shippingOptions']; | 165 var detailNames = ['displayItems', 'shippingOptions']; |
174 for (var i in detailNames) { | 166 for (var i in detailNames) { |
175 generate_tests(assert_throws, [ | 167 generate_tests(assert_throws, [ |
176 // Invalid currency code formats. | 168 // Invalid currency code formats. |
177 ['Invalid currency code US1 should throw', null, function() { | 169 ['Invalid currency code US1 should throw', null, function() { |
178 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: 'US1'})) | 170 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': 'US1'})) |
179 }], | 171 }], |
180 ['Invalid currency code US should throw', null, function() { | 172 ['Invalid currency code US should throw', null, function() { |
181 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: 'US'})) | 173 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': 'US'})) |
182 }], | 174 }], |
183 ['Invalid currency code USDO should throw', null, function() { | 175 ['Invalid currency code USDO should throw', null, function() { |
184 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: 'USDO'})) | 176 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': 'USDO'})) |
185 }], | 177 }], |
186 ['Invalid currency code usd should throw', null, function() { | 178 ['Invalid currency code usd should throw', null, function() { |
187 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: 'usd'})) | 179 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': 'usd'})) |
188 }], | 180 }], |
189 ['Empty currency code should throw', null, function() { | 181 ['Empty currency code should throw', null, function() { |
190 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: ''})) | 182 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': ''})) |
191 }], | 183 }], |
192 ['Null currency code should throw', null, function() { | 184 ['Null currency code should throw', null, function() { |
193 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: null})) | 185 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': null})) |
194 }], | 186 }], |
195 ['Undefined currency code should throw', null, function() { | 187 ['Undefined currency code should throw', null, function() { |
196 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currency'
: undefined})) | 188 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'currency': undefined})) |
197 }], | 189 }], |
198 | 190 |
199 // Invalid amount formats. | 191 // Invalid amount formats. |
200 ['Invalid amount "-" should throw', null, function() { | 192 ['Invalid amount "-" should throw', null, function() { |
201 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
-'})) | 193 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '-'})) |
202 }], | 194 }], |
203 ['Invalid amount "notdigits" should throw', null, function() { | 195 ['Invalid amount "notdigits" should throw', null, function() { |
204 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
notdigits'})) | 196 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': 'notdigits'})) |
205 }], | 197 }], |
206 ['Invalid amount "ALSONOTDIGITS" should throw', null, function() { | 198 ['Invalid amount "ALSONOTDIGITS" should throw', null, function() { |
207 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
ALSONOTDIGITS'})) | 199 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': 'ALSONOTDIGITS'})) |
208 }], | 200 }], |
209 ['Invalid amount "10." should throw', null, function() { | 201 ['Invalid amount "10." should throw', null, function() { |
210 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
10.'})) | 202 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '10.'})) |
211 }], | 203 }], |
212 ['Invalid amount ".99" should throw', null, function() { | 204 ['Invalid amount ".99" should throw', null, function() { |
213 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
.99'})) | 205 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '.99'})) |
214 }], | 206 }], |
215 ['Invalid amount "-10." should throw', null, function() { | 207 ['Invalid amount "-10." should throw', null, function() { |
216 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
-10.'})) | 208 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '-10.'})) |
217 }], | 209 }], |
218 ['Invalid amount "-.99" should throw', null, function() { | 210 ['Invalid amount "-.99" should throw', null, function() { |
219 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
-.99'})) | 211 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '-.99'})) |
220 }], | 212 }], |
221 ['Invalid amount "10-" should throw', null, function() { | 213 ['Invalid amount "10-" should throw', null, function() { |
222 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
10-'})) | 214 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '10-'})) |
223 }], | 215 }], |
224 ['Invalid amount "1-0" should throw', null, function() { | 216 ['Invalid amount "1-0" should throw', null, function() { |
225 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
1-0'})) | 217 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '1-0'})) |
226 }], | 218 }], |
227 ['Invalid amount "1.0.0" should throw', null, function() { | 219 ['Invalid amount "1.0.0" should throw', null, function() { |
228 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
1.0.0'})) | 220 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '1.0.0'})) |
229 }], | 221 }], |
230 ['Invalid amount "1/3" should throw', null, function() { | 222 ['Invalid amount "1/3" should throw', null, function() { |
231 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
1/3'})) | 223 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': '1/3'})) |
232 }], | 224 }], |
233 ['Empty amount should throw', null, function() { | 225 ['Empty amount should throw', null, function() { |
234 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': '
'})) | 226 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': ''})) |
235 }], | 227 }], |
236 ['Null amount should throw', null, function() { | 228 ['Null amount should throw', null, function() { |
237 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': n
ull})) | 229 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': null})) |
238 }], | 230 }], |
239 ['Undefined amount should throw', null, function() { | 231 ['Undefined amount should throw', null, function() { |
240 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': u
ndefined})) | 232 new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails(det
ailNames[i], {'value': undefined})) |
241 }], | 233 }], |
242 ]); | 234 ]); |
243 } | 235 } |
244 </script> | 236 </script> |
OLD | NEW |