[Payment Request] Update web platform tests
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / payment-request / payment-request-abort-method.https.html
1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <title>Test for PaymentRequest.abort() method</title>
4 <link rel="help" href="https://w3c.github.io/browser-payment-api/#abort-method">
5 <script src="/resources/testharness.js"></script>
6 <script src="/resources/testharnessreport.js"></script>
7 <script src='/resources/testdriver-vendor.js'></script>
8 <script src="/resources/testdriver.js"></script>
9 <script>
10 "use strict";
11 setup({
12   // Ignore unhandled rejections resulting from .show()'s acceptPromise
13   // not being explicitly handled.
14   allow_uncaught_exception: true,
15   explicit_timeout: true,
16 });
17 const basicCard = Object.freeze({ supportedMethods: "basic-card" });
18 const applePay = Object.freeze({
19   supportedMethods: "https://apple.com/apple-pay",
20 });
21 const defaultMethods = Object.freeze([basicCard, applePay]);
22 const defaultDetails = Object.freeze({
23   total: {
24     label: "Total",
25     amount: {
26       currency: "USD",
27       value: "1.00",
28     },
29   },
30 });
31
32 promise_test(async t => {
33   // request is in "created" state
34   const request = new PaymentRequest(defaultMethods, defaultDetails);
35   await promise_rejects(t, "InvalidStateError", request.abort());
36 }, `Throws if the promise [[state]] is not "interactive"`);
37
38 promise_test(async t => {
39   const request = new PaymentRequest(defaultMethods, defaultDetails);
40   const acceptPromise = test_driver.bless("show payment request", () =>
41     request.show()
42   );
43   try {
44     await request.abort();
45   } catch (err) {
46     assert_unreached("Unexpected promise rejection: " + err.message);
47   }
48   await promise_rejects(t, "AbortError", acceptPromise);
49   // As request is now "closed", trying to show it will fail
50   await promise_rejects(t, "InvalidStateError", request.show());
51 }, "The same request cannot be shown multiple times.");
52
53 promise_test(async t => {
54   // request is in "created" state.
55   const request = new PaymentRequest(defaultMethods, defaultDetails);
56   await promise_rejects(t, "InvalidStateError", request.abort());
57   // Call it again, for good measure.
58   await promise_rejects(t, "InvalidStateError", request.abort());
59   // The request's state is "created", so let's show it
60   // which changes the state to "interactive.".
61   const acceptPromise = test_driver.bless("show payment request", () =>
62     request.show()
63   );
64   // Let's set request the state to "closed" by calling .abort()
65   try {
66     await request.abort();
67   } catch (err) {
68     assert_unreached("Unexpected promise rejection: " + err.message);
69   }
70   // The request is now "closed", so...
71   await promise_rejects(t, "InvalidStateError", request.abort());
72   await promise_rejects(t, "AbortError", acceptPromise);
73 }, "Aborting a request before it is shown doesn't prevent it from being shown later.");
74
75 promise_test(async t => {
76   const request = new PaymentRequest(defaultMethods, defaultDetails);
77   const promises = new Set([request.abort(), request.abort(), request.abort()]);
78   assert_equals(promises.size, 3, "Must have three unique objects");
79 }, "Calling abort() multiple times is always a new object.");
80 </script>
81