test_canMakePayment.html (5013B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=1345365 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for PaymentRequest API canMakePayment()</title> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 10 <script src="/tests/SimpleTest/SimpleTest.js"></script> 11 <script type="application/javascript"> 12 13 "use strict"; 14 SimpleTest.waitForExplicitFinish(); 15 16 var gUrl = SimpleTest.getTestFileURL('GeneralChromeScript.js'); 17 var gScript = SpecialPowers.loadChromeScript(gUrl); 18 19 const defaultMethods = [{ 20 supportedMethods: "basic-card", 21 }]; 22 const defaultDetails = { 23 total: { 24 label: "Total", 25 amount: { 26 currency: "USD", 27 value: "1.00" 28 } 29 }, 30 }; 31 32 const nonsupportedMethods = [{ 33 supportedMethods: "testing-payment-method", 34 }]; 35 36 function testDefaultAction() { 37 return new Promise((resolve, reject) => { 38 const payRequest = new PaymentRequest(nonsupportedMethods, defaultDetails); 39 payRequest.canMakePayment().then((result) => { 40 ok(!result, "Should be resolved with false, but got " + result + "."); 41 resolve(); 42 }).catch((err) => { 43 ok(false, "Expected no error, but got '" + err.name +"'."); 44 resolve(); 45 }); 46 }); 47 } 48 49 function testSimple() { 50 return new Promise((resolve, reject) => { 51 const payRequest = new PaymentRequest(defaultMethods, defaultDetails); 52 payRequest.canMakePayment().then((result) => { 53 ok(result, "Should be resolved with true, but got " + result + "."); 54 resolve(); 55 }).catch((err) => { 56 ok(false, "Expected no error, but got '" + err.name +"'."); 57 resolve(); 58 }); 59 }); 60 } 61 62 function testAfterShow() { 63 const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true); 64 65 return new Promise((resolve, reject) => { 66 const payRequest = new PaymentRequest(defaultMethods, defaultDetails); 67 const acceptPromise = payRequest.show(); 68 payRequest.canMakePayment().then((result) => { 69 ok(false, "Should throw 'InvalidStateError', but got resolved."); 70 resolve(); 71 }).catch( (err) => { 72 is(err.name, "InvalidStateError", 73 "Expected 'InvalidStateError', but got '" + err.name + "'."); 74 payRequest.abort().then((abortResult) => { 75 is(abortResult, undefined, "abort() should be resolved with undefined."); 76 resolve(); 77 }).catch( (error) => { 78 ok(false, "Expected no error, but got '" + error.name + "'."); 79 resolve(); 80 }).finally(handler.destruct); 81 }); 82 }); 83 } 84 85 function testAfterAbort() { 86 const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true); 87 88 return new Promise((resolve, reject) => { 89 const payRequest = new PaymentRequest(defaultMethods, defaultDetails); 90 const acceptPromise = payRequest.show(); 91 payRequest.abort().then((abortResult) => { 92 payRequest.canMakePayment().then((result) => { 93 ok(false, "Should throw 'InvalidStateError', but got resolved."); 94 resolve(); 95 }).catch( (err) => { 96 is(err.name, "InvalidStateError", 97 "Expected 'InvalidStateError', but got '" + err.name + "'."); 98 resolve(); 99 }); 100 }).catch( (err) => { 101 ok(false, "Expected no error, but got '" + err.name +"'."); 102 resolve(); 103 }).finally(handler.destruct); 104 }); 105 } 106 107 async function testNotAllowed() { 108 let payRequest = new PaymentRequest(defaultMethods, defaultDetails); 109 for (let i = 0; i < 1000; i++) { 110 try { 111 await payRequest.canMakePayment(); 112 } catch(err) { 113 is(err.name, "NotAllowedError", 114 "Expected 'NotAllowError', but got '" + err.name + "'"); 115 break; 116 } 117 } 118 for (let i = 0; i < 1000; i++) { 119 try { 120 await new PaymentRequest(defaultMethods, defaultDetails).canMakePayment(); 121 } catch(err) { 122 is(err.name, "NotAllowedError", 123 "Expected 'NotAllowError', but got '" + err.name + "'"); 124 break; 125 } 126 } 127 } 128 129 function teardown() { 130 gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() { 131 gScript.removeMessageListener("teardown-complete", teardownCompleteHandler); 132 gScript.destroy(); 133 SimpleTest.finish(); 134 }); 135 gScript.sendAsyncMessage("teardown"); 136 } 137 138 function runTests() { 139 testDefaultAction() 140 .then(testSimple) 141 .then(testAfterShow) 142 .then(testAfterAbort) 143 .then(testNotAllowed) 144 .then(teardown) 145 .catch(e => { 146 ok(false, "Unexpected error: " + e.name); 147 SimpleTest.finish(); 148 }); 149 } 150 151 window.addEventListener('load', function() { 152 SpecialPowers.pushPrefEnv({ 153 'set': [ 154 ['dom.payments.request.enabled', true], 155 ] 156 }, runTests); 157 }); 158 159 </script> 160 </head> 161 <body> 162 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1345365">Mozilla Bug 1345365</a> 163 </body> 164 </html>