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

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

Issue 2101463002: PaymentRequest: Implement PaymentDetailsModifier dictionary (in blink side). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/modules.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/payments/payment-request-interface.html
diff --git a/third_party/WebKit/LayoutTests/payments/payment-request-interface.html b/third_party/WebKit/LayoutTests/payments/payment-request-interface.html
index 1c3b1a24eee7719e04a72019b1ff595c04f96813..29e70b7c11e748af6af07cfe74bb5612a7e5d9b2 100644
--- a/third_party/WebKit/LayoutTests/payments/payment-request-interface.html
+++ b/third_party/WebKit/LayoutTests/payments/payment-request-interface.html
@@ -35,27 +35,28 @@ function buildItem(optionalSubstituteKeyValuePairs) {
return item;
}
+function setValue(obj, key, val) {
+ keys = key.split(/\./);
+ key = keys.pop();
+ keys.forEach((k) => { obj = obj[k]; });
+ assert_true(obj != undefined);
+ obj[key] = val;
+}
+
function buildDetails(optionalDetailName, optionalSubstituteKeyValuePairs) {
- var details = {};
- var detailNames = ['total', 'displayItems', 'shippingOptions'];
-
- assert_true(!optionalDetailName || detailNames.indexOf(optionalDetailName) >= 0, 'Detail name "' + optionalDetailName + '" should be either "total", "displayItems", or "shippingOptions".');
-
- for (var i in detailNames) {
- if (optionalDetailName == detailNames[i]) {
- if (detailNames[i] == 'total') {
- details[detailNames[i]] = buildItem(optionalSubstituteKeyValuePairs);
- } else {
- details[detailNames[i]] = [buildItem(optionalSubstituteKeyValuePairs)];
- }
- } else {
- if (detailNames[i] == 'total') {
- details[detailNames[i]] = buildItem();
- } else {
- details[detailNames[i]] = [buildItem()];
- }
- }
- }
+ var details = {
+ 'total': buildItem(),
+ 'displayItems': [buildItem()],
+ 'shippingOptions': [buildItem()],
+ 'modifiers': [{
+ 'supportedMethods': ['foo'],
+ 'total': buildItem(),
+ 'additionalDisplayItems': [buildItem()]
+ }]
+ };
+
+ if (optionalDetailName)
+ setValue(details, optionalDetailName, buildItem(optionalSubstituteKeyValuePairs));
return details;
}
@@ -111,12 +112,12 @@ test(function() {
}, 'Valid data causes no errors.');
test(function() {
- var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions', {'id': 'standard'}));
+ var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions.0', {'id': 'standard'}));
assert_equals(null, request.shippingOption);
}, 'Shipping option identifier should be null if shipping request is omitted.');
test(function() {
- var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions', {'id': 'standard'}), {'requestShipping': false});
+ var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions.0', {'id': 'standard'}), {'requestShipping': false});
assert_equals(null, request.shippingOption);
}, 'Shipping option identifier should be null if shipping is explicitly not requested.');
@@ -126,12 +127,12 @@ test(function() {
}, 'Shipping option identifier should be null if no shipping options are provided.');
test(function() {
- var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions', {'selected': false}), {'requestShipping': true});
+ var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions.0', {'selected': false}), {'requestShipping': true});
assert_equals(null, request.shippingOption);
}, 'Shipping option identifier should be null if the single provided option is not selected.');
test(function() {
- var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions', {'id': 'standard', 'selected': true}), {'requestShipping': true});
+ var request = new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('shippingOptions.0', {'id': 'standard', 'selected': true}), {'requestShipping': true});
assert_equals('standard', request.shippingOption);
}, 'Shipping option identifier should default to the single provided option if it is selected.');
@@ -172,7 +173,7 @@ test(function() {
}, 'Negative total value should throw a TypeError.');
test(function() {
- new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('displayItems', {'value': '-0.01'}));
+ new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails('displayItems.0', {'value': '-0.01'}));
}, 'Negative line item value should not throw.');
test(function() {
@@ -181,6 +182,50 @@ test(function() {
});
}, 'Absence of total should throw TypeError.');
+test(function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': undefined});
+}, 'Undefined modifiers should not throw.');
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': []});
+ });
+}, 'Empty modifiers should throw TypeError.');
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': [{'total': buildItem()}]});
+ });
+}, 'Absence of supportedMethods in modifiers should throw TypeError.');
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': [{'supportedMethods': []}]});
+ });
+}, 'Empty supportedMethods in modifiers should throw TypeError.');
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': [{'supportedMethods': undefined}]});
+ });
+}, 'Undefined supportedMethods in modifiers should throw TypeError.');
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': [{'supportedMethods': null}]});
+ });
+}, 'Null supportedMethods in modifiers should throw TypeError.');
+
+test(function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': [{'supportedMethods': ['foo'], 'total': buildItem({'value': '0.0'})}]});
+}, 'Non-negative total value in PaymentDetailsModifier should not throw.');
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new PaymentRequest([{'supportedMethods': ['foo']}], {'total': buildItem(), 'modifiers': [{'supportedMethods': ['foo'], 'total': buildItem({'value': '-0.01'})}]});
+ });
+}, 'Negative total value in PaymentDetailsModifier should throw a TypeError.');
+
promise_test(function(t) {
return promise_rejects(t, null, new PaymentRequest([{'supportedMethods': ['foo']}], buildDetails()).abort());
}, 'abort() without show() should reject with error');
@@ -231,7 +276,7 @@ generate_tests(assert_throws, [
}]
]);
-var detailNames = ['total', 'displayItems', 'shippingOptions'];
+var detailNames = ['total', 'displayItems.0', 'shippingOptions.0', 'modifiers.0.total', 'modifiers.0.additionalDisplayItems.0'];
for (var i in detailNames) {
generate_tests(assert_throws, [
// Invalid currency code formats.
« no previous file with comments | « no previous file | third_party/WebKit/Source/modules/modules.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698