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

Side by Side Diff: third_party/WebKit/LayoutTests/payments/payment-request-interface.html

Issue 1753543002: PaymentRequest Mojo bindings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@interface
Patch Set: Update the links to the spec. Created 4 years, 9 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 test(function() { 7 function substiute(originalObject, substiuteKeyValuePair) {
8 new PaymentRequest([], {}, {}, {}); 8 for (var key in originalObject) {
9 if (originalObject.hasOwnProperty(key) && substiuteKeyValuePair.hasOwnPr operty(key)) {
10 originalObject[key] = substiuteKeyValuePair[key];
11 }
12 }
13 }
14
15 function buildItem(optionalSubstituteKeyValuePair) {
16 var item = {'id': 'item_id', 'label': 'Item Description', 'amount': {'curren cyCode': 'USD', 'value': '10.00'}};
17
18 if (optionalSubstituteKeyValuePair) {
19 substiute(item, optionalSubstituteKeyValuePair);
20 substiute(item['amount'], optionalSubstituteKeyValuePair);
21 }
22
23 return item;
24 }
25
26 function buildDetails(optionalDetailName, optionalSubstituteKeyValuePair) {
27 var details = {};
28 var detailNames = ['items', 'shippingOptions'];
29
30 for (var i in detailNames) {
31 if (optionalDetailName == detailNames[i]) {
32 details[detailNames[i]] = [buildItem(optionalSubstituteKeyValuePair) ];
33 } else {
34 details[detailNames[i]] = [buildItem()];
35 }
36 }
37
38 return details;
39 }
40
41 test(function() {
42 new PaymentRequest(['foo'], buildDetails(), {}, {});
9 }, 'Creating a PaymentRequest with empty parameters should not throw or crash.') ; 43 }, 'Creating a PaymentRequest with empty parameters should not throw or crash.') ;
10 44
11 test(function() { 45 test(function() {
12 new PaymentRequest([], {}, {}, {}, ''); 46 new PaymentRequest(['foo'], buildDetails(), {}, {}, '');
13 }, 'Creating a PaymentRequest with extra parameters should not throw or crash.') ; 47 }, 'Creating a PaymentRequest with extra parameters should not throw or crash.') ;
14 48
15 test(function() { 49 test(function() {
16 new PaymentRequest([], {}); 50 new PaymentRequest(['foo'], buildDetails());
17 }, 'Creating a PaymentRequest with omitted optional parameters should not throw or crash.'); 51 }, 'Creating a PaymentRequest with omitted optional parameters should not throw or crash.');
18 52
19 test(function() { 53 test(function() {
20 new PaymentRequest([], {}, undefined, undefined); 54 new PaymentRequest(['foo'], buildDetails(), undefined, undefined);
21 }, 'Creating a PaymentRequest with undefined optional parameters should not thro w or crash.'); 55 }, 'Creating a PaymentRequest with undefined optional parameters should not thro w or crash.');
22 56
23 test(function() { 57 test(function() {
24 new PaymentRequest([], {}, null, null); 58 new PaymentRequest(['foo'], buildDetails(), null, null);
25 }, 'Creating a PaymentRequest with null optional parameters should not throw or crash.'); 59 }, 'Creating a PaymentRequest with null optional parameters should not throw or crash.');
26 60
61 test(function() {
62 var request = new PaymentRequest(['foo'], buildDetails());
63 assert_readonly(request, 'shippingAddress', 'PaymentRequest should have a re adonly shippingAddress property.');
64 assert_readonly(request, 'shippingOption', 'PaymentRequest should have a rea donly shippingOption property.');
65 }, 'PaymentRequest should have readonly shippingAddress and shippingOption prope rties.');
66
67 test(function() {
68 var request = new PaymentRequest(['foo'], buildDetails());
69 assert_not_equals(request.onshippingaddresschange, undefined, 'PaymentReques t should have onShippingAddressChange event.');
70 assert_not_equals(request.onshippingoptionchange, undefined, 'PaymentRequest should have onShippingOptionChange event.');
71 }, 'PaymentRequest should have onShippingAddressChange and onShippingOptionChang e events.');
72
73 test(function() {
74 var request = new PaymentRequest(['foo'], buildDetails());
75 assert_not_equals(request.abort, undefined, 'PaymentRequest should have abor t() method.');
76 assert_not_equals(request.show, undefined, 'PaymentRequest should have show( ) method.');
77 }, 'PaymentRequest should have methods abort() and show().');
78
79 test(function() {
80 var request = new PaymentRequest(['foo'], buildDetails());
81 request.show();
82 request.abort();
83 }, 'PaymentRequest.abort() and PaymentRequest.show() should take no parameters.' );
84
85 test(function() {
86 var request = new PaymentRequest(['foo'], buildDetails(), {'requestShipping' : true}, {'foo': {'gateway': 'bar'}});
87 request.show();
88 request.abort();
89 }, 'Valid data causes no errors.');
90
91 test(function() {
92 var request = new PaymentRequest(['foo'], buildDetails('shippingOptions', {' id': 'standard'}));
93 assert_equals('standard', request.shippingOption);
94 }, 'Shipping option identifier should default to the single provided option.');
95
96 test(function() {
97 var request = new PaymentRequest(['foo'], {"items": [buildItem()]});
98 assert_equals(null, request.shippingOption);
99 }, 'Shipping option identifier should be null when no shipping options are provi ded.');
100
101 test(function() {
102 var request = new PaymentRequest(['foo'], {'items': [buildItem()], 'shipping Options': [buildItem({'id': 'standard'}), buildItem({'id': 'express'})]});
103 assert_equals(null, request.shippingOption);
104 }, 'Shipping option identifier should be null at first when multiple shipping op tions are provided.');
105
27 generate_tests(assert_throws, [ 106 generate_tests(assert_throws, [
28 ['PaymentRequest constructor should throw for incorrect parameter types.', n ull, function() { 107 ['PaymentRequest constructor should throw for incorrect parameter types.', n ull, function() {
29 new PaymentRequest('', '', '', '') 108 new PaymentRequest('', '', '', '')
30 }], 109 }],
31 ['PaymentRequest constructor should throw for undefined required parameters. ', null, function() { 110 ['PaymentRequest constructor should throw for undefined required parameters. ', null, function() {
32 new PaymentRequest(undefined, undefined) 111 new PaymentRequest(undefined, undefined)
33 }], 112 }],
34 ['PaymentRequest constructor should throw for null required parameter.', nul l, function() { 113 ['PaymentRequest constructor should throw for null required parameter.', nul l, function() {
35 new PaymentRequest(null, null) 114 new PaymentRequest(null, null)
36 }] 115 }],
116 ['Empty list of supported payment method identifiers should throw.', null, f unction() {
117 new PaymentRequest([], buildDetails())
118 }],
119 ['Keys in payment method specific data object should match accepted method i dentifiers.', null, function() {
120 new PaymentRequest(['foo'], buildDetails(), {}, {'bar': {'gateway': 'baz '}})
121 }],
122 ['Empty details should throw', null, function() {
123 new PaymentRequest(['foo'], {})
124 }],
125 ['Empty items should throw', null, function() {
126 new PaymentRequest(['foo'], {'items': []})
127 }],
128 ['Aborting before showing should throw.', null, function() {
129 new PaymentRequest(['foo'], buildDetails()).abort()
130 }],
131
132 // Payment method specific data should be a JSON-serializable object.
133 ['Array value for payment method specific data parameter should throw', null , function() {
134 new PaymentRequest(['foo'], buildDetails(), {}, [])
135 }],
136 ['String value for payment method specific data parameter should throw', nul l, function() {
137 new PaymentRequest(['foo'], buildDetails(), {}, 'foo')
138 }],
139 ['Numeric value for payment method specific data parameter should throw', nu ll, function() {
140 new PaymentRequest(['foo'], buildDetails(), {}, 42)
141 }],
142
143 // Values in payment method specific data object should be JSON-serializable objects.
144 ['Array value for one of the payment method specific data pieces should thro w', null, function() {
145 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': []})
146 }],
147 ['String value for one of the payment method specific data pieces should thr ow', null, function() {
148 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 'bar'})
149 }],
150 ['Numeric value for one of the payment method specific data pieces should th row', null, function() {
151 new PaymentRequest(['foo'], buildDetails(), {}, {'foo': 42})
152 }],
37 ]); 153 ]);
38 154
39 test(function() { 155 var detailNames = ['items', 'shippingOptions'];
40 var request = new PaymentRequest([], {}); 156 for (var i in detailNames) {
41 assert_readonly(request, "shippingAddress", 'PaymentRequest should have a re adonly shippingAddress property.'); 157 generate_tests(assert_throws, [
42 assert_readonly(request, "shippingOption", 'PaymentRequest should have a rea donly shippingOption property.'); 158 // Invalid currency code formats. If you update these test cases, also u pdate PaymentsValidatorsTest.cpp.
43 }, 'PaymentRequest should have readonly shippingAddress and shippingOption prope rties.'); 159 ['Invalid currency code US1 should throw', null, function() {
44 160 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': 'US1'}))
45 test(function() { 161 }],
46 var request = new PaymentRequest([], {}); 162 ['Invalid currency code US should throw', null, function() {
47 assert_not_equals(request.onshippingaddresschange, undefined, 'PaymentReques t should have onShippingAddressChange event.'); 163 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': 'US'}))
48 assert_not_equals(request.onshippingoptionchange, undefined, 'PaymentRequest should have onShippingOptionChange event.'); 164 }],
49 }, 'PaymentRequest should have onShippingAddressChange and onShippingOptionChang e events.'); 165 ['Invalid currency code USDO should throw', null, function() {
50 166 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': 'USDO'}))
51 167 }],
52 test(function() { 168 ['Invalid currency code usd should throw', null, function() {
53 var request = new PaymentRequest([], {}); 169 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': 'usd'}))
54 assert_not_equals(request.abort, undefined, 'PaymentRequest should have abor t() method.'); 170 }],
55 assert_not_equals(request.show, undefined, 'PaymentRequest should have show( ) method.'); 171 ['Empty currency code should throw', null, function() {
56 }, 'PaymentRequest should have methods abort() and show().'); 172 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': ''}))
57 173 }],
58 test(function() { 174 ['Null currency code should throw', null, function() {
59 var request = new PaymentRequest([], {}); 175 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': null}))
60 request.abort(); 176 }],
61 request.show(); 177 ['Undefined currency code should throw', null, function() {
62 }, 'PaymentRequest.abort() and PaymentRequest.show() should take no parameters.' ); 178 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'currencyC ode': undefined}))
179 }],
180
181 // Invalid amount formats. If you update these test cases, also update P aymentsValidatorsTest.cpp.
182 ['Invalid amount "-" should throw', null, function() {
183 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' -'}))
184 }],
185 ['Invalid amount "notdigits" should throw', null, function() {
186 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' notdigits'}))
187 }],
188 ['Invalid amount "ALSONOTDIGITS" should throw', null, function() {
189 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' ALSONOTDIGITS'}))
190 }],
191 ['Invalid amount "10." should throw', null, function() {
192 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 10.'}))
193 }],
194 ['Invalid amount ".99" should throw', null, function() {
195 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' .99'}))
196 }],
197 ['Invalid amount "-10." should throw', null, function() {
198 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' -10.'}))
199 }],
200 ['Invalid amount "-.99" should throw', null, function() {
201 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' -.99'}))
202 }],
203 ['Invalid amount "10-" should throw', null, function() {
204 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 10-'}))
205 }],
206 ['Invalid amount "1-0" should throw', null, function() {
207 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 1-0'}))
208 }],
209 ['Invalid amount "1.0.0" should throw', null, function() {
210 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 1.0.0'}))
211 }],
212 ['Invalid amount "1/3" should throw', null, function() {
213 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 1/3'}))
214 }],
215 ['Invalid amount "0123456789012345678.90123456789" should throw', null, function() {
216 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 0123456789012345678.90123456789'}))
217 }],
218 ['Invalid amount "01234567890123456789.01234567890" should throw', null, function() {
219 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 01234567890123456789.01234567890'}))
220 }],
221 ['Invalid amount "0123456789012345678901234567890" should throw', null, function() {
222 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' 0123456789012345678901234567890'}))
223 }],
224 ['Empty amount should throw', null, function() {
225 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': ' '}))
226 }],
227 ['Null amount should throw', null, function() {
228 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': n ull}))
229 }],
230 ['Undefined amount should throw', null, function() {
231 new PaymentRequest(['foo'], buildDetails(detailNames[i], {'value': u ndefined}))
232 }],
233 ]);
234 }
63 </script> 235 </script>
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698