| <!DOCTYPE html> |
| <!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> |
| <meta charset="utf-8"> |
| <title>Test for PaymentRequestUpdateEvent's updateWith() method</title> |
| <link rel="help" href="https://w3c.github.io/browser-payment-api/#updatewith-method"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| const basicCard = Object.freeze({ supportedMethods: "basic-card" }); |
| const defaultMethods = Object.freeze([basicCard]); |
| const defaultDetails = Object.freeze({ |
| total: { |
| label: "Total", |
| amount: { |
| currency: "USD", |
| value: "1.00", |
| }, |
| }, |
| }); |
| |
| test(() => { |
| // Smoke test - checks target is set as expected |
| const request = new PaymentRequest(defaultMethods, defaultDetails); |
| const ev = new PaymentRequestUpdateEvent("test"); |
| request.dispatchEvent(ev); |
| assert_equals(ev.target, request, "The request and the target at the same"); |
| }, "Let target be the request which is dispatching the event."); |
| |
| // Github issue: https://github.com/w3c/browser-payment-api/issues/546 |
| test(() => { |
| const untrustedEvents = [ |
| new PaymentRequestUpdateEvent("just a test"), |
| new PaymentRequestUpdateEvent("shippingaddresschange"), |
| new PaymentRequestUpdateEvent("shippingoptionchange"), |
| ].forEach(ev => { |
| assert_throws( |
| "InvalidStateError", |
| () => { |
| ev.updateWith(Promise.resolve()); |
| }, |
| `untrusted event of type "${ev.type}" must throw "InvalidStateError"` |
| ); |
| }); |
| }, `Calling .updateWith() with an undispatched untrusted event throws "InvalidStateError"`); |
| |
| // Github issue: https://github.com/w3c/browser-payment-api/issues/546 |
| test(() => { |
| const request = new PaymentRequest(defaultMethods, defaultDetails); |
| const untrustedEvents = [ |
| new PaymentRequestUpdateEvent("just a test"), |
| new PaymentRequestUpdateEvent("shippingaddresschange"), |
| new PaymentRequestUpdateEvent("shippingoptionchange"), |
| ].map(ev => { |
| request.dispatchEvent(ev); // set .target and dispatch flag |
| // unstrusted event. |
| assert_throws( |
| "InvalidStateError", |
| () => { |
| ev.updateWith(Promise.resolve()) |
| }, |
| `untrusted event of type "${ev.type}" must throw "InvalidStateError"` |
| ); |
| }); |
| }, `Calling .updateWith() with a dispatched, untrusted event, throws "InvalidStateError"`); |
| |
| </script> |