| <!DOCTYPE html> |
| <!-- Copyright © 2017 Mozilla and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> |
| <meta charset="utf-8"> |
| <title>Test for validity of payment method identifiers during construction</title> |
| <link rel="help" href="https://w3c.github.io/browser-payment-api/#constructor"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| "use strict"; |
| const validAmount = Object.freeze({ |
| currency: "USD", |
| value: "1.0", |
| }); |
| const validTotal = Object.freeze({ |
| label: "Default Total", |
| amount: validAmount, |
| }); |
| const defaultDetails = Object.freeze({ |
| total: validTotal, |
| }); |
| |
| test(() => { |
| const validMethods = [ |
| "https://wpt", |
| "https://wpt.fyi/", |
| "https://wpt.fyi/payment", |
| "https://wpt.fyi/payment-request", |
| "https://wpt.fyi/payment-request?", |
| "https://wpt.fyi/payment-request?this=is", |
| "https://wpt.fyi/payment-request?this=is&totally", |
| "https://wpt.fyi:443/payment-request?this=is&totally", |
| "https://wpt.fyi:443/payment-request?this=is&totally#fine", |
| "https://:@wpt.fyi:443/payment-request?this=is&totally#👍", |
| " \thttps://wpt\n ", |
| "https://xn--c1yn36f", |
| "https://點看", |
| ]; |
| for (const validMethod of validMethods) { |
| try { |
| const methods = [{ supportedMethods: validMethod }]; |
| new PaymentRequest(methods, defaultDetails); |
| } catch (err) { |
| assert_unreached( |
| `Unexpected exception with valid standardized PMI: ${validMethod}. ${err}` |
| ); |
| } |
| } |
| }, "Must support valid standard URL PMIs"); |
| |
| test(() => { |
| const validMethods = [ |
| "e", |
| "n6jzof05mk2g4lhxr-u-q-w1-c-i-pa-ty-bdvs9-ho-ae7-p-md8-s-wq3-h-qd-e-q-sa", |
| "a-b-q-n-s-pw0", |
| "m-u", |
| "s-l5", |
| "k9-f", |
| "m-l", |
| "u4-n-t", |
| "i488jh6-g18-fck-yb-v7-i", |
| "x-x-t-t-c34-o", |
| "basic-card", |
| // gets coerced to "basic-card", for compat with old version of spec |
| ["basic-card"], |
| ]; |
| for (const validMethod of validMethods) { |
| try { |
| const methods = [{ supportedMethods: validMethod }]; |
| new PaymentRequest(methods, defaultDetails); |
| } catch (err) { |
| assert_unreached( |
| `Unexpected exception with valid standardized PMI: ${validMethod}. ${err}` |
| ); |
| } |
| } |
| }, "Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported"); |
| |
| test(() => { |
| const invalidMethods = [ |
| "basic-💳", |
| "¡basic-*-card!", |
| "Basic-Card", |
| "0", |
| "-", |
| "--", |
| "a--b", |
| "-a--b", |
| "a-b-", |
| "0-", |
| "0-a", |
| "a0--", |
| "A-", |
| "A-B", |
| "A-b", |
| "a-0", |
| "a-0b", |
| " a-b", |
| "\t\na-b", |
| "a-b ", |
| "a-b\n\t", |
| "basic-card?not-really", |
| "basic-card://not-ok", |
| "basic card", |
| "/basic card/", |
| "BaSicCarD", |
| "BASIC-CARD", |
| " basic-card ", |
| "this is not supported", |
| " ", |
| "foo,var", |
| ["visa","mastercard"], // stringifies to "visa,mastercard" |
| ]; |
| for (const invalidMethod of invalidMethods) { |
| assert_throws( |
| new RangeError(), |
| () => { |
| const methods = [{ supportedMethods: invalidMethod }]; |
| new PaymentRequest(methods, defaultDetails); |
| }, |
| `expected RangeError processing invalid standardized PMI "${invalidMethod}"` |
| ); |
| } |
| }, "Must throw on syntactically invalid standardized payment method identifiers"); |
| |
| test(() => { |
| const invalidMethods = [ |
| "https://username@example.com/pay", |
| "https://:password@example.com/pay", |
| "https://username:password@example.com/pay", |
| "http://username:password@example.com/pay", |
| "http://foo.com:100000000/pay", |
| "not-https://wpt.fyi/payment-request", |
| "../realitive/url", |
| "/absolute/../path?", |
| "https://", |
| ]; |
| for (const invalidMethod of invalidMethods) { |
| assert_throws( |
| new RangeError(), |
| () => { |
| const methods = [{ supportedMethods: invalidMethod }]; |
| new PaymentRequest(methods, defaultDetails); |
| }, |
| `expected RangeError processing invalid URL PMI "${invalidMethod}"` |
| ); |
| } |
| }, "Constructor MUST throw if given an invalid URL-based payment method identifier"); |
| |
| </script> |